K8S deployment 重启的三种方法

本文介绍了在Kubernetes中,当需要重启deployment时,除了删除Pod外的三种高效方法:通过环境变量重置重启时间、更新镜像和使用rollout重启。同时提到了查看和回滚部署历史版本的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一般重启deployment,常规操作是删掉对应的pod, 但如果有多个副本集的话,一个个删很麻烦。
除了删除pod,还可以:

方案一: 加上环境变量
kubectl patch deploy <deployment-name> 
  -p '{"spec":{"template":{"spec":{"containers":[{"name":"<container-name>","env":[{"name":"RESTART_TIME","value":"'$(date +%s)'"}]}]}}}}'
方案二: 重新设置镜像
kubectl set image deploy/<deployment-name> <container>=<image> -n <namespace>
方案三: 使用rollout
kubectl rollout restart deploy <deployment-name> -n <namespace>
PS: rollout restart需要集群版本大于1.15才能支持
以上重启方法均会生成Replicasets(副本集), 可通进行回滚:

# 查看历史版本
kubectl rollout histoty deployment/<deployment-name -n <namespace>
# 进行回滚,默认回退到上个版本
kubectl rollout undo deployment/<deployment-name> -n <namespace> [--to-revision=<version>]
文章知识点与官方知识档案匹配,可进一步学习相关知识
云原生入门技能树容器编排(生产
# 查看历史版本
kubectl rollout histoty deployment/<deployment-name -n <namespace>

# 进行回滚,默认回退到上个版本
kubectl rollout undo deployment/<deployment-name> -n <namespace> [--to-revision=<version>]

### Kubernetes重启 Deployment方法Kubernetes 中,Deployment 是一种用于管理应用副本的控制器。如果需要重启 Deployment 中的所有 Pod,可以通过以下几种方法实现: #### 方法一:更新镜像标签 通过修改 Deployment 的镜像标签来触发 Pod 的重新创建。这种方法是最常见的做法,因为它符合 Kubernetes 的声明式管理理念。 ```bash kubectl set image deployment/<deployment-name> <container-name>=<image-name>:<new-tag> ``` 例如: ```bash kubectl set image deployment/my-deployment my-container=my-image:latest ``` 此命令会触发 Deployment 更新机制,从而重新创建所有 Pod[^1]。 #### 方法二:使用 `kubectl rollout restart` Kubernetes 提供了一个专门用于重启 Deployment 的命令: ```bash kubectl rollout restart deployment/<deployment-name> ``` 该命令会触发 Deployment 的重新部署,通过更新一个无意义的注解字段(如 `spec.template.metadata.annotations`)来实现 Pod 的重新调度[^2]。 #### 方法三:删除并重建 Deployment 虽然不推荐,但可以通过删除现有 Deployment 并重新创建来实现 Pod 的重启。注意,这种方法会导致服务中断,因此仅适用于允许短暂不可用的场景。 ```bash kubectl delete deployment/<deployment-name> kubectl apply -f <deployment-manifest-file>.yaml ``` #### 方法四:手动删除 Pod 由于 Deployment 会自动确保指定数量的 Pod 正常运行,因此可以通过删除现有的 Pod 来触发新的 Pod 创建。 ```bash kubectl delete pod -l app=<label-selector> ``` 例如: ```bash kubectl delete pod -l app=my-app ``` 此方法适用于不需要更改 Deployment 配置的情况[^3]。 ### 示例代码 以下是一个完整的示例,展示如何通过 `kubectl rollout restart` 重启 Deployment: ```bash # 假设 Deployment 名称为 my-deployment kubectl rollout restart deployment/my-deployment ``` ### 注意事项 - 如果 Deployment 使用了 `readinessProbe` 和 `livenessProbe`,确保这些探针配置正确,以避免 Pod 被错误驱逐或无法正常启动。 - 在生产环境中,建议使用滚动更新策略(Rolling Update),以确保服务的高可用性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值