Deployment 的回滚

本文讲述了如何在遇到Deployment部署错误,如将镜像设置错误时,通过kubectl命令操作回滚到稳定版本,包括查看部署历史、指定回滚版本和解决卡住的Pod问题。

有时我们需要将Deployment 回滚到旧版本。默认情况下,所有Deployment的发布历史记录都保留在系统中,以便我们随时进行回滚

例如我们在升级过程中将镜像名称误设置成Nginx:1.91(一个不存在的镜像)

$ kubectl set image deployment/nginx-deployment nginx=nginx:1.91

这时Deployment的部署过程会卡住:

$ kubectl rollout status deployment nginx-deployment

waiting for rollout to finish :1 out of 3 new replicas hava been updated...

查看ReplicaSet ,可以看到新建的ReplicaSet Ready  数量为0

查看创建的pod,会发现新的ReplicaSet 创建的1个Pod卡在镜像拉取过程中。

为了解决这个问题,我们需要回滚到之前稳定版本的Deployment。

首先,使用kubectl rollout history 命令检查这个Deployment部署的历史记录。

$ kubectl rollout history  deployment/nginx-deployment

显示对应的REVISION  和 CHANGE-CAUSE

如果需要查看对应的版本的详细信息,则可以加上--revision=<N>参数:

$ kubectl rollout history deployment/nginx-deployment --revision=3

我们决定撤销本次发布并回滚到上一个部署版本:

$ kubectl rollout undo deployment/nginx-deployment

也可以使用--to-revision指定回滚到部署的版本号:

$ kubectl rollout undo deployment/nginx-deployment --to-revision=2

这样deployment 就会滚到之前的稳定版本。

### 关于 Kubernetes回滚微服务的操作指南 在 Kubernetes 中,回滚微服务是一种常见的运维需求。当新版本的应用程序出现问题,可以通过回滚机制快速恢复到之前的稳定状态。以下是有关如何实现这一目标的具体方法: #### 使用 `kubectl rollout undo` 命令 Kubernetes 提供了一个内置命令来执行 Deployment回滚操作。此命令可以将指定的 Deployment 回滚到之前的一个修订版(Revision)。每次更新 Deployment Kubernetes 都会记录下当前的状态作为新的修订版[^1]。 要查看某个 Deployment 的历史修订版列表,可以运行以下命令: ```bash kubectl rollout history deployment/<deployment-name> ``` 如果确认需要回滚至某一特定版本,则可通过如下方式完成: ```bash kubectl rollout undo deployment/<deployment-name> --to-revision=<revision-number> ``` 其中 `<revision-number>` 表示希望返回的目标修订号[^4]。 #### 自动化与策略设置 为了更好地管理应用升级过程中的风险,在实际生产环境中通常还会结合一些额外措施一起实施,比如蓝绿部署或者金丝雀发布等渐进式替换技术。此外还可以定义健康检查探针以及失败重试逻辑等内容进一步增强系统的稳定性[^3]。 另外值得注意的是,在规划整个 CI/CD 流程的候也要考虑到镜像构建环节可能存在的隐患因素,例如确保使用的 Dockerfile 文件里包含了合适的参数选项以维持最终产物的小巧高效;同给各个阶段产生的制品赋予恰当标记以便后续追踪定位问题所在之处等等[^2]。 最后提醒一点就是关于持久化数据处理方面的问题——假如涉及到数据库模式变更之类的情况的话,则单纯依靠上述简单指令恐怕难以满足复杂场景下的业务连续性保障要求了[^5]。 ```yaml apiVersion: apps/v1 kind: Deployment metadata: name: example-deployment spec: replicas: 3 selector: matchLabels: app: example-app template: metadata: labels: app: example-app spec: containers: - name: example-container image: nginx:stable ports: - containerPort: 80 ``` 以上 YAML 片段展示了一个基本的 Nginx 应用程序部署配置文件实例。请注意这里的 `image` 字段指定了所要用到的服务镜像及其具体标签形式,这一步骤对于成功达成预期效果至关重要不可忽视遗漏哦!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值