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

本文涉及的产品
应用型负载均衡 ALB,每月750个小时 15LCU
传统型负载均衡 CLB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
简介: 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
    
相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
安全 网络协议 搜索推荐
应急靶场 | 2014-11-16流量分析练习
应急靶场 | 2014-11-16流量分析练习
389 1
|
6月前
|
消息中间件 JSON 数据库
探索Flink动态CEP:杭州银行的实战案例
探索Flink动态CEP:杭州银行的实战案例
200 5
|
Kubernetes 监控 测试技术
在K8S中,如何实现金丝雀发布(灰度发布)?蓝绿发布?
在K8S中,如何实现金丝雀发布(灰度发布)?蓝绿发布?
|
8月前
|
存储 监控 算法
Flink 四大基石之 Checkpoint 使用详解
Flink 的 Checkpoint 机制通过定期插入 Barrier 将数据流切分并进行快照,确保故障时能从最近的 Checkpoint 恢复,保障数据一致性。Checkpoint 分为精确一次和至少一次两种语义,前者确保每个数据仅处理一次,后者允许重复处理但不会丢失数据。此外,Flink 提供多种重启策略,如固定延迟、失败率和无重启策略,以应对不同场景。SavePoint 是手动触发的 Checkpoint,用于作业升级和迁移。Checkpoint 执行流程包括 Barrier 注入、算子状态快照、Barrier 对齐和完成 Checkpoint。
1401 20
|
关系型数据库 MySQL 分布式数据库
Hbase与MySQL对比,区别是什么?
Hbase与MySQL对比,区别是什么?
704 2
|
数据采集 人工智能 测试技术
模块化重构LLaVA,替换组件只需添加1-2个文件,开源TinyLLaVA Factory来了
【6月更文挑战第5天】TinyLLaVA Factory是新推出的开源模块化代码库,简化小规模多模态模型的设计与训练,采用工厂模式,允许用户通过添加或替换少量文件轻松重构模型组件,提高开发效率。该库支持定制LMMs并提供训练配方,通过模块化和开源促进社区合作,已实验证实在复现性能上与原始模型相当。尽管面临兼容性等挑战,但其前瞻性的技术路线图确保了其在AI领域的相关性和活力。论文链接:[arxiv.org/abs/2405.11788](https://arxiv.org/abs/2405.11788)
206 0
|
存储 分布式计算 算法
Flink四大基石——4.Checkpoint容错机制
Flink四大基石——4.Checkpoint容错机制
276 1
openjdk安装
openjdk安装
485 1
|
Linux 开发工具 索引
基于Linux系统的本地Yum源搭建与配置(ISO方式、RPM方式)
基于Linux系统的本地Yum源搭建与配置(ISO方式、RPM方式)
1853 0
|
Web App开发 JavaScript 前端开发
《手把手教你》系列技巧篇(四十三)-java+ selenium自动化测试-处理https 安全问题或者非信任站点-上篇(详解教程)
【5月更文挑战第7天】本文介绍了如何在Java+Selenium自动化测试中处理浏览器对不信任证书的处理方法,特别是针对IE、Chrome和Firefox浏览器。在某些情况下,访问HTTPS网站时会遇到证书不可信的警告,但可以通过编程方式跳过这些警告。
333 1