计海龄 发表于 2025-6-1 21:04:42

Kubernetes 创建 Deployment 的完整流程解析

Kubernetes 创建 Deployment 的完整流程解析

当在 Kubernetes 中执行 kubectl apply -f deployment.yaml 时,背后发生了什么?本文将深入解析从 YAML 文件到运行 Pod 的完整流程。
执行 kubectl apply -f deployment.yaml 后,涉及的组件和流程如下:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 3
selector:
    matchLabels:
      app: my-app
template:
    metadata:
      labels:
      app: my-app
    spec:
      containers:
      - name: nginx
      image: nginx:latest详细步骤说明

1. kubectl 发送请求

# kubectl apply -f deployment.yaml

[*]通过 CLI 向 API Server 提交 Deployment 资源定义。
[*]使用 HTTPS 加密通信(默认 6443 端口)。
2. API Server 处理


[*]身份认证(X.509 证书/Bearer Token)。
[*]RBAC 权限校验。
[*]资源验证(Schema 检查)。
[*]存储到 etcd(集群状态唯一真相源)。
3. Controller Manager 响应


[*]Deployment Controller 监听到新对象。
[*]创建 ReplicaSet 并写入 etcd。
[*]副本数控制逻辑:replicas: 3 → 确保 3 个 Pod。
4. Scheduler 调度决策


[*]过滤不满足条件的 Node(污点/标签)。
[*]打分机制选择最优节点(资源利用率、亲和性等)。
[*]更新 Pod 的 nodeName 字段。
5. Kubelet 创建容器

graph LR
    A[获取 Pod 定义] --> B[拉取镜像]
    B --> C[创建容器]
    C --> D[挂载 Volume]

[*]调用 CRI(Container Runtime Interface)。
[*]支持 Docker/containerd/CRI-O 等运行时。
6. CNI 网络配置


[*]为 Pod 分配 IP(通常从 10.244.0.0/16 子网)。
[*]设置 veth pair 连接容器与主机。
[*]更新网络路由规则(Calico/Flannel 等实现)。
7. 状态反馈循环


[*]kubelet 持续监控容器状态。
[*]定期向 API Server 报告健康状况。
[*]异常时触发自愈机制(重启 Pod)。
流程图:Deployment 创建流程

以下是 Kubernetes 创建 Deployment 的完整流程图,标注了每个步骤的序号:

<!DOCTYPE html>
<html>
<head>
    <title>Deployment 创建流程(步骤序号版)</title>
   
   
</head>
<body>
   
      sequenceDiagram
            participant kubectl
            participant API Server
            participant etcd
            participant Controller
            participant Scheduler
            participant Kubelet
            participant CNI

            Note over kubectl: 1. 提交请求
            kubectl->>API Server: POST /apis/apps/v1/deployments
            
            Note over API Server: 2. 认证/存储
            API Server->>etcd: 存储 Deployment
            etcd-->>API Server: 确认写入

            Note over Controller: 3. 创建 ReplicaSet
            Controller->>API Server: Watch Deployment
            Controller->>etcd: 创建 ReplicaSet
            etcd-->>Controller: 确认写入
            
            Note over Scheduler: 4. 调度决策
            Scheduler->>API Server: Watch Pods
            Scheduler->>API Server: Bind Pod to Node
            
            Note over Kubelet: 5. 启动容器
            Kubelet->>API Server: Watch Pod binding
            Kubelet->>Kubelet: 拉取镜像
            Kubelet->>Kubelet: 创建容器
            
            Note over CNI: 6. 网络配置
            Kubelet->>CNI: 请求 IP 分配
            CNI-->>Kubelet: 返回 IP 10.244.1.2
            
            Note over API Server: 7. 状态更新
            Kubelet->>API Server: 更新 Pod 状态
   
</body>
</html>关键调试命令

# 查看实时事件(按时间排序)
kubectl get events --sort-by=.metadata.creationTimestamp

# 诊断调度问题
kubectl describe pod <pod-name> | grep -A10 Events

# 检查镜像拉取情况
kubectl describe pod <pod-name> | grep -i image

# 网络连通性测试
kubectl exec -it <pod-name> -- curl http://service-name架构设计亮点

设计原则实现机制声明式 API用户描述期望状态,系统自动收敛水平扩展无状态组件(API Server/etcd 可集群化)松耦合通过 Watch 机制实现组件解耦自愈能力Controller 持续比对实际状态与期望状态总结

通过本文,已经了解了 Kubernetes 创建 Deployment 的完整流程,从 kubectl 提交请求到 Pod 成功运行,涉及多个组件的协同工作。希望这份笔记能帮助更好地理解 Kubernetes 的内部机制!

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

莠畅缕 发表于 2025-11-11 07:42:29

前排留名,哈哈哈

靳夏萱 发表于 2025-12-16 09:56:48

收藏一下   不知道什么时候能用到

井晶灵 发表于 2025-12-26 05:38:01

鼓励转贴优秀软件安全工具和文档!

涣爹卮 发表于 2025-12-30 06:38:35

东西不错很实用谢谢分享

伯绮梦 发表于 2026-1-13 21:25:16

前排留名,哈哈哈

户烫擞 发表于 2026-1-14 00:32:43

yyds。多谢分享

酒跚骼 发表于 2026-1-18 05:37:17

收藏一下   不知道什么时候能用到

枢覆引 发表于 2026-1-19 12:49:16

感谢,下载保存了

印萍 发表于 2026-1-20 15:45:23

前排留名,哈哈哈

挠溃症 发表于 2026-1-21 01:03:29

感谢分享,下载保存了,貌似很强大

莅耸 发表于 2026-1-21 08:29:30

热心回复!

姚梨素 发表于 2026-1-23 01:56:53

这个有用。

遇玷 发表于 2026-2-3 06:38:48

过来提前占个楼

贺蛟亡 发表于 2026-2-4 04:44:29

这个好,看起来很实用

步雪卉 发表于 2026-2-4 10:59:17

鼓励转贴优秀软件安全工具和文档!

乐敬 发表于 2026-2-6 00:30:24

感谢,下载保存了

嘀荼酴 发表于 2026-2-8 11:15:08

感谢分享,下载保存了,貌似很强大

蝌棚煌 发表于 2026-2-8 13:17:07

谢谢楼主提供!

榷另辑 发表于 2026-2-9 10:05:48

分享、互助 让互联网精神温暖你我
页: [1] 2
查看完整版本: Kubernetes 创建 Deployment 的完整流程解析