Kubectl 获取部署,无资源

ano*_*999 0 kubernetes kubectl minikube

我刚开始学习 kubernetes,在每个教程中作者通常使用“kubectl .... deploymenst”来控制新创建的部署。现在,使用这些命令(例如kubectl get deploymets)我总是得到响应No resources found in default namespace.,我必须使用“pods”而不是“deployments”来使事情工作(工作正常)。

现在我的问题是,是什么导致了这种情况,使用部署或 pod 有什么区别?? 我已经在第一个 minikube 中设置了 docker 驱动程序,这与这个有关吗?

gar*_*ium 8

首先让我们复习一些术语。

Pod - 它是 Kubernetes 的基本构建块。它将一个或多个容器(例如 Docker 容器)与共享存储/网络以及如何运行容器的规范组合在一起。

部署- 它是一个控制器,它包装 Pod/s 并管理其生命周期,即从实际状态到期望状态。在 Deployment 和 Pod 之间还有一层是ReplicaSet:ReplicaSet 的目的是在任何给定时间维护一组稳定的副本Pod。因此,它通常用于保证指定数量的相同 Pod 的可用性。下面是可视化: 在此处输入图片说明 来源:我画的!


在你的情况下可能会发生什么:

  1. 要么你已经创建了一个吊舱没有部署。因此,当您这样kubectl get deployment做时,您看不到任何资源。请注意,当您创建 Deployment 时,它会依次为您创建一个 ReplicaSet 并创建定义的 pod。
  2. 或者您可能在不同的命名空间中创建了部署,如果是这种情况,则键入此命令以在该命名空间中查找部署kubectl get deploy NAME_OF_DEPLOYMENT -n NAME_OF_NAMESPACE


澄清您的概念的更多信息:

在 spec.template 中的部分下方是应该是您的 POD 清单的部分,如果您要手动创建它而不采用部署路线。现在就像我之前简单地说的,部署是你的 POD 的包装器,因此你在路径 spec.template 之外看到的任何东西都是你需要定义的配置,你想如何管理(缩放、亲和力等)你的荚


apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80
Run Code Online (Sandbox Code Playgroud)


Arg*_*dhu 5

Deployment 是一个控制器,在 pod 和 ReplicaSet 之上提供更高级别的抽象。Deployment 为 Pod 和 ReplicaSet 提供声明性更新。部署在内部创建 ReplicaSet,并在其中创建 pod。

部署用例记录在此处

原因之一No resources found in default namespace可能是您在特定命名空间而不是默认命名空间中创建了部署。

您可以通过以下方式查看特定命名空间或所有命名空间中的部署

kubectl get deploy -n namespacename
kubectl get deploy -A
Run Code Online (Sandbox Code Playgroud)