简要描述一个pod的创建过程
pod分为静态pod和动态pod
静态pod 是由 kubelet 管理的只在特定node上存在的pod;静态pod总是由kubelet创建的,并且只在kubelet所在的Node上运行。静态pod 不能通过 api-server来管理,无法和 RC,RS,Deployment或者 DaemonSet进行关联;并且 kubelet无法对静态pod 进行健康检查。
静态创建过程
静态pod是在特定文件目录定义好yaml,通过kubelet在启动进程时候增加启动参数,之后kubelet会隔一段时间去扫描特定目录下时候有pod配置文件生成,其中--config自定特定目录 ,--file-check-frequency指定扫描间隔,默认为20S。
动态pod创建过程
kubelet通过apiserver,利用etcd的watch加list机制,通过消息订阅的方式,etcd提供的接口可以参考专栏etcd的描述,etcd有pod的操作,将会被监听到,之后完成pod的创建
pod的调度过程
在kubelet监听etcd的过程中,可以获取到pod被分配到哪个特定的node,作为分布式系统,每一个slave节点启动的kubelet进程发现有pod绑定到自身的时候,就会启动后续的创建动作,這也说明了为什么静态pod不能指定节点,而必须通过自身node的kubellet进程去监听and创建。
pod的调度过程除了自身的调度算法外,还支持其他的调度策略,包括node seletctor,nodeaffnity,podaffnity,pod驱逐。
自身调度算法是kube scheduler模块来实现的,它提供的默认调度流程分为2部分,第一预选调度过程,第二确定最优节点
预选调度策略
之后,kubelet负责完成pod的创建过程。