干货!K8S之5种控制器详解
文章目录一、概述二、有状态、无状态服务区别三、Deployment控制器四、SatefulSet控制器五、DaemonSet控制器六、Job控制器七、CronJob 控制器一、概述Pod控制器:又称之为工作负载,由master的kube-contriller-manager组件提供,常见的有:DeploymentStatefulSetDaemonSetJobCronJobPod对象的管理通常是有某
一、概述
Pod控制器:又称之为工作负载,由master的kube-contriller-manager组件提供,常见的有:
- Deployment
- StatefulSet
- DaemonSet
- Job
- CronJob
Pod对象的管理通常是有某种控制器的特定对象来实现的,包括其创建、删除及重新调度等。
二、有状态、无状态服务区别
无状态:
1)deployment 认为所有的pod都是一样的
2)不用考虑顺序的要求
3)不用考虑在哪个node节点上运行
4)可以随意扩容和缩容
有状态
1)实例之间有差别,每个实例都有自己的独特性,元数据不同,例如etcd,zookeeper
2)实例之间不对等的关系,以及依靠外部存储的应用
三、Deployment控制器
- 部署无状态应用
- 管理Pod和ReplicaSet
- 具有上线部署、副本设定、滚动升级、回滚等功能
- 提供声明式更新,例如只更新一个新的Image
- 应用场景:web服务
更新策略:
-
滚动更新:旧控制器的Pod数量不断减少,同时新控制器的Pod不断增加,具有以下两个属性:
maxSurge:最多扩容内容是原本的百分之多少 maxUnavailabe:最多缩减内容是原本的百分之多少
-
灰度发布:在第一批新的Pod资源创建完成后立即停止更新,然后筛选小部分用户的请求路由至新版本的Pod应用,并持续观察其是否能够稳定地按期望的方式运行。确定没有问题就继续滚动更新,否则立即回滚更新操作。
四、SatefulSet控制器
- 部署有状态应用
- kind:service
- 解决Pod独立生命周期,保持Pod启动顺序和唯一性
- 稳定,唯一的网络标识符,持久存储(例如:etcd配置文件,节点地址发生变化,将无法使用)
- 有序,优雅的部署和扩展、删除和终止(例如:mysql主从关系,先启动主,再启动从),有序,滚动更新
- 应用场景:数据库
常规service和无头服务区别
- service:一组Pod访问策略,提供cluster-IP群集之间通讯,还提供负载均衡和服务发现。
- Headless service 无头服务,不需要cluster-IP,直接绑定具体的Pod的IP
官方案例:https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/
五、DaemonSet控制器
- 在每一个Node上运行一个Pod
- 新加入的Node也同样会自动运行一个Pod
- 应用场景:Agent
- 官方案例(监控)
https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/
六、Job控制器
- Job分为普通任务(Job)和定时任务(CronJob)
- 一次性执行
- 应用场景:离线数据处理,视频解码等业务
官方案例:https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/
七、CronJob 控制器
- 周期性任务,像Linux的Crontab一样。
- 应用场景:通知,备份
官方案例:https://kubernetes.io/docs/tasks/job/automated-tasks-with-cron-jobs/
更多推荐
所有评论(0)