繁体   English   中英

在 Kubernetes 中运行 Pod 和容器

[英]running pods and containers in Kubernetes

我对 Kubernates 还很陌生,到目前为止我能理解的内容,

  1. 集群是节点的集合
  2. 每个节点可以有一组正在运行的容器
  3. 一组紧密耦合的容器本身可以组合在一起形成一个 pod(尽管容器在其中运行)。

首先,到目前为止我是否正确?

其次,通过关于kube-scheduler 的文档说,

控制平面组件,监视没有分配节点的新创建的 pod,并选择一个节点让它们运行。

和文档还说豆荚是,

最小最简单的 Kubernetes 对象。 Pod 代表集群上运行的一组容器。

我的问题是,相当混乱是因为我们已经在不同的节点上运行了容器,为什么我们需要额外的节点来运行 pod?

  1. 集群是节点的集合

  2. 每个节点可以有一组正在运行的容器

你是对的。

  1. 一组紧密耦合的容器本身可以组合在一起形成一个 pod(尽管容器在其中运行)。

属于一个 Pod 的所有容器都运行在同一个节点上。

我的问题是,相当混乱是因为我们已经在不同的节点上运行了容器,为什么我们需要额外的节点来运行 pod?

实际运行的不是 pod。 在您的节点上实际运行的唯一东西是容器 Pod 只是容器的逻辑分组,是 kubernetes 中创建容器的基本单元。 (Docker 容器的标志是一条鲸鱼,如果要并行记住这一点,则将一群鲸鱼称为 pod )。 因此,如果属于 pod 的容器正在运行,则 pod 被称为正在运行。

在以下 pod 规范中, nginx-containerdebian-container容器属于名为two-containers的 pod。 当你创建这个 pod 对象时, kube-scheduler会选择一个节点来运行这个 pod(即运行两个容器),并为这个 pod 分配一个节点。 然后在该节点上运行的kubelet收到通知并启动该节点上的两个容器。 由于这两个容器属于同一个 pod,它们运行在同一个网络命名空间中。

apiVersion: v1
kind: Pod
metadata:
  name: two-containers
spec:

  restartPolicy: Never

  volumes:
  - name: shared-data
    emptyDir: {}

  containers:

  - name: nginx-container
    image: nginx
    volumeMounts:
    - name: shared-data
      mountPath: /usr/share/nginx/html

  - name: debian-container
    image: debian
    volumeMounts:
    - name: shared-data
      mountPath: /pod-data
    command: ["/bin/sh"]
    args: ["-c", "echo Hello from the debian container > /pod-data/index.html"]

数字 1 和 3 是正确的。 对于数字 2,我会说“每个节点都可以设置 Pod,每个 Pod 可以有 1 个或 1 个以上的容器”

对于您的最后一个问题,假设您创建了一个部署,其中有 3 个 pod,其中 2 个部署到节点 A,并且其中的资源被其中 2 个消耗(没有内存或 cpu),但第 3 个 pod 将处于挂起状态,只要它们不是运行该 Pod 的新节点。

他们是水平 Pod 自动伸缩和集群自动伸缩的概念https://kubernetes.io/docs/tasks/run-application/horizo​​ntal-pod-autoscale/ & https://github.com/kubernetes/autoscaler/ tree/master/cluster-autoscaler这些将进一步清除您的困惑

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM