随笔 - 240  文章 - 0  评论 - 3  阅读 - 2814

Pod的创建流程

Kubernetes Pod 创建流程解析

Kubernetes(简称 K8s)作为一个强大的容器编排平台,其核心功能之一就是管理和调度容器化应用。创建一个 Pod 是 Kubernetes 中最基本的操作之一,它涉及多个组件之间的交互。下面我们将详细解析 Kubernetes 中创建 Pod 的过程,帮助大家了解整个流程。

1. 客户端请求

Kubernetes 中创建 Pod 的流程通常从客户端发起请求开始,用户可以通过以下几种方式提交创建 Pod 的请求:

  • 使用 kubectl apply 命令。
  • 在 Kubernetes 控制台界面提交。
  • 通过 Kubernetes API 进行调用。

这些请求中通常包含了 Pod 的定义文件,格式可以是 YAML 或 JSON。在这个阶段,用户提供的 Pod 定义文件包含了容器镜像、环境变量、资源限制等信息。

2. 验证与准入控制

kube-apiserver 接收到创建 Pod 的请求后,首先会对 Pod 的定义进行一系列的验证工作,确保请求符合 Kubernetes 的规范。这些验证包括:

  • 格式验证:检查 YAML 或 JSON 文件是否符合 API 的规范。
  • 资源验证:检查请求的资源是否超出集群的限制(如 CPU、内存等)。

验证通过后,Pod 请求将会经过一系列的 准入控制器(Admission Controllers)。这些控制器用于进一步检查和修改请求,例如:

  • 权限验证:检查用户是否有足够的权限创建该 Pod。
  • 限制范围:检查 Pod 的规格是否符合预定义的策略(如 CPU 限制、内存限制等)。

这些准入控制器为 Kubernetes 集群提供了额外的安全和管理功能。

3. 持久化存储状态

当所有的验证和准入控制通过后,kube-apiserver 会将 Pod 的定义写入到 ETCD 中。ETCD 是 Kubernetes 的分布式键值存储,它用于持久化整个集群的状态信息。所有集群的资源对象,包括 Pod,都在 ETCD 中有一个记录。

写入 ETCD 后,Pod 定义成为集群的一部分,其他 Kubernetes 组件(如调度器、kubelet)可以基于这些信息执行后续操作。

4. 调度决策

Pod 定义成功写入 ETCD 后,下一步是 调度。Kubernetes 中的调度由 kube-scheduler 负责。kube-scheduler 会监听 ETCD 中的事件,并检测是否有新的、未被调度的 Pod。

在调度 Pod 时,kube-scheduler 会考虑多个因素,包括:

  • 节点资源:每个节点的 CPU、内存等资源是否足够运行该 Pod。
  • 亲和性/反亲和性规则:根据用户的配置,Pod 可以有节点亲和性(Affinity)或者反亲和性(Anti-Affinity)规则,决定其运行在哪些节点上。
  • 污点与容忍度:节点可能会被标记为“污点”,而 Pod 可以配置相应的“容忍度”来允许在这些节点上调度。

调度器根据这些条件执行调度算法,最终决定将 Pod 运行在哪个节点上。

5. 绑定 Pod 到 Node

一旦 kube-scheduler 做出调度决策,它会将 Pod 绑定到合适的 Node 上。这个绑定过程会更新到 ETCD 中,记录 Pod 被调度到的具体节点信息。

节点信息更新后,kube-apiserver 会通知集群中的各个组件,Pod 已经有了指定的执行节点。

6. kubelet 执行

每个节点上都有一个 kubelet 组件,负责管理该节点上的容器。kubelet 会定期从 kube-apiserver 拉取当前节点的 Pod 清单,查看是否有新的 Pod 被调度到当前节点。

kubelet 检测到有新的 Pod 需要创建时,它会执行以下操作:

  • 为 Pod 分配网络资源:为 Pod 分配一个 IP 地址,通常通过 CNI(容器网络接口)插件来实现。
  • 创建和启动容器kubelet 会通过容器运行时(如 Docker、containerd)创建并启动 Pod 内的容器。
  • 设置环境变量和挂载卷kubelet 会根据 Pod 的定义配置环境变量、挂载存储卷、设置健康检查探针等。

所有这些步骤确保 Pod 在节点上正确运行。

7. 监控与报告状态

Pod 启动后,kubelet 会持续监控 Pod 和容器的状态。它会定期向 kube-apiserver 汇报容器的健康状况、资源使用情况等信息。如果容器发生崩溃或异常,kubelet 会根据配置进行重启或其他容错操作。

当 Pod 中的所有容器都成功启动并达到“就绪”状态时,kubelet 会通知 kube-apiserver,表示该 Pod 已经准备好服务请求。此时,Pod 就可以接受来自集群其他部分的请求了。

总结

Kubernetes 中的 Pod 创建流程看似简单,但涉及到多个组件的协同工作,确保 Pod 能够在集群中顺利运行。整体流程如下:

  1. 客户端请求:通过 kubectl 或 API 提交 Pod 定义。
  2. 验证与准入控制:API Server 对 Pod 进行验证,并通过准入控制器进行进一步检查。
  3. 持久化存储状态:Pod 定义写入 ETCD。
  4. 调度决策:调度器根据节点资源和调度策略决定 Pod 的运行节点。
  5. 绑定 Pod 到 Node:Pod 绑定到指定的 Node。
  6. kubelet 执行:kubelet 在目标节点上创建并启动容器。
  7. 监控与报告状态:kubelet 持续监控 Pod 状态,并汇报给 kube-apiserver
posted on   Leo-Yide  阅读(20)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器
< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8

点击右上角即可分享
微信分享提示