deployment control pod rolling update and rollback

Mirror update pod in two ways:

方式一:kubectl set image deployment/${deployment name} ${container name}=${image}  例: kubectl set image deployment/nginx-deployment nginx=nginx:1.13 --record
方式二: kubectl edit 修改deployment配置, 将spec.template.spec,containers[0].image 从nginx:1.12 修改成nginx:1.13

View deployment update process:

kubectl rollout status deployment/nginx-deployment   
可以通过deployment状态来判断pod更新是否完成, kubectl rollout status deployment nginx-deployment --watch=false | grep -ic waiting1  如果更新成功, 返回值为0 

update deployment strategy: Recreate (reconstruction) to kill all of the pod, and then create a new pod and RollingUpdate (rollover) to control scroll through the update process parameters maxUnavailable and maxSurge
rollover strategy:

deployment.spec.strategy.rollingUpdate.maxUnavailable:不可用状态的pod数量,该值可以是绝对值, 也可以是pod期望的副本数的百分比
deployment.spec.strategy.rollingUpdate.maxSurge: 超过pod期望副本数的最大值
当maxSurge设置为30% 和 maxUnavailable设置为30%  :  生成一个新的ReplicaSet立即进行副本数扩容, 扩容的数量为不超过期望副本数的130%即可, 旧的ReplicaSet立即缩容到所需副本数的70%

pod rollback: recommended deployment when rolling updates plus --record parameters, so look for each version of a command in the change-cause

kubectl rollout history deployment/nginx-deployment 检查deployment升级的历史记录
kubectl rollout history deployment/nginx-deployment --revision=2 查看单个revision 的详细信息
kubectl rollout undo deployment/nginx-deployment 回退到上一个版本 
kubectl rollout undo deployment/nginx-deployment --to-revision=2 根据--revision参数指定某个历史版本

How much revision history spec.revisonHistoryLimit entry to specify deployment retain up

Note: The new revision will be created when the pod deployment template is changed, such as updating the label or container template image can trigger rollover, other operations such as copy number expansion will not trigger the deployment of the update operation

Pause and resume deployment: For a complex deployment update, in order to avoid frequent trigger the update deployment, you can pause the update deployment, and then make configuration changes during the recovery deployment, a one-time triggering a complete update

kubectl rollout pause deployment/nginx-deployment #暂停deployment , 不影响pod正常运行, 可以修改的deployment资源, 不会触发滚动更新 
kubectl set image deploy/nginx nginx=nginx:1.9.1 
kubectl set resources deployment nginx -c=nginx --limits=cpu=200m,memory=512Mi 
kubectl rollout resume deployment/nginx-deployment #恢复deployment, 如果有变动, 马上进行滚动更新
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  namespace: default 
  labels:
    app: nginx
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 10
  strategy:
    rollingUpdate:
      maxSurge: 30%
      maxUnavailable: 30%      
  template:
    metadata:
      labels:
        app: nginx

    spec:
      initContainers: 
      - name: install
        image: busybox
        imagePullPolicy: IfNotPresent
        command:
        - wget
        - "-O"
        - "/work-dir/index.html"
        - http://kubernetes.io
        volumeMounts:
        - name: workdir
          mountPath: "/work-dir"
      containers:
      - name: nginx
        image: nginx:1.12
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80
        volumeMounts:
        - name: workdir
          mountPath: "/usr/share/nginx/html"
      volumes:
      - name: workdir
        emptyDir: {} 

---
apiVersion: v1 
kind: Service
metadata:
  name: nginx-service
  namespace: default 
  labels:
    app: nginx
spec:
  type: NodePort
  selector: 
    app: nginx
  ports:
  - name: http
    port: 80 
    protocol: TCP 
    targetPort: 80 

Guess you like

Origin www.cnblogs.com/lovelinux199075/p/11246139.html