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

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
EMR Serverless StarRocks,5000CU*H 48000GB*H
简介: 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

在这个例子中:

  • 将创建一个名为 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

或者通过下面的命令创建

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

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

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

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

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

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

滚动更新

滚动更新介绍

滚动更新是一种自动化程度较高的发布方式,用户体验比较平滑,是目前成熟型技术组织所采用的主流发布方式,一次滚动发布一般由若干个发布批次组成,每批的数量一般是可以配置的(可以通过发布模板定义),例如第一批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
      ...省略...
      
      通过以下命令更新。
      ```shell
      kubectl apply -f deploy-demo1.yaml

另一个窗口实时监控

kubectl get pods -w

输出的结果如下:
![](https://ucc.alicdn.com/images/user-upload-01/img_convert/0554615f9a87fc14d1cbb6149c04c2dc.png)
详细deployment的使用可以参考如下
[介绍 Deployment](https://www.kuboard.cn/learning/k8s-intermediate/workload/wl-deployment/)
[Deployments](https://kubernetes.io/zh-cn/docs/concepts/workloads/controllers/deployment/)

# CKA真题

1. 真题截图

![](https://ucc.alicdn.com/images/user-upload-01/img_convert/78bdb5cfd32aca0073d8237a893e580b.png)

2. 中文解析
> 切换 k8s 集群环境:`kubectl config use-context k8s`
> Task
> 将`loadbalancer` 的 deployment 管理的 Pod 的副本数扩容成 6 个。

3. 参考文档

[Deployments](https://kubernetes.io/zh-cn/docs/concepts/workloads/controllers/deployment/)

4. 解题作答
   - 切换集群环境
```shell
kubectl config use-context k8s
  • 检查现有的Pod数量

    kubectl get deploy loadbalancer  -o wide
    
  • 扩容loadbalancer 的 deployment 管理的 Pod 的副本数扩容成 6 个

    kubelct scale deploy loadbalancer  --replicas=6
    
  • 检查Pod的数量

    kubectl get pod
    
相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
6月前
|
运维 Kubernetes 监控
CKA备考攻略:掌握Pod日志收集,事半功倍的秘诀!
CKA备考攻略:掌握Pod日志收集,事半功倍的秘诀!
169 0
CKA备考攻略:掌握Pod日志收集,事半功倍的秘诀!
|
6月前
|
存储 Kubernetes 容器
【CKA模拟题】一文教你如何查看并优雅地排序SVC资源
【CKA模拟题】一文教你如何查看并优雅地排序SVC资源
121 1
|
6月前
|
Kubernetes 安全 调度
提升CKA认证成功率,CKA真题中的节点维护全攻略!
提升CKA认证成功率,CKA真题中的节点维护全攻略!
72 0
|
6月前
|
存储 运维 Kubernetes
PV与PVC知多少?解锁CKA认证考点攻略!
PV与PVC知多少?解锁CKA认证考点攻略!
92 0
|
Kubernetes API 调度
21道题帮你轻松拿捏 Kubernetes 面试
21道题帮你轻松拿捏 Kubernetes 面试
|
3月前
|
Kubernetes Linux 网络虚拟化
15张图超硬核讲解 Kubernetes 网络,我不信网工不会看!
15张图超硬核讲解 Kubernetes 网络,我不信网工不会看!
|
6月前
|
存储 应用服务中间件 nginx
【CKA模拟题】StorageClass实战案例分析
【4月更文挑战第5天】【CKA模拟题】StorageClass实战案例分析
72 13
|
6月前
|
网络协议 Docker 容器
【CKA模拟题】不可不知:NodePort操作全攻略!
【CKA模拟题】不可不知:NodePort操作全攻略!
152 1
|
6月前
|
存储 Kubernetes Perl
【CKA模拟题】容忍度策略实战案例
【CKA模拟题】容忍度策略实战案例
75 1
|
6月前
|
Kubernetes 应用服务中间件 nginx
【CKA模拟题】如何发布一个SVC资源
【CKA模拟题】如何发布一个SVC资源
38 1