Pod的启动过程
在 Kubernetes (K8s) 中,启动一个 Pod 的过程涉及多个组件和步骤。以下是启动 Pod 的详细步骤:
1. 用户提交 Pod 配置
用户通过 kubectl 命令行工具或 Kubernetes API 提交一个 Pod 的配置文件(通常是 YAML 格式)。这个配置文件定义了 Pod 的属性,如容器镜像、环境变量、端口、资源限制等。
1 | |
2. API Server 接收请求
- 用户的请求被发送到 Kubernetes API Server。
- API Server 负责处理所有的 REST 请求,并将请求存储在 etcd 中。
3. API Server 更新 etcd
- API Server 将 Pod 的定义存储在 etcd 中,etcd 是一个分布式键值存储,用于保存 Kubernetes 集群的所有状态数据。
4. Scheduler 选择节点
- Scheduler 组件监控 etcd 中的 Pod 状态,并找到一个合适的节点来运行这个 Pod。
- Scheduler 会考虑节点的资源可用性、亲和性、反亲和性、污点和容忍等因素。
5. Pod 绑定到节点
- 一旦 Scheduler 选择了一个节点,它会更新 Pod 的状态,将 Pod 绑定到选定的节点。
- 这个更新同样会被存储在 etcd 中。
6. Kubelet 监控 Pod 状态
- 每个节点上都有一个 Kubelet 进程,它负责管理该节点上的 Pod。
- Kubelet 定期向 API Server 查询需要在其节点上运行的 Pod。
7. Kubelet 创建容器
- Kubelet 收到 Pod 的定义后,会使用容器运行时(如 Docker、containerd 等)来创建和启动容器。
- Kubelet 会根据 Pod 的定义拉取所需的容器镜像(如果镜像未在本地)。
8. 容器启动
- 容器运行时启动容器,并将其与 Pod 关联。
- Kubelet 会监控容器的状态,并定期向 API Server 更新 Pod 的状态。
9. Pod 状态更新
- 一旦容器成功启动,Kubelet 会更新 Pod 的状态为
Running。 - 如果容器启动失败,Kubelet 会尝试重启容器(根据 Pod 的重启策略)。
10. 服务发现和网络配置
- Kubernetes 会为 Pod 分配一个 IP 地址,并配置网络,使得 Pod 可以与其他 Pod 和服务进行通信。
- 如果 Pod 定义了服务(Service),Kubernetes 会创建相应的服务对象,以便其他 Pod 可以通过服务名称访问该 Pod。
11. 监控和管理
- Kubernetes 集群中的控制平面组件(如 API Server、Controller Manager 等)会持续监控 Pod 的状态。
- 如果 Pod 发生故障,Kubernetes 会根据定义的策略(如重启策略)采取相应的措施。
Pod的启动过程
https://hawli.cn/2024/03/15/Pod的启动过程/