背景
工作中,经常会遇到发到线上的版本有问题,需要请求 SRE 帮忙回滚版本的需求。由于服务集群是部署在 GCP 的 K8s 的集群中,那么 SRE 是通过什么命令让服务快速回滚的呢?
解决方法
# 回退到上一个版本
kubectl rollout undo deployment/abc
# 回退到指定版本
kubectl rollout undo deployment/abc --to-revision=2
版本号,可以通过下面命令获取:
# 查看回滚历史
kubectl rollout history deployment/nginx-deployment
如图所示,第一列为版本序号,第二列为 CHANGE-CAUSE
。可以通过一下三种方式,指定 CHANGE-CAUSE
:
- 使用命令
kubectl annotate deployment.v1.apps/nginx-deployment kubernetes.io/change-cause="image updated to 1.9.1"
,对 Deployment 进行注解; - 追加
--record
以保存正在更改资源的 kubectl 命令;例如,kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:1.161 --record=true
- 手动编辑资源的清单;