常用工作负载控制器
工作负载控制器是什么
工作负载控制器(Workload Controllers)是K8s的一个抽象概念,用于更高级层次对象,部署和管理Pod。
常用工作负载控制器:
- 
Deployment : 无状态应用部署
 - 
StatefulSet : 有状态应用部署
 - 
DaemonSet : 确保所有Node运行同一个Pod
 - 
Job : 一次性任务
 - 
Cronjob : 定时任务
 
控制器的作用:
- 
管理Pod对象
 - 
使用标签与Pod关联
 - 
控制器实现了Pod的运维,例如滚动更新、伸缩、副本管理、维护Pod状态等。
 

Deployment
Deployment:介绍
Deployment的功能:
- 
管理Pod和ReplicaSet
 - 
具有上线部署、副本设定、滚动升级、回滚等功能
 - 
提供声明式更新,例如只更新一个新的Image 应用场景:网站、API、微服务
 
Deployment:使用流程

Deployment:部署
第一步:部署镜像
kubectl apply -f xxx.yaml  | 
vim web-deployment.yaml
apiVersion: apps/v1  | 
发布并访问
kubectl apply -f web-deployment.yaml  | 
Deployment:滚动升级
第二步:应用升级(更新镜像三种方式)
kubectl apply -f xxx.yaml  | 
vim web-deployment.yaml
apiVersion: apps/v1  | 

滚动升级:K8s对Pod升级的默认策略,通过使 用新版本Pod逐步更新旧版本Pod,实现零停机 发布,用户无感知。
滚动升级在K8s中的实现:
- 
1个Deployment
 - 
2个ReplicaSet
 

- 
maxSurge:滚动更新过程中最大Pod副本数,确保在更新时启动的Pod数 量比期望(replicas)Pod数量最大多出25%
 - 
maxUnavailable:滚动更新过程中最大不可用Pod副本数,确保在更新时 最大25% Pod数量不可用,即确保75% Pod数量是可用状态。
 

Deployment:水平扩缩容
第三步:水平扩缩容(启动多实例,提高并发)
- 
修改yaml里replicas值,再apply
 - 
kubectl scale deployment web --replicas=10
 
注:replicas参数控制Pod副本数量

Deployment:回滚
第四步:回滚(发布失败恢复正常版本)
kubectl rollout history deployment/web # 查看历史发布版本  | 
注:回滚是重新部署某一次部署时的状态,即当时版本所有配置
kubectl set image deploy web-deployment web=nginx:1.19 --record #升级  | 
Deployment:删除
最后,项目下线:
kubectl delete deploy/web  | 
Deployment:ReplicaSet
ReplicaSet控制器用途:
- 
Pod副本数量管理,不断对比当前Pod数量与期望Pod数量
 - 
Deployment每次发布都会创建一个RS作为记录,用于实现回滚
 
kubectl get rs #查看RS记录  | 

DaemonSet
DaemonSet功能:
- 
在每一个Node上运行一个Pod
 - 
新加入的Node也同样会自动运行一个Pod
 
应用场景:网络插件(kube-proxy、calico)、其他Agent

示例:部署一个日志采集程序
vim daemonset.yaml
apiVersion: apps/v1  | 
验证查看
kubectl apply -f daemonset.yaml  | 
Job
Job分为普通任务(Job)和定时任务(CronJob)
- 一次性执行
 
应用场景:离线数据处理,视频解码等业务
vim job.yaml
apiVersion: batch/v1  | 
查看
kubectl apply -f job.yaml  | 
CronJob
CronJob用于实现定时任务,像Linux的Crontab一样。
- 定时任务 应用场景:通知,备份
 
vim cronjob.yaml
apiVersion: batch/v1beta1  | 
查看
kubectl apply -f cronjob.yaml  | 



