Deployments

文章编号:679 互联网资讯 2023-10-23 kubernetes 运维

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

查看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


要查看 Deployment 上线状态:

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

更新 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
    
    
  • 查看上线状态:

    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
    

回滚 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
    
    
  • 查看状态

    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...
    
    

检查 Deployment 上线历史

首先,检查 Deployment 修订历史:

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


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
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:      

回滚到之前的修订版本

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

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

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

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

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

获取 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.16.1

缩放 Deployment

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

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

查看

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

暂停、恢复 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

使用如下指令暂停上线:

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

查看变更历史:

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


更新镜像:

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

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

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

后续操作,如设置资源:

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

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

root@k8s-master:~# kubectl rollout resume deployment/nginx-deployment
deployment.apps/nginx-deployment resumed

root@k8s-master:~# kubectl get deployments nginx-deployment
NAME               READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment   8/10    5            8           91m


root@k8s-master:~# kubectl rollout history deployment nginx-deployment
deployment.apps/nginx-deployment
REVISION  CHANGE-CAUSE
1         
3         
4         
5         
#发布历史又出现了新的一条

本文地址: http://www.wangzhanbaike.cn/article/0cec5c0fa380a0c82d94.html
百度营销-商业开发者中心

百度开发者中心是一个面向开发者的知识分享平台,专注于为开发者打造一个有温度的技术交流社区,开发者通过平台来分享知识、相互交流。

Discuz! 官方交流社区 - 贰道网络 - Discuz应用中心社区 - 提供模板、插件、技术支持等全方位服务 -  Powered by Discuz!

本站是Discuz社区产品的交流站点。本站应用中心提供风格、模板、插件、产品扩展、技术支持等全方位服务。Discuz!社区,是一个采用PHP和MySQL等其他多种数据库构建的性能优异、功能全面、安全稳定的社区论坛平台,是全球市场占有率第一的社区软件。

百度产品大全

该站点未添加描述description...

新浪财经_新浪网

新浪财经提供7X24小时财经资讯及全球金融市场报价,覆盖股票、债券、基金、期货、信托、理财、管理等多种面向个人和企业的服务。

网页模板 | HTML5网站模板 | 网页图片

@templatemonsterHTML模板、WordPress与电子商务主题、网页图片以及在线元素的最大集结地。TemplateMonster为你提供由世界各地的专业人员开发的网页设计产品。

I/O 3000 | Webデザインギャラリー

I/O3000は、Webデザインに関わる人のためのWebデザインギャラリーサイトです。国内外を問わず、Web制作の参考となるサイトをセレクトしています。

艺术字图片大全_好看的艺术字素材下载_字魂网

字魂网共有558,704个原创艺术字图片素材可供下载,包括各种字体的图片大全,高清艺术字图片等,下载各种字体的原创高质量艺术字图片就上字魂网。

电子书转换器 (在线自由) — Convertio

转换电子书文件现在很容易!我们基于网络的应用程序可以帮助您在几秒钟内转换电子书文件。Convertio—解决任何文件任何问题的先进在线工具。

东方资讯

该站点未添加描述description...