美文网首页CKA认证K8s
【K8s 精选】CKA - 工作负载和调度 - 部署、更新和回滚

【K8s 精选】CKA - 工作负载和调度 - 部署、更新和回滚

作者: 熊本极客 | 来源:发表于2022-02-28 10:48 被阅读0次

    参考工作负载 Deployment

    1.创建 Deployment 部署 Pod

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deployment
      #deployment的标签
      labels:
        app: nginx
    spec:
      replicas: 3
      selector:   #必填字段
        #spec.selector.matchLabels与spec.template.metadata.labels一致,可用于service的后端
        matchLabels:
          app: nginx
      template:
        metadata:
          #pod的标签
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx:1.14.2
            ports:
            - containerPort: 80
    

    metadata.name 表示 Deployment 的唯一名称
    spec.replicas 表示 Pod 的副本数
    spec.selector 表示 Deployment 通过模板 template 管理 Pods

    说明
    spec.selector.matchLabelsspec.template.metadata.labels 需要保持一致,可用于 Service 的后端。

    2.更新 Deployment

    仅当 Deployment Pod 模板即 spec.template 内容有变化的时候,才会触发 Deployment 更新。

    例如,更新镜像

    步骤 ①:更新镜像版本

    #方式1 直接设置镜像
    #nginx-deployment是metadata.name,nginx是spec.template.spec.containers[0].name
    $kubectl set image deployment/nginx-deployment nginx=nginx:1.16.1 --record
    deployment.apps/nginx-deployment image updated
    
    #方式2 edit deployment
    $kubectl edit deployment/nginx-deployment
    deployment.apps/nginx-deployment image updated
    

    步骤 ②:查看上线状态

    $kubectl rollout status deployment/nginx-deployment
    Waiting for rollout to finish: 2 out of 3 new replicas have been updated...
    deployment "nginx-deployment" successfully rolled out
    

    步骤 ③:查看 Deployment 和 Pod 的最新状态

    #查看 Deployment
    $kubectl get deployment/nginx-deployment
    NAME               DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
    nginx-deployment   3         3         3            3           36s
    
    #查看副本数 ReplicaSet 
    $kubectl get rs |grep nginx-deployment
    NAME                          DESIRED   CURRENT   READY   AGE
    nginx-deployment-1564180365   3         3         3       6s
    nginx-deployment-2035384211   0         0         0       36s
    
    #查看 Pod
    $kubectl get pods |grep nginx-deployment
    NAME                                READY     STATUS    RESTARTS   AGE
    nginx-deployment-1564180365-khku8   1/1       Running   0          14s
    nginx-deployment-1564180365-nacti   1/1       Running   0          14s
    nginx-deployment-1564180365-z9gth   1/1       Running   0          14s
    

    Deployment 的升级流程:首先创建新 Pod,直到有足够的数量新 Pods 创建了,才会杀死旧 Pods。

    3.回滚 Deployment

    3.1 查看升级过程中有问题的 Pod

    类似上面升级 Deployment 的操作,如果出现新 Pod 异常启动,则停止升级。

    说明: 可通过 rollingUpdate 参数 maxUnavailable(默认值为 25%),实现 Deployment 控制器自动停止有问题的升级过程,并停止对新的 ReplicaSet 扩容。

    #查看 Deployment
    $kubectl get deployment/nginx-deployment
    Waiting for rollout to finish: 1 out of 3 new replicas have been updated...
    
    #查看 Pod
    $kubectl get pods |grep nginx-deployment
    NAME                                READY     STATUS             RESTARTS   AGE
    nginx-deployment-1564180365-70iae   1/1       Running            0          50s
    nginx-deployment-1564180365-jbqqo   1/1       Running            0          50s
    nginx-deployment-1564180365-hysrc   1/1       Running            0          50s
    nginx-deployment-3066724191-08mng   0/1       ImagePullBackOff   0          6s
    

    3.2 查看 Deployment 上线历史

    #检查 Deployment 修订历史
    $kubectl rollout history deployment/nginx-deployment
    deployments "nginx-deployment"
    REVISION    CHANGE-CAUSE
    1           kubectl apply --filename=https://k8s.io/examples/controllers/nginx-deployment.yaml --record=true
    2           kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:1.9.1 --record=true
    3           kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:1.91 --record=true
    
    
    #查看指定 Deployment 历史的详情
    #revision 表示上述 REVISION 的版本,数字越大,版本越新。
    $kubectl rollout history deployment.v1.apps/nginx-deployment --revision=2
    deployments "nginx-deployment" revision 2
      Labels:       app=nginx
              pod-template-hash=1159050644
      Annotations:  kubernetes.io/change-cause=kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:1.16.1 --record=true
      Containers:
       nginx:
        Image:      nginx:1.16.1
        Port:       80/TCP
         QoS Tier:
            cpu:      BestEffort
            memory:   BestEffort
        Environment Variables:      <none>
      No volumes.
    

    3.2 回滚 Deployment 之前的版本

    # --to-revision 回滚到版本 2
    $kubectl rollout undo deployment/nginx-deployment --to-revision=2
    
    #检查回滚是否成功以及 Deployment 是否正在运
    $kubectl get deployment nginx-deployment
    NAME               DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
    nginx-deployment   3         3         3            3           30m
    
    $kubectl describe deployment nginx-deployment
    Name:                   nginx-deployment
    Namespace:              default
    CreationTimestamp:      Sun, 02 Sep 2018 18:17:55 -0500
    Labels:                 app=nginx
    Annotations:            deployment.kubernetes.io/revision=4
                            kubernetes.io/change-cause=kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:1.16.1 --record=true
    Selector:               app=nginx
    Replicas:               3 desired | 3 updated | 3 total | 3 available | 0 unavailable
    StrategyType:           RollingUpdate
    MinReadySeconds:        0
    RollingUpdateStrategy:  25% max unavailable, 25% max surge
    Pod Template:
      Labels:  app=nginx
      Containers:
       nginx:
        Image:        nginx:1.16.1
        Port:         80/TCP
        Host Port:    0/TCP
        Environment:  <none>
        Mounts:       <none>
      Volumes:        <none>
    Conditions:
      Type           Status  Reason
      ----           ------  ------
      Available      True    MinimumReplicasAvailable
      Progressing    True    NewReplicaSetAvailable
    OldReplicaSets:  <none>
    NewReplicaSet:   nginx-deployment-c4747d96c (3/3 replicas created)
    Events:
      Type    Reason              Age   From                   Message
      ----    ------              ----  ----                   -------
      Normal  ScalingReplicaSet   12m   deployment-controller  Scaled up replica set nginx-deployment-75675f5897 to 3
      Normal  ScalingReplicaSet   11m   deployment-controller  Scaled up replica set nginx-deployment-c4747d96c to 1
      Normal  ScalingReplicaSet   11m   deployment-controller  Scaled down replica set nginx-deployment-75675f5897 to 2
      Normal  ScalingReplicaSet   11m   deployment-controller  Scaled up replica set nginx-deployment-c4747d96c to 2
      Normal  ScalingReplicaSet   11m   deployment-controller  Scaled down replica set nginx-deployment-75675f5897 to 1
      Normal  ScalingReplicaSet   11m   deployment-controller  Scaled up replica set nginx-deployment-c4747d96c to 3
      Normal  ScalingReplicaSet   11m   deployment-controller  Scaled down replica set nginx-deployment-75675f5897 to 0
      Normal  ScalingReplicaSet   11m   deployment-controller  Scaled up replica set nginx-deployment-595696685f to 1
      Normal  DeploymentRollback  15s   deployment-controller  Rolled back deployment "nginx-deployment" to revision 2
      Normal  ScalingReplicaSet   15s   deployment-controller  Scaled down replica set nginx-deployment-595696685f to 0
    

    相关文章

      网友评论

        本文标题:【K8s 精选】CKA - 工作负载和调度 - 部署、更新和回滚

        本文链接:https://www.haomeiwen.com/subject/zcsfrrtx.html