控制器
控制器的分类
- Deployment
- StatefulSet
- DaemonSet
- Job
- CronJob
1 | 1. 控制器也称为 工作负载,它的作用是管理POD |
Pod 与 controllers的关系
- controllers:在集群上管理和运行容器的对象
- 通过label-selector相关联
- Pod通过控制器实现应用的运维,如伸缩,升级等
无状态 与 有状态 服务区别
- 无状态: deployment
- 认为所有的POD都是一样的
- 不用考虑顺序的要求
- 也不用考虑在哪个Node运行
- 随意扩容/缩容
- 有状态: statefulset
- 数据不完全一致
- 节点之间存在关系
- 这种实力之间不对等的关系,以及依靠外部存储的应用。成为有状态应用
- 部署有状态应用,解决POD独立生命周期,保持Pod启动顺序和唯一性
- 稳定,唯一的网络标识符,持久存储
- 有序,优雅的部署和扩展、删除和终止
- 有序,滚动更新
- 应用场景:数据库
部署有状态应用
Headless Service
- 常规 Service:一组POD的访问策略,提供负载均衡服务发现
- Headless Service: 不需要Cluster-IP,他会直接绑定到PODIP
常规 Service 查看
1 | [root@k8s-master1 demo]# kubectl get pods,svc,ep |
Headless Service
1 | [root@k8s-master1 demo]# vim headless.yaml |
部署 Coredns 并测试
1 | [root@k8s-master1 demo]# kubectl get pods -n kube-system |
创建 StatefulSet
1 | [root@k8s-master1 demo]# kubectl delete -f . |
1 | [root@k8s-master1 demo]# kubectl get pods,svc |
唯一的网络标识
1 | # 固定的标号 从0开始 删除的时候也是根据这个标号 |
1 | [root@k8s-master1 demo]# kubectl get pods |
1 | # 即通过dns来找到POD |
StatefulSet 总结
- StatefulSet 与 Deployment区别: 有身份的
- 身份三要素:
- 域名
- 主机名
- 存储(PVC)
1 | statefulset 的 POD 名字 == 主机名 |
DaemonSet(部署守护进程)
- DaemonSet 确保全部(或者某些)节点上运行一个 Pod 的副本。当有节点加入集群时,也会为他们新增一个 Pod 。
- 当有节点从集群移除时,这些 Pod 也会被回收。删除 DaemonSet 将会删除它创建的所有 Pod。
- 使用 DaemonSet 的一些典型用法:
- 运行集群存储 daemon,例如在每个节点上运行 glusterd、ceph。
- 在每个节点上运行日志收集 daemon,例如fluentd、logstash。
- 在每个节点上运行监控 daemon,例如 Prometheus Node Exporter、collectd、Datadog 代理、New Relic 代理,或 Ganglia gmond。
1 | 1. 在每一个Node上运行一个Pod |
1 | [root@k8s-master1 demo]# vim ds.yaml |
1 | [root@k8s-master1 demo]# kubectl get pods -o wide |
1 | # 添加新的node 也同样跑起来 |
Job与CronJob(离线业务)
- Job 分为 普通任务(Job) 和 定时任务 (CronJob)
- 一次性执行
应用场景: 离线数据处理,视频解码等业务
Job
1 | # 计算任务 |
1 | spec.backoffLimit用于设置Job的容错次数,默认值为6。 |
CronJob
- 定时任务,像Linux的Crontab一样
- 应用场景: 通知,备份
- crontab的格式如下:
分 时 日 月 周 要运行的命令: 第1列分钟0~59 第2列小时0~23) 第3列日1~31 第4列月1~12 第5列星期0~7(0和7表示星期天) 第6列要运行的命令
1 | [root@k8s-master1 demo]# vim cronjob.yaml |
1 | [root@k8s-master1 demo]# kubectl get cronjob |
1 | # 删除任务 |
总结
- 控制器实现K8S编排能力
- Deployment: 无状态部署
- Statefulset: 有状态部署 访问方式:DNS记录 etcd1,etcd2… 还有 存储
- DaemonSet: 守护进程部署
- Job & CronJob: 批处理 和 定时任务