K8s深度解密:一个Pod的创建过程

Kubernetes深度解密:一个Pod的奇幻漂流之旅

你以为创建Pod只是简单的yaml提交?背后是控制平面各组件精密配合的工业级流水线! 本文将用最鲜活的案例,带你亲历一个Pod从诞生到消亡的全生命周期!


一、出生证办理:APIServer的入职审核

1. 提交申请材料(kubectl apply)

# 生产环境推荐姿势(避免手滑)
kubectl apply -f pod.yaml --dry-run=client  # 预检
kubectl apply -f pod.yaml --server-side=true  # 避免版本冲突

2. APIServer的六道安检

  • 身份验证:ServiceAccount是否持有合法token
  • 权限检查:RBAC规则是否允许create pod
  • 准入控制:是否通过MutatingWebhook(自动打标签)
  • 数据验真:是否配置了requests/limits
  • etcd存档:写入集群数据库(/registry/pods)
  • 事件广播:通知所有监听组件(调度器、控制器)

二、户口分配:调度器的智能决策

调度器核心算法两阶段:

阶段 操作 生产环境常见策略
过滤 淘汰不符合条件的节点 资源不足/污点排斥/节点不可用
打分 为候选节点评分 资源均衡/亲和性/成本优化

查看调度详情:

kubectl get events --field-selector involvedObject.name=mypod
kubectl describe pod mypod | grep -A20 Events

强制调度到指定节点(调试用):

spec:
  nodeName: node-23  # 绕过调度器

三、落户安家:Kubelet的基建狂魔之路

Kubelet创建Pod的十二道工序:

  1. 下载镜像(策略控制:Always/IfNotPresent)
  2. 创建sandbox容器(pause镜像)
  3. 初始化网络(CNI插件介入)
  4. 启动init容器(按顺序执行)
  5. 启动主容器(并行执行)
  6. 执行PostStart钩子
  7. 配置健康检查探针
  8. 挂载volume(处理PVC/PV绑定)
  9. 注入ConfigMap/Secret
  10. 设置内核参数(sysctl)
  11. 应用安全策略(AppArmor)
  12. 上报状态给APIServer

镜像拉取故障排查:

kubectl describe pod mypod | grep -i pull
docker pull private-registry.com/myimage:tag  # 手动测试

四、上岗体检:健康探针的生死判决

三种探针配置实战:

livenessProbe:  # 生存检查
  exec:
    command: ["/bin/sh", "-c", "test -f /ready"]
  failureThreshold: 3
  periodSeconds: 10

readinessProbe:  # 就绪检查  
  httpGet:
    path: /healthz
    port: 8080
  initialDelaySeconds: 5

startupProbe:  # 启动保护(v1.18+)
  tcpSocket:
    port: 3306
  failureThreshold: 30  # 最长5分钟

探针避坑指南:

  • 禁用HTTP默认页(返回200但服务未就绪)
  • 避免检查脚本成为性能瓶颈
  • 合理设置initialDelaySeconds

五、意外处理:Pod的临终关怀

优雅终止全流程:

  1. 收到SIGTERM信号
  2. 从Service Endpoint摘除
  3. 执行preStop钩子(最长30s)
  4. 等待terminationGracePeriodSeconds(默认30s)
  5. 发送SIGKILL强制终止

生产环境优化配置:

spec:
  terminationGracePeriodSeconds: 60
  containers:
  - name: app
    lifecycle:
      preStop:
        exec:
          command: ["/bin/sh", "-c", "sleep 30; nginx -s quit"]

六、生产环境全流程监控

关键观测点清单:

阶段 监控指标 告警阈值
调度 scheduler_pending_pods >10 持续5分钟
镜像下载 kubelet_docker_operations_errors 错误率>5%
启动耗时 kubelet_pod_start_duration P99>30s
存活率 kubelet_running_pods 波动>20%

Grafana监控大盘配置示例:
Pod生命周期监控


七、灵魂画手:Pod创建流程图解

[用户] → kubectl apply → [APIServer]
               ↓
          写入etcd → 通知 [控制器]
               ↓
          [调度器] 选择节点 → 更新etcd
               ↓
      目标节点 [Kubelet] 开始创建
               ↓
 拉取镜像 → 启动容器 → 配置网络/存储
               ↓
      健康检查通过 → 进入Running
               ↓
   Service流量接入 → 开始服务
               ↓
 删除请求 → 优雅终止 → 资源清理

记住:每个Pod都是承载业务的战士,理解它的完整生命周期,才能打造坚若磐石的K8S生产环境!

posted on 2025-03-20 13:33  Leo-Yide  阅读(62)  评论(0)    收藏  举报