前言

Pods 是 Kubernetes 集群中的基础单元,它们可以组织和运行多个容器。从用户的角度,Pods 可以很方便地被创建和管理,但是它们的实际工作原理却鲜有人关注或者一知半解。在这篇文章中,我们将从 Kubernetes 源码的角度,详细剖析一个 Pods 建立的背后。同时会分析各个组件的工作流程,以及它们如何协同工作,以实现创建和管理 Pods 的目标。我们还将在代码解读中,讲解每个组件的职责和实现原理,以更好地理解 Pods 工作的核心机制。

Pods基础知识

Pods 由一个或多个 Container 组成,或者可以说是容器的抽象,所有容器共享一个网络命名空间、存储卷等,可以很方便地共享数据和通信。

首先我们需要通过声明式配置文件来创建 Pod,描述容器的配置和所需的资源,并通过 kubectl 命令提交给 Kubernetes 集群中,而后集群的调度器也就是 Scheduler 组件会根据预先配置的亲和性与对硬件资源的考量,将 Container 放到一个合适的节点,一旦调度成功,Kubernetes 会启动其中的容器并为其分配网络命名空间、IP 地址和存储卷。

在 Pod 启动成功后,Kubernetes 会不断监视其状态,并提供了更新、扩展和故障转移等编排功能。

创建Pods的过程

ApiServer的角色

Controller Manager的角色

Scheduler的角色

Kubelet的角色

Pods的运行过程

Kubelet的监视工作

容器的启动与停止

Pods状态的更新与管理

Pods的持久化

Volumes原理