容器pod被创建的过程

82 阅读1分钟

1.3. 简述Pod创建过程

文章从从 用户提交 → 控制面处理 → 节点运行 这条主线说明pod的创建过程

一、用户提交创建请求(入口)

  • 用户通过 kubectl 或 CI/CD 工具调用 K8s API Server,发送 YAML 请求,如:
kubectl apply -f pod.yaml

二、API Server 接收与存储

  • kube-apiserver 收到请求后,进行:
    • 身份认证(Authentication)
    • 权限校验(Authorization)
    • 准入控制(Admission)
  • 合法后将 Pod 对象存入 etcd,状态为 Pending

三、Scheduler 调度 Pod

  • kube-scheduler 从 API Server watch 到新的 Pending Pod
  • 根据调度策略(资源、亲和性、污点容忍等)选择最佳 Node
  • 更新该 Pod 的 .spec.nodeName 字段,绑定到节点

四、kubelet 拉起 Pod

  • 被调度的 Node 上的 kubeletwatch 到自己 Node 上的新 Pod
  • kubelet 根据 PodSpec:
    • 拉取镜像(通过 container runtime,比如 containerd)
    • 创建 pause 容器作为 Pod 网络命名空间
    • 创建业务容器并加入 pause 的 namespace
    • 挂载 volume、设置探针、配置网卡等

五、Pod 启动成功 & 状态更新

  • kubelet 启动容器后,将状态汇报给 apiserver
  • 如果探针检查通过,Pod 状态由 ContainerCreating → Running

流程图:

kubectl → apiserver → etcd
                 ↓
            scheduler → 选 Node
                 ↓
             kubelet 拉起 Pod → containerd → run container
                 ↓
             状态汇报 → Pod 进入 Running 状态

总结一句话:

Pod 创建是一个从声明(YAML)→ 调度(Scheduler)→ 实现(kubelet + runtime)→ 状态反馈(APIServer)的完整闭环,是 Kubernetes “声明式 → 自动化 → 可观测” 的核心体现。