• CKA考生注意:这些Deployment要点能助你一臂之力!


    往期精彩文章 :

    什么是Deployment

    在Kubernetes中,Deployment是一种API对象,用于定义和管理Pod的部署方式。它提供了一种声明性的方法,允许您描述应用程序的期望状态,而不必关心具体的部署细节。Deployment的主要目标是确保所定义的Pod副本数一直运行在集群中,并支持滚动更新和回滚操作。
    以下是Deployment的关键特性和功能:

    1. 声明式配置: 使用Deployment,您可以通过YAML文件描述应用程序的期望状态,包括Pod的数量、所使用的镜像、端口等。
    2. 自动化的滚动更新: 当您需要更新应用程序时,可以通过修改Deployment的配置来实现。Deployment将负责逐步更新Pod,确保在整个过程中保持应用程序的可用性。
    3. 副本集管理: Deployment使用副本集(ReplicaSet)来确保指定数量的Pod实例一直运行。如果有Pod失败或被删除,Deployment会启动新的Pod来替代它们。
    4. 滚动回滚: 如果在更新中发现问题,您可以轻松地执行回滚操作,将Deployment回退到之前的版本,从而恢复到稳定状态。
    5. 自动修复: Deployment会自动监测Pod的运行状况,并在出现故障时尝试自动修复。如果Pod失败,Deployment将启动新的Pod,以确保所需数量的副本一直在运行。

    Deployment基本使用

    创建Deployment

    创建Deployment资源有两种方式,一种是书写资源清单方式,一种是通过kubectl命令行的方式创建。下面的 yaml 文件定义了一个 Deployment,该 Deployment 将创建一个有 3 个 nginx Pod 副本的 ReplicaSet(副本集):

    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.7.9
            ports:
            - containerPort: 80
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    在这个例子中:

    • 将创建一个名为 nginx-deployment 的 Deployment(部署),名称由.metadata.name字段指定
    • 该 Deployment 将创建 3 个 Pod 副本,副本数量由 .spec.replicas 字段指定
    • .spec.selector 字段指定了 Deployment 如何找到由它管理的 Pod。此案例中,我们使用了 Pod template 中定义的一个标签(app: nginx)。对于极少数的情况,这个字段也可以定义更加复杂的规则
    • .template 字段包含了如下字段:
      • .template.metadata.labels 字段,指定了 Pod 的标签(app: nginx)
      • .template.spec.containers[].image 字段,表明该 Pod 运行一个容器 nginx:1.7.9
      • .template.spec.containers[].name 字段,表明该容器的名字是 nginx执行命令以创建 Deployment执行命令以创建 Deployment

    执行命令以创建 Deployment

    kubectl apply -f nginx-deployment.yaml
    
    • 1

    或者通过下面的命令创建

    kubectl create deploy  nginx-deployment --image=nginx:1.7.9 --port=80 --replicas=3
    
    • 1

    创建成功,可以通过下面的命令查询

    controlplane $ kubectl get deploy
    NAME               READY   UP-TO-DATE   AVAILABLE   AGE
    nginx-deployment   3/3     3            3           10s
    controlplane $ kubectl get pod
    NAME                                READY   STATUS    RESTARTS   AGE
    nginx-deployment-867765c857-24rdz   1/1     Running   0          54s
    nginx-deployment-867765c857-6r86m   1/1     Running   0          54s
    nginx-deployment-867765c857-xj7c5   1/1     Running   0          54s
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    Deploy扩容

    通过修改 Deployment 的 spec.replicas 字段来指定期望的副本数。例如,现在需要把上述的nginx-deployment的副本数修改5。可以通过kubect edit deploy nginx-deployment进行修改。

    spec.replicas从原来的3修改成5。保存退出编辑。然后通过如下命令查看,nginx-deployment就成功的从3个副本数变成了5个。

    controlplane $ kubectl get deployments.apps 
    NAME               READY   UP-TO-DATE   AVAILABLE   AGE
    nginx-deployment   5/5     5            5           5m17s
    controlplane $ kubectl get pod
    NAME                                READY   STATUS    RESTARTS   AGE
    nginx-deployment-867765c857-24rdz   1/1     Running   0          6m13s
    nginx-deployment-867765c857-6r86m   1/1     Running   0          6m13s
    nginx-deployment-867765c857-vfr55   1/1     Running   0          62s
    nginx-deployment-867765c857-vrj4f   1/1     Running   0          62s
    nginx-deployment-867765c857-xj7c5   1/1     Running   0          6m13s
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    或者也可通过下面的命令进行扩容

    controlplane $ kubectl scale deployment nginx-deployment --replicas=5
    deployment.apps/nginx-deployment scaled
    
    • 1
    • 2

    滚动更新

    滚动更新介绍

    滚动更新是一种自动化程度较高的发布方式,用户体验比较平滑,是目前成熟型技术组织所采用的主流发布方式,一次滚动发布一般由若干个发布批次组成,每批的数量一般是可以配置的(可以通过发布模板定义),例如第一批1台,第二批10%,第三批50%,第四批100%。每个批次之间留观察间隔,通过手工验证或监控反馈确保没有问题再发下一批次,所以总体上滚动式发布过程是比较缓慢的。

    查看控制器策略

    可以通过kubectl explain deploy.spec.strategy查看控制器策略。如下图:

    deploy更新方式

    支持两种更新,**Recreate****RollingUpdate**

    • Recreate是重建式更新,删除一个更新一个
    • RollingUpdate 滚动更新,定义滚动更新的更新方式的,也就是pod能多几个,少几个,控制更新力度的。
    RollingUpdate

    通过kubectl explain deploy.spec.strategy.RollingUpdate查看滚动更新帮助文档。如下图:

    **maxSurge(最大扩展的值)和maxUnavailable(最大不可用)用来控制滚动更新的策略,**取值范围分为数值和百分比

    1. 先来看百分比
      • maxUnavailable: [0%, 100%] 向下取整,比如10个副本,5%的话==0.5个,但计算按照0个
      • maxSurge: [0%, 100%] 向上取整,比如10个副本,5%的话==0.5个,但计算按照1个
    2. 再来看数值
      • maxUnavailable: [0, 副本数]
      • maxSurge: [0, 副本数]
    Recreate

    把deploy更新策略变成Recreate

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deployment
      labels:
        app: nginx
    spec:
      replicas: 3
      strategy:
        type: Recreate
    ...省略...
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    通过以下命令更新。

    kubectl apply -f deploy-demo1.yaml
    
    #另一个窗口实时监控
    kubectl get pods -w
    
    • 1
    • 2
    • 3
    • 4

    输出的结果如下:

    详细deployment的使用可以参考如下
    介绍 Deployment
    Deployments

    CKA真题

    1. 真题截图

    1. 中文解析

    切换 k8s 集群环境:kubectl config use-context k8s
    Task
    loadbalancer 的 deployment 管理的 Pod 的副本数扩容成 6 个。

    1. 参考文档

    Deployments

    1. 解题作答
      • 切换集群环境
    kubectl config use-context k8s
    
    • 1
    • 检查现有的Pod数量
    kubectl get deploy loadbalancer  -o wide
    
    • 1
    • 扩容loadbalancer 的 deployment 管理的 Pod 的副本数扩容成 6 个
    kubelct scale deploy loadbalancer  --replicas=6
    
    • 1
    • 检查Pod的数量
    kubectl get pod  
    
    • 1
  • 相关阅读:
    史上最全 Zuul网关鉴权 范文
    android studio设置flutter和dart的sdk配置
    暗猝灭剂BHQ-2 氨基,BHQ-2 amine,CAS:1241962-11-7
    devops-1:代码仓库git的使用
    P1039 [NOIP2003 提高组] 侦探推理
    7 个不容忽视的开源安全工具
    HackTheBox-Starting Point--Tier 2---Archetype
    关于vue.config.js
    【神经网络】(21) Vision Transformer 代码复现,网络解析,附TensorFlow完整代码
    目标检测。
  • 原文地址:https://blog.csdn.net/sinat_28521487/article/details/136431728