0

我正在研究 Kubernetes 的主要组件。对于创建(删除)一个 pod 的概念,我暂时陷入了困境。在许多图表或图形中,pod 被描绘在工作节点内,因此我确信它们是直接在工作节点中创建的对象。

在深入这个概念时,我遇到了一些页面,它们将 pod 视为 API 服务器中的简单占位符。

在这个参考链接中,据说在第一点创建了 pod,在第四点将 pod 与来自 API 服务器的节点相关联。
在此参考链接中,据说“在 API 服务器上创建了一个新的 Pod 对象,但未绑定到任何节点。”
在这个参考链接中,据说“一个 Pod 有一个容器,它是由 Kubernetes API 生成的占位符”

这一切让我觉得 Pod 并不是在工作节点中实际创建的。有人可以给我一个解释来为我澄清这个想法吗?

4

2 回答 2

1

简单来说,运行 pod 的过程如下:

  1. 用户发出 API 请求以在命名空间中创建 pod。
  2. API 服务器验证请求,确保用户具有在给定命名空间中创建 pod 的必要授权,并且该请求符合 PodSpec。
  3. 如果请求有效,API 服务器会在其 Etcd 数据库中创建类型为“Pod”的 API 对象。
  4. Kube-scheduler 监视 Pod 并看到有新的 Pod 对象。然后它评估 Pod 的资源、亲和性规则、nodeSelector、tolerations 等等,最后决定 Pod 应该运行哪个节点。如果由于缺乏资源或其他限制而没有可用的节点 - Pod 保持在 Pending 状态。Kube-scheduler 定期重试 Pending pod 的调度决策。
  5. 在 Pod 被调度到节点后,kube-scheduler 将作业传递给选定节点上的 kubelet。
  6. 然后 Kubelet 负责实际启动 pod。
于 2019-05-09T02:33:05.653 回答
0

@Vasily Angapov 对 Pod 的创建和调度有一个很好的解释,但我认为添加一些关于 Pod 和容器实际是什么的上下文也很重要——如果你想了解更多关于它的信息,你可以找到这里有很好的附加信息。

本质上,Pod 是创建并稍后按计划进行的。所以它们不是在工作节点上创建的,而是在节点上运行的,它们被认为是容易替换的,而不是持久的实体。因此,每当他们发生导致他们终止或删除的事情时,由于 Vasilys 回答中提到的原因,他们可能会在不同的节点上再次启动。

更多信息在这里

于 2019-05-10T15:59:41.883 回答