ydswin

忘记背后,努力面前的,向着标杆直跑

导航

k8s 1.24.8使用kubectl patch关闭deployment的所有探针且不重启现有 Pod

要在 Kubernetes 1.24.8 中使用 kubectl patch 关闭 Deployment 的所有探针(Liveness、Readiness、Startup)且不重启现有 Pod,需通过 JSON Patch 移除探针配置,并避免触发滚动更新。以下是完整操作指南:

📝 操作步骤
确认目标 Deployment 名称和命名空间

  kubectl get deployments -n <namespace>  # 替换为实际命名空间

执行 JSON Patch 移除探针配置

  kubectl patch deployment <deployment-name> -n <namespace> \
 --type='json' \
 -p='[
      {"op": "remove", "path": "/spec/template/spec/containers/0/livenessProbe"},
      {"op": "remove", "path": "/spec/template/spec/containers/0/readinessProbe"},
      {"op": "remove", "path": "/spec/template/spec/containers/0/startupProbe"}
    ]'

关键参数说明:

--type='json':指定使用 JSON Patch 格式。

op: remove:删除探针字段(需确保路径正确)。

路径说明:

   /spec/template/spec/containers/0/<探针类型> 表示第一个容器。若多容器需按索引修改(如 /containers/1/)。

验证修改结果

  kubectl get deployment <deployment-name> -n <namespace> -o yaml | grep Probe -A5

输出中应无 livenessProbe、readinessProbe、startupProbe 字段。

⚙️ 技术原理与避坑指南
不重启 Pod 的实现机制

Kubernetes 更新 Deployment 时,默认会触发滚动更新(创建新 Pod 替换旧 Pod)。

本操作未修改容器镜像或环境变量,仅移除了探针配置,因此不会触发滚动更新,现有 Pod 继续运行。

新创建的 Pod 将无探针(如手动扩容或节点故障重建)。
JSON Patch 路径注意事项

容器索引:路径中 containers/0 表示第一个容器。若多容器需依次修改(如 /containers/1/livenessProbe)。

路径校验:若路径错误会报错 the server doesn't have a resource type,需检查 YAML 结构。
探针关闭的影响

存活探针(Liveness):关闭后容器崩溃不会自动重启,需依赖进程退出码触发重启策略。

就绪探针(Readiness):关闭后 Service 会持续转发流量到 Pod,即使应用未准备好。

启动探针(Startup):关闭后不再等待慢启动容器,可能过早检测存活/就绪状态。

⚠️ 重要注意事项
生产环境风险

关闭探针后需通过日志监控(kubectl logs)和资源监控(如 Prometheus)确保应用健康。

优雅停机可能受影响:若应用收到 SIGTERM 后仍返回探针失败,可能导致强制重启(需调整应用逻辑)。
多容器配置修正

若 Deployment 有多个容器,需为每个容器单独移除探针:
# 示例:移除第二个容器的探针
kubectl patch deployment --type json -p='[
{"op": "remove", "path": "/spec/template/spec/containers/1/livenessProbe"}
]'

替代方案

缩减副本再恢复:若需彻底移除旧 Pod,可先缩容至 0 再扩容,但会中断服务。

临时调整探针阈值:通过增大 failureThreshold 或 periodSeconds 降低探针灵敏度(不完全关闭)。

💎 总结

通过 JSON Patch 移除 Deployment 的探针字段是关闭探针的最轻量级方案,不会重启现有 Pod,适用于临时调试或性能优化场景。但生产环境需谨慎评估可用性影响,建议结合日志监控和优雅停机逻辑调整。

posted on 2025-06-18 12:58  dashery  阅读(96)  评论(0)    收藏  举报