Kuberbetets(K8S)—— Day 4 K8S Pod及其控制器
本章内容:KubernetesPod及其控制器
学习途径:尚硅谷Kubernetes教程(BIlibili平台)
Pod:由一个或者多个容器组成的可被调度的最小单位。其里面的一个或者多个容器共享整个Pod的存储、网络等资源(CPU/内存除外)。组内成员可以通过localhost进行互相访问;
K8S中Pod的分类:
自主式Pod:自主式Pod不受控制器控制,也就是pod自己去控制自己,防止pod被控制器杀死。
由控制器管理的Pod:Pod的创建、删除、运行、维护等操作都由控制器来统一进行控制;
控制器:
Replication controller:用来确保容器应用的副本数始终保持在用户定义的副本数,即使有容器异常退出也会重新创建新的Pod来代替,同样多出的Pod也会被回收;
ReplicaSet:基本功能同Replication controller相同,但是ReplicaSet支持几何式的selector,也就是支持组管理,可以进行批量操作;
Deployment:虽然ReplicaSet支持独立运行,但是一般还是建议使用Deployment来对ReplicaSet进行维护,来对其进行自动管理。这样就无需担心他的某些不兼容问题(例如:RS不支持rolling-update),Depolyment虽然可以进行自动管理,但是不能创建Pod;
Horizontal Pod Autoscaling:仅适用于ReplicaSet和Deployment,V1版本中仅支持根据Pod的CPU使用情况来进行扩容,在Vlalpha版本中,支持根据内存或者自定义的规则进行metric扩缩容,但是目前还不稳定;HPA会检测目标Pod,如果CPU利用率达到了警戒值(例如CPU使用率达到了85%),就会进行自动扩容,当达到最大限度(预设:max:10,min:2)或CPU使用率低于警戒值,会自动停止扩容。同样的缩容也一样;
以上控制器都是为无状态服务问题而进行设计的,
StatefulSet:其应用场景:
- 稳定的持久化存储,即Pod重新调用后还能正常访问到相同的持久化数据,基于PVC实现;
- 稳定的网络标志:即Pod重新调度后,其PodName和host那么不变,基于Headless Service实现;
- 有序部署,有序扩张,即Pod是有顺序的,再部署扩展的时候要依据定义的顺序依次进行(在下一个Pod运行之前,其前面所有的Pod都在running状态或者ready状态,基于init containers实现);
- 有序收缩,有序深处;
DaemonSet:确保全部Node上(或者一些)运行一个Pod副本,当Node加入集群是也会为其自动新增一个Pod,当有Node从集群中移除时,这些Pod也会被回收,删除DaemonSet将会删除其所创建的所有Pod,典型用法:
- 运行集群存储Daemon,离去在每个Node上运行glusterd、Ceph
- 在每个Node上运行日志收集Daemon,例如:fluented、log stash
- 在每一份Node上运行监控Daemon,例如Dromentheus、Node Exporter
Job:负责批处理任务,仅执行一侧任务,他保证批处理的任务一个或者多个成功结束;
Cron Job:管理基于事件的Job,在给定的时间运行一次,周期性的运行;