Pod的分类:自主式Pod和控制器管理的Pod
pod的特点:
1.一个pod中可以由多个容器,但是只要运行pod,一个叫pause的容器就会被启动
2.pod中的其他容器可以共享pause这个容器的网络站和存储,也代表在同一个pod里,容器的端口不能冲突
控制器管理的Pod
多种控制器介绍:
①RelicationController:用来确保容器应用的副本数始终保持在用户定义的副本数,即如果有容器异常退出,会自动创建新的Pod来替代;而如果异常多出来的容器也会自动吸收。
在新版本的kubenetes中建议使用ReplicaSet来取代RelicationController
②ReplicaSet:跟RelicationController没有本质的不同,只是名字不一样,并且ReplicaSet支持集合式的selector(因为创建Pod时,会被打标签),但是RS不支持滚动更新,Deployment支持,并且还可以回滚
③Deployment:虽然ReplicaSet可以独立使用,但是一般建议使用Deployment来自动管理ReplicaSet,这样就无需担心跟其他机制的不兼容问题(比如ReplicaSet不支持rolling-update,但Deployment支持),
Deployment创建时,会去创建一个RS,当滚动更新后,会有一个新的RS,老的RS就会停用,但是回滚时,老的RS会重新启用
HPA:仅适用于Deployment和ReplicaSet,在V1版本中仅支持根据Pod的CPU利用率扩容,在vlalpha版本中,支持根据内存和用户自定义的metric扩缩容
下图意思是,HPA会去监控Pod的资源利用率,当利用率大于80%时,会去新建新的Pod,直到达到最大值,当新建到第三个时,利用率达不到80%了,就不会去新建了
StatefulSet:是为了解决有状态服务的问题(对应Deployment和ReplicaSet是为无状态服务而设计),其应用场景包括:
①稳定的持久化储存,即Pod重新调度后还是能访问到相同的持久化数据,基于PVC来实现
②稳定的网络标志,即Pod重新调度后其Podname和Hostname不变,基于Headless Service来(即没有Cluster IP 的Service)实现
③有序部署,有序扩展,即Pod是有顺序的,在部署或者扩展的时候要依据定义的顺序依次进行(即从0到N-1,在下一个Pod运行之前的Pod都必须是Running和Ready状态),基于init containers实现
④有序收缩,有序删除(即从N-1到0)
DaemonSet:确保全部(或者一些)Node上运行一个Pod的副本,当有Node加入集群时,也会为它们新增一个Pod,当有Node从集群移除时,这些Pod也会被回收,删除DaemonSet将会删除它创建的所有Pod
使用DaemonSet的一些典型用法:
①运行集群存储daemon,例如在每个Node上运行glusterd,ceph
②在每个Node上运行日志收集daemon,例如fluentd,logstash
③在每个Node上运行监控daemon,例如Prometheus,Node Exporter
Job:是负责批处理任务,即仅执行一次的任务,它保证批处理任务的一个或者多个Pod成功结束
Cron Job管理基于时间的的Job,即:在给定时间点只运行一次
周期性的在给定时间点运行
服务发现
service收集Pod是通过标签去选择到的,service有自己的一个IP+端口,那个客户端就能访问到service,间接访问到这些Pod,并且有个轮询机制