前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Kubernetes 创建 Deployment 的完整流程解析

Kubernetes 创建 Deployment 的完整流程解析

作者头像
误入歧途
发布2025-03-14 08:53:14
发布2025-03-14 08:53:14
7600
代码可运行
举报
文章被收录于专栏:误入歧途误入歧途
运行总次数:0
代码可运行

Kubernetes 创建 Deployment 的完整流程解析

当在 Kubernetes 中执行 kubectl apply -f deployment.yaml 时,背后发生了什么?本文将深入解析从 YAML 文件到运行 Pod 的完整流程。

执行 kubectl apply -f deployment.yaml 后,涉及的组件和流程如下:

代码语言:javascript
代码运行次数:0
运行
复制
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 发送请求

代码语言:javascript
代码运行次数:0
运行
复制
# 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 创建容器

代码语言:javascript
代码运行次数:0
运行
复制
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 的完整流程图,标注了每个步骤的序号:

image
image
代码语言:javascript
代码运行次数:0
运行
复制
<!DOCTYPE html>
<html>
<head>
    <title>Deployment 创建流程(步骤序号版)</title>
    <script src="https://cdn.jsdelivr.net/npm/mermaid@10.6.1/dist/mermaid.min.js"></script>
    <style>
        .step-number {
            background: #4CAF50;
            color: white;
            border-radius: 50%;
            width: 25px;
            height: 25px;
            display: inline-block;
            text-align: center;
            margin-right: 10px;
        }
    </style>
</head>
<body>
    <div class="mermaid">
        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 状态
    </div>
</body>
</html>

关键调试命令

代码语言:javascript
代码运行次数:0
运行
复制
# 查看实时事件(按时间排序)
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-03-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Kubernetes 创建 Deployment 的完整流程解析
    • 详细步骤说明
      • 1. kubectl 发送请求
      • 2. API Server 处理
      • 3. Controller Manager 响应
      • 4. Scheduler 调度决策
      • 5. Kubelet 创建容器
      • 6. CNI 网络配置
      • 7. 状态反馈循环
    • 流程图:Deployment 创建流程
    • 关键调试命令
    • 架构设计亮点
    • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档