118 lines
3.8 KiB
Markdown
118 lines
3.8 KiB
Markdown
### 1)先看这个 Deployment 对应的 ReplicaSet 列表
|
||
|
||
```bash
|
||
kubectl -n cq-fly-260311 get rs -o wide | grep cmii-sky-converge
|
||
```
|
||
|
||
更稳一点的方式,用 label 过滤:
|
||
|
||
```bash
|
||
kubectl -n cq-fly-260311 get rs -l cmii.app=cmii-sky-converge
|
||
```
|
||
|
||
如果你不确定 label,不妨先看 Deployment 的 selector:
|
||
|
||
```bash
|
||
kubectl -n cq-fly-260311 get deploy cmii-sky-converge -o jsonpath='{.spec.selector.matchLabels}'
|
||
echo
|
||
```
|
||
|
||
### 2)从 ReplicaSet 里看 revision 和镜像
|
||
|
||
Deployment 的 revision 一般记录在 ReplicaSet 注解 `deployment.kubernetes.io/revision` 里。可以这样查:
|
||
|
||
```bash
|
||
kubectl -n cq-fly-260311 get rs \
|
||
-o custom-columns=NAME:.metadata.name,REVISION:.metadata.annotations.deployment\.kubernetes\.io/revision,REPLICAS:.spec.replicas,IMAGE:.spec.template.spec.containers[*].image \
|
||
| grep cmii-sky-converge
|
||
```
|
||
|
||
你会看到类似:
|
||
|
||
```bash
|
||
cmii-sky-converge-6f7c8d9b4d 12 0 repo/app:v1.2.2
|
||
cmii-sky-converge-7a8b9c0d1e 13 2 repo/app:v1.2.3
|
||
```
|
||
|
||
这里通常:
|
||
|
||
* **最大的 revision** 是当前版本
|
||
* **倒数第二大的 revision** 就是上一个版本
|
||
这些历史配置是保存在 ReplicaSet 中的。([Kubernetes][1])
|
||
|
||
### 3)如果只是回滚到“上一个版本”
|
||
|
||
直接执行:
|
||
|
||
```bash
|
||
kubectl -n cq-fly-260311 rollout undo deployment/cmii-sky-converge
|
||
```
|
||
|
||
这是官方支持的标准写法,会把 Deployment 回滚到上一次部署状态。([Kubernetes][2])
|
||
|
||
### 4)如果你已经从 ReplicaSet 确认了上一个 revision,按 revision 回滚
|
||
|
||
例如上一个版本是 `revision=12`:
|
||
|
||
```bash
|
||
kubectl -n cq-fly-260311 rollout undo deployment/cmii-sky-converge --to-revision=12
|
||
```
|
||
|
||
`--to-revision` 就是官方提供的指定修订版本回滚参数。([Kubernetes][2])
|
||
|
||
### 5)回滚前先预览一下
|
||
|
||
如果你想先试运行:
|
||
|
||
```bash
|
||
kubectl -n cq-fly-260311 rollout undo deployment/cmii-sky-converge --dry-run=server
|
||
```
|
||
|
||
### 6)回滚后确认状态
|
||
|
||
```bash
|
||
kubectl -n cq-fly-260311 rollout status deployment/cmii-sky-converge
|
||
kubectl -n cq-fly-260311 get deploy cmii-sky-converge -o wide
|
||
kubectl -n cq-fly-260311 get rs \
|
||
-o custom-columns=NAME:.metadata.name,REVISION:.metadata.annotations.deployment\.kubernetes\.io/revision,REPLICAS:.spec.replicas,IMAGE:.spec.template.spec.containers[*].image \
|
||
| grep cmii-sky-converge
|
||
```
|
||
|
||
---
|
||
|
||
### 一套可直接执行的命令
|
||
|
||
如果你就是想“先看上一个版本,再回滚”:
|
||
|
||
```bash
|
||
# 1. 查看当前 deployment 的历史对应的 ReplicaSet 和镜像
|
||
kubectl -n cq-fly-260311 get rs \
|
||
-o custom-columns=NAME:.metadata.name,REVISION:.metadata.annotations.deployment\.kubernetes\.io/revision,REPLICAS:.spec.replicas,IMAGE:.spec.template.spec.containers[*].image \
|
||
| grep cmii-sky-converge | sort -k2 -n
|
||
|
||
# 2. 回滚到上一个版本
|
||
kubectl -n cq-fly-260311 rollout undo deployment/cmii-sky-converge
|
||
|
||
# 3. 查看回滚结果
|
||
kubectl -n cq-fly-260311 rollout status deployment/cmii-sky-converge
|
||
```
|
||
|
||
---
|
||
|
||
### 如果你想精确拿到“上一个 ReplicaSet 的镜像”
|
||
|
||
可以用这个:
|
||
|
||
```bash
|
||
kubectl -n cq-fly-260311 get rs \
|
||
-o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.metadata.annotations.deployment\.kubernetes\.io/revision}{"\t"}{.spec.template.spec.containers[*].image}{"\n"}{end}' \
|
||
| grep cmii-sky-converge | sort -k2 -n
|
||
```
|
||
|
||
然后选倒数第二行,就是上一个版本的 revision 和镜像。
|
||
|
||
你要的话,我可以再给你一版 **一行 shell 命令**,自动找出 `cmii-sky-converge` 的上一个 revision 并直接执行回滚。
|
||
|
||
[1]: https://kubernetes.io/docs/concepts/workloads/controllers/deployment/?utm_source=chatgpt.com "Deployments - Kubernetes"
|
||
[2]: https://kubernetes.io/zh-cn/docs/reference/kubectl/generated/kubectl_rollout/kubectl_rollout_undo/?utm_source=chatgpt.com "kubectl rollout undo | Kubernetes"
|