Kubernetes 1.14中如何重启Deployment下所有Pod?
Kubernetes 1.14 重启 Deployment 所有 Pod 的解决方案
由于 kubectl rollout restart 在 1.15 版本才正式引入,针对 1.14 版本可以用以下几种可靠方法触发 Pod 重建:
方法一:更新 Pod 模板注解触发滚动更新
这是最平滑的方式,会严格遵循 Deployment 的滚动更新策略,避免服务中断(前提是 Deployment 配置了合理的滚动参数)。
执行命令(替换占位符):
kubectl patch deployment <你的Deployment名称> -p '{"spec":{"template":{"metadata":{"annotations":{"kubectl.kubernetes.io/restartedAt":"'$(date +%Y-%m-%dT%H:%M:%S%z)'"} }}}}'
原理:Kubernetes 会监控 spec.template 的哈希值变化,更新注解会改变模板哈希,从而触发滚动更新,逐个重建 Pod。
方法二:修改 Pod 模板的镜像配置
通过给镜像标签添加临时后缀(即使使用原镜像),触发 Deployment 更新:
执行命令(替换容器名、镜像信息):
kubectl set image deployment/<你的Deployment名称> <容器名称>=<镜像名>:<原标签>-$(date +%s) --record
也可以用 patch 命令直接修改镜像字段:
kubectl patch deployment <你的Deployment名称> -p '{"spec":{"template":{"spec":{"containers":[{"name":"<容器名称>","image":"<镜像名>:<原标签>'$(date +%s)'"}]}}}}'
原理:镜像标签的修改会改变 spec.template 内容,触发滚动更新。后续若需恢复原标签,重新执行一次设置原镜像的命令即可。
方法三:直接删除 Pod 让 Deployment 重建
适合对服务中断容忍度较高的场景,删除后 Deployment 会自动创建新 Pod:
执行命令(替换 Deployment 的标签选择器,比如 app=my-app):
kubectl delete pods -l app=my-app
注意:此方法会一次性删除所有匹配 Pod,若副本数不足或无就绪探针,可能导致短暂服务不可用。
内容的提问来源于stack exchange,提问作者Aim Better
相关产品推荐
相关产品推荐

