第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记录

 

posted @   逆风飞翔的博客  阅读(231)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
点击右上角即可分享
微信分享提示