当前位置: 首页 > news >正文

【赵渝强老师】K8s中的Deployment控制器

1

K8s的Deployment将Pod部署成无状态的应用程序,它只关心Pod的数量、Pod更新方式、使用的镜像和资源限制等。由于是无状态的管理方式,因此Deployment中没有角色和顺序的概念,换句话说:Deployment中没有状态。

通过使用Deployment,可以让开发人员上线部署Pod、设置Pod的副本、实现Pod的升级与回滚。通过在yaml文件中描述Deployment的目标是什么,Deployment控制器就会自动完成对Pod和Replica Set的管理。Kubernetes运行创建一个新的Deployment,也可以用一个新的Deployment替换旧的Deployment。

提示:ReplicaSet是下一代复本控制器,它可以独立使用。但在Kubernetes中主要是被Deployment作为协调Pod的创建、更新和删除。当使用Deployment控制器时,它会自动创建ReplicaSets,并对其进行管理。

image.png
点击这里查看视频讲解:【赵渝强老师】K8s中的Deployment控制器

Deployment、ReplicaSet和Pod之间的关系可以通过下图来说明。

2

下面的描述了创建和更新Deployment的过程。

  • 创建Deployment的过程:Deployment将创建ReplicaSet。ReplicaSet在后台根据指定的副本数创建Pod,并检查Pod的状态以确定Pod启动成功还是失败。
  • 更新Deployment的过程:当用户更新Deployment时,Kubernetes会创建一个新的ReplicaSet。Deployment会将Pod从旧的ReplicaSet迁移到新的ReplicaSet中。如果迁移失败或者Pod不稳定,Deployment会自动回滚到上一个版本。如果迁移成功,Deployment将清除旧的不必要的ReplicaSet。

在掌握的Deployment控制器的作用后,这里将通过一个示例来演示如何使用Deployment控制管理Pod。

(1)创建deployment-demo.yaml文件,并输入下面的内容:

apiVersion: apps/v1
kind: Deployment
metadata:name: deployment-demolabels:app: nginx
spec:replicas: 3selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.7.9imagePullPolicy: IfNotPresentports:- containerPort: 80

其中的参数含义如下表所示。

3

(2)通过运行以下命令创建 Deployment。

kubectl apply -f deployment-demo.yaml

(3)查看创建的Deployment和ReplicaSet信息。

kubectl get deployments,replicaset,pod

提示:这条命令可以简写为下面的形式:
kubectl get deploy,rs,pod

输出的信息如下图所示:

4

(4)查看每个Pod自动生成的标签,如下图所示。

kubectl get pods --show-labels

5

(5)修改yaml文件来实现更新的目的。下面的yaml文件将Nginx的版本升级到了1.9.1,并将Pod的副本数改成了4。

apiVersion: apps/v1
kind: Deployment
metadata:name: deployment-demolabels:app: nginx
spec:replicas: 4selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.9.1imagePullPolicy: IfNotPresentports:- containerPort: 80

提示:这里也可以使用命令行的方式来实现更新,例如:
kubectl set image deploy deployment-demo nginx=nginx:1.9.1

(6)通过运行以下命令重新应用 Deployment。

kubectl apply -f deployment-demo.yaml

(7)获取Deployment的信息。

kubectl describe deployments deployment-demo# 输出的部分信息如下:
Pod Template:Labels:  app=nginxContainers:nginx:Image:        nginx:1.9.1Port:         80/TCPHost Port:    0/TCPEnvironment:  <none>Mounts:       <none>Volumes:        <none>

(8)执行下面的命令,将Nginx的版本更新到1.7.9。

kubectl --record deployment.apps/deployment-demo \
set image deployment.apps/deployment-demo nginx=nginx:1.7.9

提示:为了能够追溯修改历史记录,这里使用了--record参数。

(9)获取Deployment的信息。

kubectl describe deployments deployment-demo# 输出的部分信息如下。这里看出这里的Nginx版本又回到了1.7.9.
Pod Template:Labels:  app=nginxContainers:nginx:Image:        nginx:1.7.9Port:         80/TCPHost Port:    0/TCPEnvironment:  <none>Mounts:       <none>

(10)执行命令追溯修改的历史。

kubectl rollout history deployment deployment-demo# 输出的信息如下:
deployment.extensions/deployment-demo 
REVISION  CHANGE-CAUSE
2           <none>
3           kubectl deployment.apps/deployment-demo \set image deployment.apps/deployment-demo \nginx=nginx:1.7.9 --record=true

(11)执行命令将回滚到版本2。

kubectl rollout undo deployment deployment-demo --to-revision=2

(12)重新获取Deployment的信息。

kubectl describe deployments deployment-demo# 输出的部分信息如下。这里看出这里的Nginx版本又回到了1.9.1。
Pod Template:Labels:  app=nginxContainers:nginx:Image:        nginx:1.9.1Port:         80/TCPHost Port:    0/TCPEnvironment:  <none>Mounts:       <none>Volumes:        <none>

(13)下面的命令将对Deployment进行缩放操作。

kubectl scale deployment deployment-demo --replicas=7

(14)下面的命令将暂停和恢复Deployment

kubectl rollout pause deployment deployment-demo
kubectl rollout resume deployment deployment-demo

提示:可以在更新Deployment之前暂停Deployment,等待更新完成后在恢复它。这允许在暂停和恢复之间应用多个修补程序,而不会触发不必要的Deployment。

http://www.gsyq.cn/news/124001.html

相关文章:

  • 2025年系统门窗品牌实力口碑排行榜:门窗系统可信度高吗? - mypinpai
  • 2025年NACHI丝杠轴承轴承服务排行榜,NACHI进口轴承优选企业推荐 - 工业品牌热点
  • 2025年12月国内GEO厂家实力对比分析 - 2025年品牌推荐榜
  • 【linux内核】nfs回写②
  • 2025年自建房文化石优质厂家权威推荐榜单:民宿外墙文化石/别墅外墙文化石/漂流石系列源头厂家精选 - 品牌推荐官
  • 考研复试上岸关键!2026权威辅导机构TOP10推荐
  • 2025年12月马毛砖,柔光砖,哑光砖厂商推荐:聚焦企业综合实力与核心竞争力 - 品牌鉴赏师
  • 如何使用deepFace批量创建有创意的GIF图片表情包?
  • 实用指南:分布式、Spring Boot微服务、垂直拆分、水平拆分、分库分表详解及关系梳理
  • 2025年仿古砖龙头厂家排名及口碑解析,仿古砖龙头厂家市场口碑如何 - 工业推荐榜
  • azw3转换为pdf怎么转?3个转换方法分享
  • Spring设计模式:从面试送命题到Offer直通车 - 教程
  • Dubbo 3 深度剖析 – 透过源码认识你 | 更新完结 - 教程
  • 2025年12月马毛瓷砖,亮光砖,仿古砖公司推荐:行业测评与选择指南 - 品牌鉴赏师
  • VMware ESXi 8.0U3h macOS Unlocker OEM BIOS 2.7 xFusion 超聚变 定制版
  • 2025年年终智能客服机器人服务商推荐:聚焦复杂业务场景与成本效益,专家严选5款优质解决方案盘点 - 品牌推荐
  • 支付公司哪家强?2025年最新产业支付趋势解读与五大实力派推荐 - 品牌推荐
  • Excel处理控件Aspose.Cells教程:使用C#在Excel中创建旭日图
  • 2025年星链连接线优质厂家TOP5推荐,靠谱厂商与生产厂全解析 - mypinpai
  • 2025年门窗行业品牌年度排名:门窗第一的品牌受客户认可不? - 工业品牌热点
  • 2025年FAG轴承优质供应商排行榜,轴承fag供应商、fag轴承代理新测评推荐 - 工业推荐榜
  • 2025年玻璃钢耐腐蚀弯头直销厂家权威推荐榜单:玻璃钢弯头/FRP弯头/玻璃钢90度弯头源头厂家精选 - 品牌推荐官
  • 北京GEO服务商综合评测:专业能力与实战效果深度解析 - 博客万
  • 2025年厚壁无缝钢管定做厂家权威推荐榜单:化工专用无缝钢管/API5LPSL2无缝钢管/碳钢无缝管源头厂家精选 - 品牌推荐官
  • Item44--将与参数无关的代码抽离 templates
  • 房叮咚订房平台深度解析:“用户出价,酒店抢单”如何颠覆传统酒店预订? - 资讯焦点
  • 房叮咚订房平台深度解析:“用户出价,酒店抢单”如何颠覆传统酒店预订? - 资讯焦点
  • 2025年方圆螺旋焊管直销厂家权威推荐榜单:螺旋管防腐/螺旋钢管/螺旋管涂塑源头厂家精选 - 品牌推荐官
  • 1N4007在小电流的压降
  • 2025年12月坦克链,无尘坦克链,工程塑料坦克链厂商推荐:聚焦企业综合实力与核心竞争力 - 品牌鉴赏师