1.2.3. 控制器

控制器有个期望状态,当前状态,控制器控制当前状态到期望状态。

1.2.3.1. 控制器模式

一个控制器至少追踪一种类型的k8s资源,这些对象都有一个spec字段标识对象的期望状态,改资源控制器负责其当前状态接近期望状态。

1.2.3.1.1. 通过api服务器来控制

job控制器是一个k8s内置的控制器,通过和集群的api服务器交互来管理状态。 job控制器就是通知api服务器来创建和移除pod,控制面其他组件跟进新的消息作出梵音(调度并运行pod)并且完成工作。

1.2.3.1.2. 直接控制

相比job控制器,有些控制器需要对集群外部的一些东西进行修改,比如如果你使用一个控制回路保证集群中有足够的节点,节点不够的时候自动调用云厂商创建新的节点。 对应的控制器需要从api服务器获取自身需要的状态信息,然后直接和外部系统进行通信,并使得当前状态接近期望状态。

控制器做出了一些变更以使得事物更接近你的期望状态, 之后将当前状态报告给集群的 API 服务器。 其他控制回路可以观测到所汇报的数据的这种变化并采取其各自的行动。

1.2.3.2. 设计

k8s内部有很多控制器,针对资源类型设计多种控制器,deployment的控制器,管理deployment创建的pod。 job控制器管理job创建pod。