Deployment 控制器
k8s在deployment的控制器相关介绍
一、概述
·Deployment是ReplicaSet的高级别抽象,ReplicaSet控制器有的功能Deployment全部具备,ReplicaSet没有的Deployment也具备比如,它提供了滚动升级和回滚的功能。Deployment是控制多个ReplicaSet,从而可以实现无缝升级和回滚。
二、特点
- 选择器:ReplicaSet使用标签选择器来选择要管理的Pod副本。
- 伸缩性:Deployment高级控制器可以根据负载自动伸缩容器数量,以满足应用程序的需求。
- 自我修复:Deployment高级控制器可以监控容器的健康状况,并在容器出现故障时自动重启或替换容器。
- 负载均衡:Deployment高级控制器可以通过负载均衡算法,将请求分发到不同的容器实例上,以提高应用程序的性能和可用性。
- 版本控制:Deployment可以指定多个ReplicaSet,每个ReplicaSet可以控制不同版本的Pod,从而实现灰度发布和回滚。
- 声明式:指直接修改资源清单yaml文件,然后通过 apply ,就可以更改资源。
三、工作原理
·Deployment控制器建立在ReplicaSet控制器之上,管理多个ReplicaSet,每次更新镜像版本,都会生成一个新的ReplicaSet,把旧的ReplicaSet替换掉,多个ReplicaSet同时存在,但只运行一个ReplicaSet。
如果ReplicaSet V2版本更新上去存在问题,还可以回滚,Deployment建立在ReplicaSet之上,多个ReplicaSet组成一个Deployment,但只有一个ReplicaSet处于活跃状态。
四、Deployment YAML编写及参数解释
#使用explain命令查看定义 可以查看 deployment控制器字段说明:
kubectl explain deployment
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: demo-deployment-1
labels:
env: uat
spec:
replicas: 3
minReadySeconds: 10 # 更新场景,等待时间,如果没有设置K8S会假设该容器启动起来后就提供服务了
paused: # 暂停,当更新Pod时,先暂停,而不是立马更新
progressDeadlineSeconds: 60 # 更新场景,等待时间超过此值,状态标记False,并说明原因,但是它并不会阻止 Deployment 继续进行卡住后面的操作
strategy:
rollingUpdate: # 滚动更新,定义滚动更新方式,也就是pod能多几个,少几个
maxSurge: 20% # 允许更新中,最多超过Pod数值
maxUnavailable: 20% # 允许更新中,最多允许几个不可用
selector:
matchLabels:
app: demo-nginx
template:
metadata:
labels:
app: demo-nginx
spec:
containers:
- name: demo-nginx
image: nginx
imagePullPolicy: IfNotPresent
startupProbe: # 启动探测
tcpSocket:
port: 80
livenessProbe: # 存活探测
httpGet:
port: 80
path: /index.html
readinessProbe: # 就绪探测
httpGet:
port: 80
path: "/index.html"
核心参数详解
ospec.minReadySeconds:更新场景,等待时间,如果没有设置K8S会假设该容器启动起来后就提供服务了。
ospec.paused: 暂停,当更新Pod时,先暂停,而不是立马更新,后面金丝雀发布要用到
ospec.progressDeadlineSeconds:更新场景,等待时间超过此值,状态标记False,并说明原因,但是它并不会阻止 Deployment 继续进行卡住后面的操作
ospec.strategy.rollingUpdate:滚动更新,定义滚动更新方式,也就是pod能多几个,少几个
ospec.strategy.rollingUpdate.maxSurge:指定在更新期间可以创建的新Pod的最大数量。例如,如果maxSurge设置为1,而Deployment中有3个Pod,则在更新期间可以创建4个Pod,其中3个是旧的Pod,1个是新的Pod。
ospec.strategy.rollingUpdate.maxUnavailable:指定在更新期间可以同时停止的旧Pod的最大数量。例如,如果maxUnavailable设置为1,而Deployment中有3个Pod,则在更新期间可以停止2个Pod,其中1个是旧的Pod,1个是新的Pod。
五、Deployment更新策略:
·Deployment目前支持两种更新策略
-
oRecreate:重建式更新,把Pod全部删除,在重新创建,风险很大,不建议使用
-
orollingUpdate:滚动式更新,批量替换更新,平滑升级,用户无感知
六、Deployment针对WEB站点滚动更新
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-deployment
labels:
env: uat
spec:
replicas: 5
minReadySeconds: 10
progressDeadlineSeconds: 60
strategy:
rollingUpdate:
maxSurge: 30% # 5*30%=1.5(~=2), 2+5=7,更新期间最多创建7个Pod
maxUnavailable: 20% # 5*20%=1, 1-5=4,更新期间最多停止4个Pod
selector:
matchLabels:
app: web-nginx
template:
metadata:
labels:
app: web-nginx
spec:
containers:
- name: web-nginx
image: web:v2 # 版本更新
imagePullPolicy: IfNotPresent
startupProbe:
tcpSocket:
port: 80
livenessProbe:
httpGet:
port: 80
path: /index.html
readinessProbe:
httpGet:
port: 80
path: "/index.html"
#更新命令
kubectl apply -f web-deployment.yaml
#查看历史版本
kubectl rollout history deployment web-deployment
#回滚版本
kubectl rollout undo deployment web-deployment --to-revision=1
更多推荐
所有评论(0)