• Deployments


    Deployments

    一个 Deployment 为 PodReplicaSet 提供声明式的更新能力。
    在这里插入图片描述

    你负责描述 Deployment 中的目标状态,而 Deployment 控制器(Controller) 以受控速率更改实际状态, 使其变为期望状态。你可以定义 Deployment 以创建新的 ReplicaSet,或删除现有 Deployment, 并通过新的 Deployment 收养其资源。

    下面是一个 Deployment 示例。其中创建了一个 ReplicaSet,负责启动三个 nginx Pod:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deployment
      labels:
        app: nginx
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx:1.14.2
            ports:
            - containerPort: 80
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    查看deployment的状态:

    root@k8s-master:~# kubectl get deploy nginx-deployment -o wide
    NAME               READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS   IMAGES         SELECTOR
    nginx-deployment   2/3     3            2           71s   nginx        nginx:1.14.2   app=nginx
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    要查看 Deployment 上线状态:

    root@k8s-master:~# kubectl rollout status deploy nginx-deployment
    deployment "nginx-deployment" successfully rolled out
    
    
    • 1
    • 2
    • 3

    更新 Deployment

    • 先来更新 nginx Pod 以使用 nginx:1.16.1 镜像,而不是 nginx:1.14.2 镜像。

      root@k8s-master:~# kubectl get deploy nginx-deployment -o wide
      NAME               READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS   IMAGES         SELECTOR
      nginx-deployment   3/3     3            3           10m   nginx        nginx:1.14.2   app=nginx
      
      #更新
      root@k8s-master:~# kubectl set image deploy nginx-deployment nginx=nginx:1.16.1
      deployment.apps/nginx-deployment image updated
      
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
    • 查看上线状态:

      root@k8s-master:~# kubectl rollout status deployment nginx-deployment
      deployment "nginx-deployment" successfully rolled out
      root@k8s-master:~# kubectl get deployment nginx-deployment -o wide
      NAME               READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS   IMAGES         SELECTOR
      nginx-deployment   3/3     3            3           13m   nginx        nginx:1.16.1   app=nginx
      #看到版本已经变更为1.16.1
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6

    回滚 Deployment

    有时,你可能想要回滚 Deployment;例如,当 Deployment 不稳定时(例如进入反复崩溃状态)。 默认情况下,Deployment 的所有上线记录都保留在系统中,以便可以随时回滚 (你可以通过修改修订历史记录限制来更改这一约束)。

    • 假设你在更新 Deployment 时犯了一个拼写错误,将镜像名称命名设置为 nginx:1.161 而不是 nginx:1.16.1

      root@k8s-master:~# kubectl set image deployment/nginx-deployment nginx=nginx:1.161
      deployment.apps/nginx-deployment image updated
      
      
      • 1
      • 2
      • 3
    • 查看状态

      root@k8s-master:~# kubectl rollout status deployment nginx-deployment
      Waiting for deployment "nginx-deployment" rollout to finish: 1 out of 3 new replicas have been updated...
      
      
      • 1
      • 2
      • 3

    检查 Deployment 上线历史

    首先,检查 Deployment 修订历史:

    root@k8s-master:~# kubectl rollout history deployment/nginx-deployment
    deployment.apps/nginx-deployment
    REVISION  CHANGE-CAUSE
    1         
    2         
    3         
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    CHANGE-CAUSE 的内容是从 Deployment 的 kubernetes.io/change-cause 注解复制过来的。 复制动作发生在修订版本创建时。你可以通过以下方式设置 CHANGE-CAUSE 消息:

    • 使用 kubectl annotate deployment/nginx-deployment kubernetes.io/change-cause="image updated to 1.16.1" 为 Deployment 添加注解。
    • 手动编辑资源的清单。

    要查看修订历史的详细信息,运行:

    kubectl rollout history deployment/nginx-deployment --revision=2
    
    • 1
    root@k8s-master:~# kubectl rollout history deployment/nginx-deployment --revision=2
    deployment.apps/nginx-deployment with revision #2
    Pod Template:
      Labels:       app=nginx
            pod-template-hash=559d658b74
      Containers:
       nginx:
        Image:      nginx:1.16.1
        Port:       80/TCP
        Host Port:  0/TCP
        Environment:        
        Mounts:     
      Volumes:      
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    回滚到之前的修订版本

    按照下面给出的步骤将 Deployment 从当前版本回滚到以前的版本(即版本 2)。

    假定现在你已决定撤消当前上线并回滚到以前的修订版本:

    root@k8s-master:~# kubectl rollout undo deployment/nginx-deployment
    deployment.apps/nginx-deployment rolled back
    
    
    • 1
    • 2
    • 3

    检查回滚是否成功以及 Deployment 是否正在运行,运行:

    root@k8s-master:~# kubectl get deployment nginx-deployment
    NAME               READY   UP-TO-DATE   AVAILABLE   AGE
    nginx-deployment   3/3     3            3           13m
    
    
    • 1
    • 2
    • 3
    • 4

    获取 Deployment 描述信息:

    root@k8s-master:~# kubectl describe deployment nginx-deployment
    Name:                   nginx-deployment
    Namespace:              default
    CreationTimestamp:      Mon, 23 Oct 2023 16:17:23 +0800
    Labels:                 app=nginx
    Annotations:            deployment.kubernetes.io/revision: 4
    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:  
        Mounts:       
      Volumes:        
    Conditions:
      Type           Status  Reason
      ----           ------  ------
      Available      True    MinimumReplicasAvailable
      Progressing    True    NewReplicaSetAvailable
    OldReplicaSets:  
    NewReplicaSet:   nginx-deployment-559d658b74 (3/3 replicas created)
    Events:
      Type    Reason             Age    From                   Message
      ----    ------             ----   ----                   -------
      Normal  ScalingReplicaSet  17m    deployment-controller  Scaled up replica set nginx-deployment-66b6c48dd5 to 3
      Normal  ScalingReplicaSet  14m    deployment-controller  Scaled up replica set nginx-deployment-559d658b74 to 1
      Normal  ScalingReplicaSet  14m    deployment-controller  Scaled down replica set nginx-deployment-66b6c48dd5 to 2
      Normal  ScalingReplicaSet  14m    deployment-controller  Scaled up replica set nginx-deployment-559d658b74 to 2
      Normal  ScalingReplicaSet  14m    deployment-controller  Scaled down replica set nginx-deployment-66b6c48dd5 to 1
      Normal  ScalingReplicaSet  14m    deployment-controller  Scaled up replica set nginx-deployment-559d658b74 to 3
      Normal  ScalingReplicaSet  14m    deployment-controller  Scaled down replica set nginx-deployment-66b6c48dd5 to 0
      Normal  ScalingReplicaSet  12m    deployment-controller  Scaled up replica set nginx-deployment-66bc5d6c8 to 1
      Normal  ScalingReplicaSet  7m46s  deployment-controller  Scaled down replica set nginx-deployment-66bc5d6c8 to 0
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41

    版本已经回退到1.16.1

    缩放 Deployment

    你可以使用如下指令缩放 Deployment:

    root@k8s-master:~# kubectl scale deployment nginx-deployment --replicas=10
    deployment.apps/nginx-deployment scaled
    
    
    • 1
    • 2
    • 3

    查看

    root@k8s-master:~# kubectl get deploy nginx-deployment
    NAME               READY   UP-TO-DATE   AVAILABLE   AGE
    nginx-deployment   10/10   10           10          38m
    
    
    • 1
    • 2
    • 3
    • 4

    暂停、恢复 Deployment 的上线过程

    在你更新一个 Deployment 的时候,或者计划更新它的时候, 你可以在触发一个或多个更新之前暂停 Deployment 的上线过程。 当你准备应用这些变更时,你可以重新恢复 Deployment 上线过程。 这样做使得你能够在暂停和恢复执行之间应用多个修补程序,而不会触发不必要的上线操作。

    #获取deploy信息
    root@k8s-master:~# kubectl get deploy nginx-deployment
    NAME               READY   UP-TO-DATE   AVAILABLE   AGE
    nginx-deployment   10/10   10           10          38m
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    使用如下指令暂停上线:

    root@k8s-master:~# kubectl rollout pause deployment/nginx-deployment
    deployment.apps/nginx-deployment paused
    
    root@k8s-master:~# kubectl get deployment nginx-deployment -o wide
    NAME               READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS   IMAGES         SELECTOR
    nginx-deployment   10/10   10           10          78m   nginx        nginx:1.16.1   app=nginx
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    查看变更历史:

    root@k8s-master:~# kubectl rollout history deployment nginx-deployment
    deployment.apps/nginx-deployment
    REVISION  CHANGE-CAUSE
    1         
    3         
    4         
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    更新镜像:

    kubectl set image deployment/nginx-deployment nginx=nginx:1.16.2
    
    • 1

    查看历史(新上线没有被触发):

    root@k8s-master:~# kubectl rollout history deployment nginx-deployment
    deployment.apps/nginx-deployment
    REVISION  CHANGE-CAUSE
    1         
    3         
    4         
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    后续操作,如设置资源:

    kubectl set resources deployment/nginx-deployment -c=nginx --limits=cpu=200m,memory=512Mi
    
    • 1

    最终,恢复 Deployment 上线并观察新的 ReplicaSet 的创建过程,其中包含了所应用的所有更新:

    root@k8s-master:~# kubectl rollout resume deployment/nginx-deployment
    deployment.apps/nginx-deployment resumed
    
    
    • 1
    • 2
    • 3
    root@k8s-master:~# kubectl get deployments nginx-deployment
    NAME               READY   UP-TO-DATE   AVAILABLE   AGE
    nginx-deployment   8/10    5            8           91m
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    root@k8s-master:~# kubectl rollout history deployment nginx-deployment
    deployment.apps/nginx-deployment
    REVISION  CHANGE-CAUSE
    1         
    3         
    4         
    5         
    #发布历史又出现了新的一条
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
  • 相关阅读:
    Netty入门指南之NIO Channel详解
    我赢助手之爆款内容创作:爆款内容的底层逻辑,检查下自己的内容是否符合呢?
    docker 基本命令
    图数据库实践 - 如何将图数据库应用于对公信贷
    人人开源后台项目maven构建(yyds)
    OceanBase 分布式数据库【信创/国产化】- OceanBase V4.3 里程碑版本
    智能驾驶ADAS算法设计及Prescan仿真(2): 自适应巡航ACC控制策略设计与simulink仿真
    变分推断公式推导
    【学习记录】tensorflow图像数据增强
    Unity SpriteAtlas实战使用
  • 原文地址:https://blog.csdn.net/weixin_51882166/article/details/133995834