一,Deployment介绍
概述
Deployment是k8s中最常用的资源对象,它为ReplicaSet和Pod的创建提供了一种声明式的定义方法。
在Deployment对象中描述一个期望的状态,Deployment控制器就会按照一定的控制速率把实际状态改成期望状态。
通过定义一个Deployment控制器,会创建一个新的ReplicaSet控制器,通过ReplicaSet创建pod,删除Deployment控制器,也会删除Deployment控制器下对应的ReplicaSet控制器和pod资源。
优点
使用Deployment而不直接创建ReplicaSet,是因为Deployment对象拥有许多ReplicaSet没有的特性,例如滚动升级、金丝雀发布、蓝绿部署和回滚。
理解
Deployment控制器是建立在ReplicaSet之上的一个控制器,可以管理多个ReplicaSet,每次更新镜像版本,都会生成一个新的ReplicaSet,把旧的ReplicaSet替换掉,多个rs同时存在,但是只有一个ReplicaSet运行。
功能
1、创建ReplicaSet和Pod
2、滚动升级(不停止旧服务的状态下升级)和回滚应用(将应用回滚到之前的版本)
3、平滑地扩容和缩容
4、暂停和继续Deployment
Deploy文件编写技巧
kubectl explain deployment[deploy]
扩容/缩容
基本的办法:直接更改yaml文件内的replicas
的值。
调大,扩容;调小,缩容。
二,Deployment命令
查看deploy的[deploy名]的历史版本:
kubectl rollout history deployment [deploy名]
回滚到第1个版本( 也是初始版本 ):
kubectl rollout undo deployment/[deploy名] --to-revision=1
三,自定义滚动更新策略
maxSurge和maxUnavailable用来控制滚动更新的取值范围
【数值】:
- maxUnavailable: [0, 副本数]
- maxSurge: [0, 副本数]
注意:两者不能同时为0。
【比例】:
- maxUnavailable: [0%, 100%] 向下取整,比如10个副本,5%的话==0.5个,但计算按照0个;
- maxSurge: [0%, 100%] 向上取整,比如10个副本,5%的话==0.5个,但计算按照1个;
注意:两者不能同时为0。
【建议配置】
- maxUnavailable == 0
- maxSurge == 1
这是我们生产环境提供给用户的默认配置。即“一上一下,先上后下”最平滑原则。
【总结】
(1)maxUnavailable:和期望的副本数比,不可用副本数最大比例(或最大值),这个值越小,越能保证服务稳定,更新越平滑;
maxSurge:和期望的副本数比,超过期望副本数最大比例(或最大值),这个值调的越大,副本更新速度越快。
(2)recreate这种更新策略,会把之前的所有pod都删除,再创建新的pod,风险很大