一.Pod与controllers的关系
- controllers:在集群上管理和运行容器的对象
- 通过label-selector相关联
- Pod通过控制器实现应用的运维,如伸缩,升级等
二.Deployment
- 部署无状态应用
- 管理Pod和ReplicaSet
- 具有上线部署、副本设定、滚动升级、回滚等功能
-
提供声明式更新,例如只更新一个新的Image
应用场景:Web服务,微服务
创建Deployment:
# kubectl apply -f nginx-deployment.yaml
查看Deployment信息:
#kubectl get deployments
上图中涉及到数量解释如下:
READY:0/3 当前准备好的副本数量0,期望副本数3 (即Deployment里面定义的replicas)
UP-TO-DATE: 最新版本副本数量,在滚动升级中,有多少副本已经升级成功
AVAILABLE:当前集群可用的副本数量,及存活的Pod数量
最终结果如下:
查看副本数量:
# kubectl get rs
查看Deployment控制pod水平拓展过程
# kubectl describe deployment nginx-deployment
三.StatefulSet
- 部署有状态应用
- 每个节点都有固定身份ID
- 集群的规模比较固定
-
如果磁盘损坏,集群内的某个节点无法运行
应用场景:mysql集群,MongoDB集群,Zookeeper集群
四.DaemonSet
- 在每一个Node上运行一个Pod
-
新加入的Node也同样会自动运行一个Pod
应用场景:zabbix agent,saltstack agent
创建DaemonSet:
# kubectl apply -f agent.yaml
查看daemonset信息
# kubectl get daemonset
五.Job
- 普通任务(Job)
一次性执行
官方案例:https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/
应用场景:离线数据处理
部署perl
# kubectl apply -f https://k8s.io/examples/controllers/job.yaml
查看job
#kubectl get jobs
查看日志:
# kubectl logs pi-lzsh6
定时任务(CronJob)
像Linux的Crontab一样
官方案例:https://kubernetes.io/docs/tasks/job/automated-tasks-with-cron-jobs/
应用场景:通知,备份
部署CronJob:
# kubectl create -f https://k8s.io/examples/application/job/cronjob.yaml
查看pod
# kubectl get pods
查看日志:
六.控制器小结
- Deployment:无状态部署
- StatefulSet:有状态部署
- DaemonSet:守护进程部署
- Job & CronJob:批处理
您可以选择一种方式赞助本站
支付宝扫一扫赞助
微信钱包扫描赞助
赏