控制器
控制器的分类
- 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: 批处理 和 定时任务
 
