0
点赞
收藏
分享

微信扫一扫

k8s学习-deployment(模板、更新、扩缩容、回滚等)


目录

  • ​​概念​​
  • ​​模板​​
  • ​​实战​​
  • ​​创建​​
  • ​​更新​​
  • ​​回滚(rollback)​​
  • ​​查看历史版本​​
  • ​​回滚到上一版本​​
  • ​​查看与回滚到指定版本​​
  • ​​扩缩容​​
  • ​​暂停和恢复​​
  • ​​删除​​
  • ​​注意项​​
  • ​​yaml的一些字段​​
  • ​​回滚过程​​
  • ​​参考​​

概念

deploy用于部署无状态的服务,这个是最常用的控制器。一般用于管理维护企业内部无状态的微服务。它基于RS,可以管理多个副本的Pod,实现无缝迁移、自动扩容缩容、自动灾难恢复、一键回滚等功能。

模板

apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment # deploy的名字
labels: # 标签
app: nginx
spec:
replicas: 3 # 副本数
selector: # 选择器
matchLabels:
app: nginx
template: # 容器模板
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80

实战

创建

保存上面的模板为deploy-nginx.yaml
命令:

kubectl create -f deploy-nginx.yaml -n killer

结果:
k8s学习-deployment(模板、更新、扩缩容、回滚等)_docker
稍等两分钟,可以看到容器都起来了
k8s学习-deployment(模板、更新、扩缩容、回滚等)_学习_02
也可以看到rs
查看更多信息:

[root@k8s-master01 deploy]# kubectl get deploy -n killer -owide
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
nginx-deployment 3/3 3 3 3m nginx nginx:latest app=nginx
  • NAME: Deployment名称
  • READY:Pod的状态,已经Ready的个数
  • UP-TO-DATE:已经达到期望状态的被更新的副本数
  • AVAILABLE:已经可以用的副本数
  • AGE:显示应用程序运行的时间
  • CONTAINERS:容器名称
  • IMAGES:容器的镜像
  • SELECTOR:管理的Pod的标签

更新

没有记录的更新,使用edit即可
k8s学习-deployment(模板、更新、扩缩容、回滚等)_学习_03
由于之后需要回滚,因此需要记录版本,可以使用set命令

kubectl set image deploy nginx-deployment nginx=nginx:latest --record

k8s学习-deployment(模板、更新、扩缩容、回滚等)_nginx_04

回滚(rollback)

查看历史版本

命令

kubectl rollout history deploy nginx-deployment -n killer

结果
k8s学习-deployment(模板、更新、扩缩容、回滚等)_nginx_05
再更新一次,然后查看历史记录
k8s学习-deployment(模板、更新、扩缩容、回滚等)_学习_06

回滚到上一版本

发布应用时经常灰度发布,一旦发布出错,一般会回滚到上一版本
命令

kubectl rollout undo deploy nginx-deployment -n killer

结果
k8s学习-deployment(模板、更新、扩缩容、回滚等)_nginx_07

查看与回滚到指定版本

查看指定版本
命令

kubectl rollout history deploy nginx-deployment --revision=5

结果
k8s学习-deployment(模板、更新、扩缩容、回滚等)_nginx_08
回滚到指定版本
命令

kubectl rollout undo deploy nginx-deployment --to-revision=4 -n killer

结果
k8s学习-deployment(模板、更新、扩缩容、回滚等)_学习_09
可以看到,回滚后yaml也跟着改了

扩缩容

命令

kubectl scale --replicas=2 deploy nginx-deployment -n killer

结果
k8s学习-deployment(模板、更新、扩缩容、回滚等)_kubernetes_10

暂停和恢复

暂停
命令

kubectl rollout pause deploy nginx-deployment -n killer

结果
k8s学习-deployment(模板、更新、扩缩容、回滚等)_回滚_11
恢复
命令

kubectl rollout resume deploy nginx-deployment -n killer

结果
k8s学习-deployment(模板、更新、扩缩容、回滚等)_docker_12

删除

想要删除应用,就需要删除deploy,而不是pod,否则会一直创建新的Pod。
命令

kubectl delete deploy nginx-deployment -n killer

结果
k8s学习-deployment(模板、更新、扩缩容、回滚等)_学习_13

注意项

yaml的一些字段

部分yaml如下:

spec:
revisionHistoryLimit: 10
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
status:
availableReplicas: 3
conditions:
- lastTransitionTime: "2022-06-12T17:06:16Z"
lastUpdateTime: "2022-06-12T17:06:16Z"
message: Deployment has minimum availability.
reason: MinimumReplicasAvailable
status: "True"
type: Available
- lastTransitionTime: "2022-06-12T17:25:23Z"
lastUpdateTime: "2022-06-12T17:25:30Z"
message: ReplicaSet "nginx-deployment-786b576769" has successfully progressed.
reason: NewReplicaSetAvailable
status: "True"
type: Progressing
observedGeneration: 11
readyReplicas: 3
replicas: 3
updatedReplicas: 3
  • .spec.revisionHistoryLimit:设置保留RS旧的revision的个数,设置为0的话,不保留历史数据
  • .spec.minReadySeconds:可选参数,指定新创建的Pod在没有任何容器崩溃的情况下视为Ready最小的秒数,默认为0,即一旦被创建就视为可用。
  • .spec.strategy.type:更新deployment的方式,默认是RollingUpdate
  • RollingUpdate:滚动更新,可以指定maxSurge和maxUnavailable
  • maxUnavailable:指定在回滚或更新时最大不可用的Pod的数量,可选字段,默认25%,可以设置成数字或百分比,如果该值为0,那么maxSurge就不能0
  • maxSurge:可以超过期望值的最大Pod数,可选字段,默认为25%,可以设置成数字或百分比,如果该值为0,那么maxUnavailable不能为0
  • Recreate:重建,先删除旧的Pod,在创建新的Pod

回滚过程

回滚的时候根据前面提到的最大不可用Pod百分比进行灰度回滚,以副本数为2举例:

  1. 现rs 设置为1,启动一个Pod。
  2. 原rs设置为1,删除一个Pod。
  3. 现rs设置为2,再启动一个Pod。
  4. 原rs设置为0,删除Pod。

这样,可以保证至少有两个Pod在运行。

参考

​​k8s-deploy​​


举报

相关推荐

0 条评论