Kubernetes健康检查与优雅停机实战指南 1. Kubernetes健康检查机制深度解析在分布式系统架构中服务健康状态监控是保障业务连续性的基石。Kubernetes通过三种探针机制实现容器健康状态的立体监控1.1 存活探针Liveness Probe实战存活探针相当于系统的心脏起搏器当检测到容器应用无响应时kubelet会自动重启容器。典型配置示例如下livenessProbe: httpGet: path: /healthz port: 8080 initialDelaySeconds: 15 periodSeconds: 20 timeoutSeconds: 1 failureThreshold: 3关键参数解析initialDelaySeconds容器启动后首次探测的等待时间必须大于应用启动耗时failureThreshold连续失败次数达到阈值才判定为不健康periodSeconds探测间隔需根据业务特点设置过频会增加系统负载生产环境经验对于Java应用建议initialDelaySeconds不低于30秒避免因JVM启动慢导致误重启1.2 就绪探针Readiness Probe设计要点就绪探针控制服务是否接收流量与Service的Endpoints列表直接关联。与存活探针的主要区别失败时不会重启容器而是从Service负载均衡池移除通常设置比存活探针更短的检测间隔建议5-10秒特殊场景处理有状态服务需确保数据同步完成后再标记就绪批处理任务任务执行期间应保持未就绪状态1.3 启动探针Startup Probe应用场景Kubernetes 1.16引入的启动探针专门解决慢启动应用问题startupProbe: httpGet: path: /initialize port: 8080 failureThreshold: 30 periodSeconds: 5该配置允许应用最长拥有150秒30×5的启动时间窗口期间其他探针不会介入。2. 优雅停机机制实现细节2.1 终止流程全解析当Pod收到终止信号时触发以下有序事件链从Service的Endpoints列表中移除发送SIGTERM信号到容器主进程等待terminationGracePeriodSeconds默认30秒未结束则发送SIGKILL强制终止2.2 最佳实践配置方案apiVersion: apps/v1 kind: Deployment spec: template: spec: terminationGracePeriodSeconds: 60 containers: - name: app lifecycle: preStop: exec: command: - /bin/sh - -c - sleep 30; nginx -s quit关键优化点对于数据库类应用grace period建议设置120秒以上preStop钩子中应包含排空连接和状态保存逻辑结合Readiness Probe实现流量无损切换2.3 多容器Pod特殊处理当Pod包含多个容器时所有容器同时收到SIGTERM每个容器独立计算grace period全部容器终止后Pod才最终销毁重要提示sidecar容器需实现快速退出机制避免阻塞主容器3. 生产环境问题排查实录3.1 典型故障场景分析案例1僵尸进程导致资源泄漏现象Pod不断重启但内存持续增长 根因主进程未正确处理SIGTERM子进程未回收 解决方案STOPSIGNAL SIGTERM CMD [bash, -c, trap kill -TERM $(jobs -p) TERM your-app wait]案例2滚动更新时请求中断现象客户端出现503错误 根因Readiness Probe检测间隔大于默认1分钟 优化方案readinessProbe: periodSeconds: 2 successThreshold: 23.2 监控指标关键看板建议监控以下Prometheus指标kubelet_running_containerskubelet_pleg_relist_duration_secondskube_pod_container_status_restarts_totalGrafana看板应包含容器重启频率热力图优雅退出成功率趋势图探针响应时间百分位4. 高级配置模式4.1 动态参数调整方案通过Downward API注入环境变量实现动态配置env: - name: LIVENESS_PERIOD valueFrom: fieldRef: fieldPath: metadata.annotations[liveness.period]结合Reloader实现配置热更新kubectl annotate deploy/app liveness.period15s4.2 混合探测策略实现复合探测策略示例TCPHTTPreadinessProbe: exec: command: - /bin/grpc_health_probe - -addr:8080 httpGet: path: /health port: 8081 tcpSocket: port: 3306这种配置适用于微服务网关等关键组件通过多维度检查确保真实可用性。5. 内核参数调优建议对于高并发场景需要调整以下内核参数sysctl -w net.ipv4.tcp_keepalive_time600 sysctl -w net.ipv4.tcp_fin_timeout30 sysctl -w net.core.somaxconn32768对应容器安全上下文配置securityContext: capabilities: add: [NET_ADMIN] privileged: false这些调优可显著减少TIME_WAIT状态连接数提升优雅退出成功率。