zoukankan      html  css  js  c++  java
  • kubernetes: pod升级与回滚扩容与缩容暂停恢复

    运行一个容器:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      annotations:
        deployment.kubernetes.io/revision: "1"
      generation: 1
      labels:
        app: nginx
      name: nginx
      namespace: default
    spec:
      progressDeadlineSeconds: 600
      replicas: 1              # 副本数
      revisionHistoryLimit: 10 # 历史记录保留的个数
      selector:	
        matchLabels:
          app: nginx
      strategy:
        rollingUpdate:
          maxSurge: 25%
          maxUnavailable: 25%
        type: RollingUpdate
      template:
        metadata:
          creationTimestamp: null
          labels:
            app: nginx
        spec:
          containers:
          - image: nginx:1.15.4
            imagePullPolicy: IfNotPresent
            name: nginx
            resources: {}
            terminationMessagePath: /dev/termination-log
            terminationMessagePolicy: File
          dnsPolicy: ClusterFirst
          restartPolicy: Always
          schedulerName: default-scheduler
          securityContext: {}
          terminationGracePeriodSeconds: 30
    
    # 保存为deployment.yaml 并创建nginx pod:
    [root@k8s-master01 yaml]# kubectl create -f  deployment-nginx.yaml
    deployment.apps/nginx created
    
    
    #检查:
    [root@k8s-master01 yaml]# kubectl get pod
    NAME                     READY   STATUS    RESTARTS   AGE
    nginx-6cdd5dd489-d7kll   1/1     Running   0          17s
    nginx-6cdd5dd489-dblw2   1/1     Running   0          17s
    nginx-6cdd5dd489-zc8fl   1/1     Running   0          17s
    
    
    #检查nginx版本:
    [root@k8s-master01 yaml]# kubectl exec -it nginx-6cdd5dd489-d7kll -- sh
    # nginx -v
    nginx version: nginx/1.15.4
    
    
    
    #删除pod
    kubectl delete -n default deployment nginx
    
    #检查
    [root@k8s-master01 pod]# kubectl get pod
    No resources found in default namespace.
    

    镜像升级与回滚

    #升级:
    root@k8s-master01[11:10:24]:~/yaml$ kubectl set image deploy nginx nginx=nginx:1.15.5 --record=true
    deployment.apps/nginx image updated
    
    #检查升级过程:
    kubectl describe  pod nginx-7c4b6d99fd-csh5s
    
    Events:
      Type    Reason     Age   From               Message
      ----    ------     ----  ----               -------
      Normal  Scheduled  76s   default-scheduler  Successfully assigned default/nginx-df9789dc8-6h7p7 to k8s-node02
      Normal  Pulling    76s   kubelet            Pulling image "nginx:1.15.5"
      Normal  Pulled     51s   kubelet            Successfully pulled image "nginx:1.15.5" in 24.828362289s
      Normal  Created    51s   kubelet            Created container nginx
      Normal  Started    51s   kubelet            Started container nginx
    
    
    
    #检查现在的版本:
    [root@k8s-master01 yaml]# kubectl exec -it nginx-df9789dc8-trtwq -- sh 
    
    
    # nginx -v
    nginx version: nginx/1.15.5
    
    
    #检查更新过程
    kubectl rollout status deploy nginx
    
    [root@k8s-master01 yaml]# kubectl rollout status deploy nginx
    Waiting for deployment "nginx" rollout to finish: 1 out of 2 new replicas have been updated...
    Waiting for deployment "nginx" rollout to finish: 1 out of 2 new replicas have been updated...
    Waiting for deployment "nginx" rollout to finish: 1 out of 2 new replicas have been updated...
    Waiting for deployment "nginx" rollout to finish: 1 old replicas are pending termination...
    Waiting for deployment "nginx" rollout to finish: 1 old replicas are pending termination...
    deployment "nginx" successfully rolled out
    
    [root@k8s-master01 yaml]# kubectl exec -it nginx-6cdd5dd489-bsb7f -- sh
    # nginx -v
    nginx version: nginx/1.15.5
    
    #为了实验效果 在升级一次
    [root@k8s-master01 yaml]# kubectl set image deploy nginx nginx=nginx:1.15.6 --record=true
    
    [root@k8s-master01 yaml]# kubectl get pod
    NAME                     READY   STATUS    RESTARTS   AGE
    nginx-5455fbc855-64brv   1/1     Running   0          2m48s
    nginx-5455fbc855-nblks   1/1     Running   0          3m16s
    nginx-5455fbc855-ns4kz   1/1     Running   0          2m47s
    [root@k8s-master01 yaml]# kubectl exec -it nginx-5455fbc855-64brv -- sh
    # nginx -v
    nginx version: nginx/1.15.6
    
    
    #回滚:
    1. 查看历史更新
    kubectl rollout history deploy nginx
    
    [root@k8s-master01 yaml]# kubectl rollout history deploy nginx
    deployment.apps/nginx 
    REVISION  CHANGE-CAUSE
    1         <none>
    2         kubectl set image deploy nginx nginx=nginx:1.15.5 --record=true
    3         kubectl set image deploy nginx nginx=nginx:1.15.6 --record=true
    
    2. 回滚到上一个版本[kubectl rollout undo deploy {name} ]
    [root@k8s-master01 yaml]# kubectl rollout undo deploy nginx
    deployment.apps/nginx rolled back
    
    3. 检查回滚状态:
    [root@k8s-master01 yaml]# kubectl get pod
    NAME                     READY   STATUS    RESTARTS   AGE
    nginx-6cdd5dd489-bzdgd   1/1     Running   0          21s
    nginx-6cdd5dd489-cwxv5   1/1     Running   0          22s
    nginx-6cdd5dd489-xb6xj   1/1     Running   0          20s
    
    3.1 进入容器检查:
    [root@k8s-master01 yaml]# kubectl exec -it nginx-6cdd5dd489-bzdgd -- sh
    # nginx -v
    nginx version: nginx/1.15.4
    
    
    4. 回滚到指定版本
    [root@k8s-master01 yaml]# kubectl rollout history deploy nginx
    deployment.apps/nginx 
    REVISION  CHANGE-CAUSE
    1       kubectl set image deploy nginx nginx=nginx:1.15.5 --record=true
    2       kubectl set image deploy nginx nginx=nginx:1.15.6 --record=true
    
    
    # 查看指定版本信息
    kubectl rollout history deploy nginx --revision=1
    
    
    #回滚到指定版本
     kubectl rollout undo deploy nginx --to-revision=1
    
    
     [root@k8s-master01 yaml]# kubectl exec -it nginx-6cdd5dd489-q44cr -- sh
     # nginx -v 
     nginx version: nginx/1.15.5
    

    使用pod扩容,缩容

    [root@k8s-master01 yaml]# kubectl get pod
    NAME                    READY   STATUS    RESTARTS   AGE
    nginx-df9789dc8-gqk5j   1/1     Running   0          11m
    nginx-df9789dc8-vhqkd   1/1     Running   0          11m
    
    
    #修改资源:
    [root@k8s-master01 yaml]# kubectl edit deploy nginx
    deployment.apps/nginx edited
    
    找到: replicas: 2 
    改为: replicas: 3
    
    #检查状态:
    [root@k8s-master01 yaml]# kubectl get pod
    NAME                    READY   STATUS    RESTARTS   AGE
    nginx-df9789dc8-c47mc   1/1     Running   0          3s
    nginx-df9789dc8-gqk5j   1/1     Running   0          11m
    nginx-df9789dc8-vhqkd   1/1     Running   0          11m
    
    
    #缩容就是继续把 replicas: 3 改为: replicas: 2即可:
    [root@k8s-master01 yaml]# kubectl get pod
    NAME                    READY   STATUS    RESTARTS   AGE
    nginx-df9789dc8-gqk5j   1/1     Running   0          13m
    nginx-df9789dc8-vhqkd   1/1     Running   0          13m
    
    
    
    #通过命令行进行扩容缩容
    #缩容:
    [root@k8s-master01 yaml]# kubectl scale --replicas=2 deploy nginx
    deployment.apps/nginx scaled
    
    #扩容:
    [root@k8s-master01 yaml]# kubectl scale --replicas=10 deploy nginx
    deployment.apps/nginx scaled
    [root@k8s-master01 yaml]# kubectl get pod
    NAME                     READY   STATUS    RESTARTS   AGE
    nginx-565979ccb4-5j896   1/1     Running   0          2s
    nginx-565979ccb4-6hkjw   1/1     Running   0          2s
    nginx-565979ccb4-6wkkx   1/1     Running   0          2s
    nginx-565979ccb4-7nnlh   1/1     Running   0          8m54s
    nginx-565979ccb4-cs2km   1/1     Running   0          2s
    nginx-565979ccb4-dztkx   1/1     Running   0          2s
    nginx-565979ccb4-jbmx7   1/1     Running   0          2s
    nginx-565979ccb4-jqpzq   1/1     Running   0          2s
    nginx-565979ccb4-vfnrd   1/1     Running   0          9m22s
    nginx-565979ccb4-zsgwv   1/1     Running   0          2s
    
    
    #注意,每个节点默认最大扩容数量为110个
    # 如果需要修改则需要配置
    

    使用yaml文件进行升级

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      annotations:
        deployment.kubernetes.io/revision: "1"
      creationTimestamp: "2020-09-19T02:41:11Z"
      generation: 1
      labels:
        app: nginx
      name: nginx
      namespace: default
    spec:
      progressDeadlineSeconds: 600
      replicas: 3              # 副本数
      revisionHistoryLimit: 10 # 历史记录保留的个数
      selector:
        matchLabels:
          app: nginx
      strategy:
        rollingUpdate:
          maxSurge: 25%
          maxUnavailable: 25%
        type: RollingUpdate
      template:
        metadata:
          creationTimestamp: null
          labels:
            app: nginx
        spec:
          containers:
          - image: nginx:1.15.4
            imagePullPolicy: IfNotPresent
            name: nginx
            resources: {}
            terminationMessagePath: /dev/termination-log
            terminationMessagePolicy: File
          dnsPolicy: ClusterFirst
          restartPolicy: Always
          schedulerName: default-scheduler
          securityContext: {}
          terminationGracePeriodSeconds: 30
    
    #修改:
        spec:
          containers:
          - image: nginx:1.15.5    #改为想要的镜像版本
          
    #改为 1.15.5
    [root@k8s-master01 yaml]# kubectl apply -f nginx-1.yaml
    deployment.apps/nginx configured
    [root@k8s-master01 yaml]# kubectl get pod
    
    
    
    #注意升级的时候 他会起新的rs(replicas),通过命令可以看到,他会新起来一个pod 并把老副本数设置为2,新副本起来2个的时候
    #老副本数会设置为1,直到变成0 最后才会真正的完成滚动更新。
    [root@k8s-master01 yaml]# kubectl get rs
    NAME               DESIRED   CURRENT   READY   AGE
    nginx-5455fbc855   3         3         3       4m46s
    nginx-565979ccb4   1         1         0       5s
    
    
    
    
    [root@k8s-master01 yaml]# kubectl get pod
    NAME                     READY   STATUS    RESTARTS   AGE
    nginx-5455fbc855-j552c   1/1     Running   0          17s
    nginx-5455fbc855-sl8m8   1/1     Running   0          15s
    nginx-5455fbc855-sq4mr   1/1     Running   0          14s
    [root@k8s-master01 yaml]# kubectl exec -it nginx-5455fbc855-j552c  -- sh
    # nginx -v
    nginx version: nginx/1.15.5
    
    
    
    #查看滚动更新过程:
    NewReplicaSet:   nginx-565979ccb4 (3/3 replicas created)
    Events:
      Type    Reason             Age                     From                   Message
      ----    ------             ----                    ----                   -------
      Normal  ScalingReplicaSet  10m                     deployment-controller  Scaled up replica set nginx-6cdd5dd489 to 3
      Normal  ScalingReplicaSet  9m53s                   deployment-controller  Scaled up replica set nginx-df9789dc8 to 1
      Normal  ScalingReplicaSet  9m51s                   deployment-controller  Scaled down replica set nginx-6cdd5dd489 to 2
      Normal  ScalingReplicaSet  9m51s                   deployment-controller  Scaled up replica set nginx-df9789dc8 to 2
      Normal  ScalingReplicaSet  9m50s                   deployment-controller  Scaled down replica set nginx-6cdd5dd489 to 1
      Normal  ScalingReplicaSet  9m50s                   deployment-controller  Scaled up replica set nginx-df9789dc8 to 3
      Normal  ScalingReplicaSet  9m48s                   deployment-controller  Scaled down replica set nginx-6cdd5dd489 to 0
      Normal  ScalingReplicaSet  7m47s                   deployment-controller  Scaled up replica set nginx-5455fbc855 to 1
      Normal  ScalingReplicaSet  7m45s                   deployment-controller  Scaled down replica set nginx-df9789dc8 to 2
      Normal  ScalingReplicaSet  2m18s (x10 over 7m45s)  deployment-controller  (combined from similar events): Scaled down replica set nginx-5455fbc855 to 0
    

    Deployment 暂停[优化触发更新]

    暂停功能使用在多次更新场景下的多次更新有多个记录的问题,如果每条更新都被记录,在查找有用更新的时候会比较麻烦,通过暂停更新功能,可以退回到指定版本,并且rs回滚只会产生一条记录。

    [root@k8s-master01 ~]# # 开启 Deployment 暂停功能
    [root@k8s-master01 ~]# kubectl rollout pause deployment nginx 
    deployment.apps/nginx paused
                           # 执行一次更新
    [root@k8s-master01 ~]# kubectl set image deploy nginx nginx=nginx:1.15.3 --record
    deployment.apps/nginx image updated
    
    
    #此时按照常理来说 执行完了 kubectl set image deploy nginx nginx=nginx:1.15.3 --record 命令后应该会出现多次滚动更新来更新应用,但因为使用了 Deployment 暂停功能,在没有确认变更指令下达之前这些变更都不会生效
    
    
    
    [root@k8s-master01 ~]# # 进行第二次配置变更
    [root@k8s-master01 ~]# # 添加内存CPU配置
    [root@k8s-master01 ~]# kubectl set resources deploy nginx -c nginx --limits=cpu=200m,memory=128Mi --requests=cpu=10m,memory=16Mi
    deployment.apps/nginx resource requirements updated
    
    
    #检查配置
    [root@k8s-master01 ~]# kubectl get deploy nginx -oyaml
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      annotations:
        deployment.kubernetes.io/revision: "11"
        kubernetes.io/change-cause: kubectl set image deploy nginx nginx=nginx:1.15.3
          --record=true
      creationTimestamp: "2020-09-19T02:41:11Z"
      generation: 18
      labels:
        app: nginx
      name: nginx
      namespace: default
      resourceVersion: "2660534"
      selfLink: /apis/apps/v1/namespaces/default/deployments/nginx
      uid: 1d9253a5-a36c-48cc-aefe-56f95967db66
    spec:
      paused: true
      progressDeadlineSeconds: 600
      replicas: 2
      revisionHistoryLimit: 10
      selector:
        matchLabels:
          app: nginx
      strategy:
        rollingUpdate:
          maxSurge: 25%
          maxUnavailable: 25%
        type: RollingUpdate
      template:
        metadata:
          creationTimestamp: null
          labels:
            app: nginx
        spec:
          containers:
          - image: nginx:1.15.3
            imagePullPolicy: IfNotPresent
            name: nginx
            resources:                    #-------------新增但未生效的配置
              limits:
                cpu: 200m
                memory: 128Mi
              requests:
                cpu: 10m
                memory: 16Mi             #-------------新增但未生效的配置
            terminationMessagePath: /dev/termination-log
            terminationMessagePolicy: File
          dnsPolicy: ClusterFirst
          restartPolicy: Always
          schedulerName: default-scheduler
          securityContext: {}
          terminationGracePeriodSeconds: 30
    status:
      availableReplicas: 2
      conditions:
      - lastTransitionTime: "2020-09-19T03:26:50Z"
        lastUpdateTime: "2020-09-19T03:26:50Z"
        message: Deployment has minimum availability.
        reason: MinimumReplicasAvailable
        status: "True"
        type: Available
      - lastTransitionTime: "2020-09-19T03:30:15Z"
        lastUpdateTime: "2020-09-19T03:30:15Z"
        message: Deployment is paused
        reason: DeploymentPaused
        status: Unknown
        type: Progressing
      observedGeneration: 18
      readyReplicas: 2
      replicas: 2
    
    
    [root@k8s-master01 ~]# # 查看pod是否被更新 [未更新]
    [root@k8s-master01 ~]# kubectl get po
    NAME                     READY   STATUS    RESTARTS   AGE
    nginx-6cdd5dd489-lv28z   1/1     Running   0          30m
    nginx-6cdd5dd489-nqqz7   1/1     Running   0          30m
    
    #检查rs更新状态: [未更新]
    [root@k8s-master01 pod]#  kubectl get rs
    NAME               DESIRED   CURRENT   READY   AGE
    nginx-5dfc8689c6   0         0         0       29m
    nginx-64f878dfbf   0         0         0       32m
    nginx-66bbc9fdc5   0         0         0       24m
    nginx-7d5b7bcf78   2         2         2       30m
    
    
    #关闭暂停更新功能
    [root@k8s-master01 ~]# kubectl rollout resume deploy nginx 
    deployment.apps/nginx resumed
    
    #检查状态
    [root@k8s-master01 ~]# kubectl get rs
    NAME               DESIRED   CURRENT   READY   AGE
    nginx-5475c49ffb   0         0         0       21m
    nginx-5dfc8689c6   0         0         0       33m
    nginx-66bbc9fdc5   0         0         0       52m
    nginx-68db656dd8   1         1         0       15s   [状态更新]
    nginx-6cdd5dd489   2         2         2       31m
    nginx-799b8478d4   0         0         0       21m
    nginx-7d79b96f68   0         0         0       24m
    nginx-f974656f7    0         0         0       21m
    
    #pod状态
    [root@k8s-master01 pod]# kubectl get pod
    NAME                     READY   STATUS    RESTARTS   AGE
    nginx-68db656dd8-cc4jv   1/1     Running   0          22s [状态更新]
    nginx-68db656dd8-hvj8x   1/1     Running   0          20s [状态更新]
    

    微信赞赏

    支付宝赞赏

  • 相关阅读:
    ZEat
    BingWallpaper
    ZBreak
    C语言块内变量回收问题
    Android 隐藏RadoiButton左边按钮
    php文件管理与基础功能的实现
    Ajax写分页查询(实现不刷新页面)
    jquery写日期选择器
    ajax三级联动下拉菜单
    ajax bookstrap美化网页,并实现页面的加载,删除与查看详情
  • 原文地址:https://www.cnblogs.com/superlinux/p/14979326.html
Copyright © 2011-2022 走看看