第5章 Deployment:介绍
Deployment简介:
Deployment是常见的k8s工作负载控制器(Workload Controller)。是k8s的一个抽象概念,用于高级层次对象,部署和管理pod。其他控制器还有DaemonSet,StatefulSet等。
Deployment的主要功能:
- 管理Pod和ReplicationSet
- 具有上线部署、副本设定、滚动升级、回滚等功能
- 提供声明式更新,例如只更新一个新的Images
- 使用场景:网站、api、微服务
Pod与控制器的关系图:
5.1 Deployment:应用生命周期管理流程
5.2Deployment:部署应用
第一步:部署镜像
• kubectl apply -f xxx.yaml
• kubectl create deployment web --image=nginx:1.16 --replicas=3
apiVersion: apps/v1 kind: Deployment metadata: name: web namespace: aliang-cka spec: replicas: 3 #pod副本预期数量 selector: matchLabels: app: web template: metadata: labels: app: web # Pod的副本标签 spec: containers: - name: web image: nginx:1.16
5.3 Deployment:滚动升级
5.3.1 第二步:应用升级(更新镜像三种方式,自动触发滚动升级)
- kubectl apply -f xxx.yaml
- kubectl set image deployment/web nginx=nginx:1.17
- kubectl edit deploment/web #使用系统编辑打开
滚动升级:k8s对pod升级的默认策略,通过使用新版本pod逐步更新旧版pod,实现零停机发布,用户无感知。
5.3.2 滚动升级在k8s中实现:
- 1个deployment
- 2个ReplicaSet
5.4 Deployment:水平扩缩溶
第三步:水平扩缩容(启动多实例,提供并发)
- 修改yaml里replicas值,再apply
- Kubectl scale deployment web –replicas=10
注意:replicas参数控制pod的副本数量
5.5 Deployment:回滚
kubectl set image deployment web web=nginx:1.18 --record # record记录到发布版本里
第四步:回滚(项目升级失败恢复到正常版本)
Kubectl rollout history deployment/web #查看历史版本
Kubectl rollout undo deployment/web 回滚上一个版本
Kubectl rollout undo deployment/web –to-revision=2 #回滚历史指定版本
注意:回滚是重新部署某一次部署的状态,即当时版本所有配置
5.5.1查询service关联的pod
kubectl get endpoints -n aliang-cka
replicaSet(RS):副本集,是一个控制器,具体是管理Pod副本的,他是deployment小弟,是滚动升级的执行者
- 滚动升级执行者
- 发布版本记录者
kubectl get rs -n aliang-cka NAME DESIRED CURRENT READY AGE web-545c8dd8d8 0 0 0 15m nginx:1.16 web-5ffdd58fff 3 3 3 8m47s nginx:1.17 web-7995df6956 0 0 0 25m java-demo kubectl describe deployment web -n aliang-cka ... 初次部署: Normal ScalingReplicaSet 28m deployment-controller Scaled up replica set web-7995df6956 to 3 第一次升级,由java-demo升级到nginx:1.16 Normal ScalingReplicaSet 18m deployment-controller Scaled up replica set web-545c8dd8d8 to 1 Normal ScalingReplicaSet 17m deployment-controller Scaled down replica set web-7995df6956 to 2 Normal ScalingReplicaSet 17m deployment-controller Scaled up replica set web-545c8dd8d8 to 2 Normal ScalingReplicaSet 17m deployment-controller Scaled down replica set web-7995df6956 to 1 Normal ScalingReplicaSet 17m deployment-controller Scaled up replica set web-545c8dd8d8 to 3 Normal ScalingReplicaSet 16m deployment-controller Scaled down replica set web-7995df6956 to 0 第二次升级,由nginx:1.16升级到nginx:1.17 Normal ScalingReplicaSet 11m deployment-controller Scaled up replica set web-5ffdd58fff to 1 Normal ScalingReplicaSet 10m deployment-controller Scaled down replica set web-545c8dd8d8 to 2 Normal ScalingReplicaSet 10m deployment-controller Scaled up replica set web-5ffdd58fff to 2 Normal ScalingReplicaSet 9m44s (x3 over 10m) deployment-controller (combined from similar events): Scaled down replica set web-545c8dd8d8 to 0 旧版本:545c8dd8d8 nginx:1.16 新版本:5ffdd58fff nginx:1.17 滚动升级步骤: 5ffdd58fff scale-up 扩容为1个Pod副本 545c8dd8d8 scale-dwon 缩容为2个Pod副本 5ffdd58fff scale-up 扩容为2个Pod副本 545c8dd8d8 scale-dwon 缩容为1个Pod副本 5ffdd58fff scale-up 扩容为3个Pod副本 545c8dd8d8 scale-dwon 缩容为0个Pod副本 RS在其中不断调谐副本数量,实现滚动策略。 kubectl set image deployment web web=nginx:1.18 --record # record记录到发布版本里
5.6 Deployment:删除
最后,项目下线: kubectl delete deploy/web kubectl delete svc/web
5.7Deployment控制器用途:
• Pod副本数量管理,不断对当前Pod数量与期望pod数量
• Deployment每次发布都会创建一个RS作为记录,用于实现回滚
Kubectl get rs 查看RS记录
Kubectl rollout history deployment web #版本对应RS记录
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!