k8s 滚动更新及回滚

发布于 2022-06-13  20 次阅读


创建一个deployment

---
apiVersion: v1
kind: Namespace
metadata:
  name: nginx-dep
  labels:
    name: nginx-dep
---
apiVersion: apps/v1
kind: Deployment
metadata:
  namespace: nginx-dep
  name: myapp
spec:
  replicas: 4
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.16.1
        ports:
        - containerPort: 80

查看

[root@k8s-master ~]# kubectl get pod -n test
NAME                     READY   STATUS    RESTARTS   AGE
myapp-558547cf67-76xfz   1/1     Running   0          78s
myapp-558547cf67-9fgs4   1/1     Running   0          94s
myapp-558547cf67-k4tvw   1/1     Running   0          96s
myapp-558547cf67-x8rqk   1/1     Running   0          96s

滚动更新

kubectl set image deployment/myapp myapp=nginx:1.16.1 --record

deployment/myapp deploy资源对象中的myapp
第二个myapp是pod名称
# 滚动完后可以查看滚动更新的处理过程,我们会发现是关闭一个旧的容器后启动一个新的容器,直到全部完成。

[root@k8s-master ~]# kubectl rollout status deployment/myapp -n nginx-dep
deployment "myapp" successfully rolled out

查看更新历史并回滚

[root@k8s-master ~]# kubectl rollout history deployment/myapp -n nginx-dep
deployment.apps/myapp 
REVISION  CHANGE-CAUSE
1         none
2         kubectl set image deployment/myapp nginx=nginx --record=true --namespace=nginx-dep

# 回滚到上次
kubectl rollout undo deployment/nginx-dep -n nginx-dep

#回滚(回到指定版本)
kubectl rollout undo deployment/myapp --to-revision=1 -n nginx-dep
deployment.apps/myapp rolled back

查看

kubectl describe pod myapp-559d658b74-8nxcp -n nginx-dep

Events:
  Type    Reason     Age   From               Message
  ----    ------     ----  ----               -------
  Normal  Scheduled  68s   default-scheduler  Successfully assigned nginx-dep/myapp-559d658b74-8nxcp to k8s-node2
  Normal  Pulled     69s   kubelet            Container image "nginx:1.16.1" already present on machine
  Normal  Created    69s   kubelet            Created container nginx
  Normal  Started    69s   kubelet            Started container nginx

# 镜像已经回滚到了原有的nginx