kubectl 获取部署,没有资源

Kubectl get deployments, no resources

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

现在我的问题是,是什么导致了这种情况发生,使用部署或 pod 之间有什么区别? ?我在第一个minikube里设置了docker驱动,跟这个有关系吗?

部署是 controller 在 pods 和 ReplicaSets 之上提供更高级别的抽象。 Deployment 为 Pods 和 ReplicaSets 提供声明式更新。部署在内部创建 ReplicaSets,其中创建了 pods。

已记录部署用例here

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

您可以通过

查看特定命名空间或所有命名空间中的部署
kubectl get deploy -n namespacename
kubectl get deploy -A

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

Pod - 它是 Kubernetes 的基本构建块。它将一个或多个容器(例如 Docker 容器)分组,共享 storage/network,以及如何 运行 容器的规范。

Deployment - It is a controller which wraps Pod/s and manages its life cycle, which is to say actual state to desired state. There is one more layer in between Deployment and Pod which is ReplicaSet :ReplicaSet 的目的是在任何给定时间维护一组稳定的副本 Pods 运行ning。因此,它通常用于保证指定数量的相同 Pods 的可用性。 下面是可视化: 来源:我画的!


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

  1. 要么您创建的是 Pod 而不是 Deployment。因此,当您执行 kubectl get deployment 时,您看不到任何资源。请注意,当您创建 Deployments 时,它会依次为您创建 ReplicaSet 并创建定义的 pods.
  2. 可能是您在不同的命名空间中创建了部署,如果是这种情况,请键入此命令以在该命名空间中查找您的部署kubectl get deploy NAME_OF_DEPLOYMENT -n NAME_OF_NAMESPACE


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

Source spec.template 内的部分下方是您的 POD 清单部分,如果您手动创建它而不采用部署路线。现在就像我之前简单说的那样 Deployments 是你的 PODs 的包装器,因此你在路径 spec.template 之外看到的任何东西都是你需要的配置定义您希望如何管理(缩放、亲和力、e.t.c)您的 POD


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