2.3 控制器示例

以上我们从一个简易冰箱的进化过程中,了解了控制器产生的意义、扮演的角色,以及实现的方式。现在我们回到Kubernetes集群。

Kubernetes集群让大量的控制器得以实现,而且在可以预见的未来,具有新功能的控制器会不断出现,而一些旧的控制器也会被逐渐淘汰。

以目前的情况来说,我们比较常用的控制器有Pod控制器、Deployment控制器、Service控制器、Route控制器、ReplicaSet控制器等。这些控制器一部分是由Kube Controller Manager这个管理器实现和管理的,另一部分则是由Cloud Controller Manager实现的,比如Service(服务)控制器和Route(路由)控制器。

之所以会出现Cloud Controller Manager,是因为在不同的云环境中,由于云厂商和环境的不同,部分控制器的实现有较大的差别。这类控制器被划分出来,由云厂商各自基于Cloud Controller Manager框架自主实现。

我们以阿里云Kubernetes集群Cloud Controller Manager实现的服务控制器和路由控制器为例,简单说明Kubernetes控制器的工作原理。

2.3.1 服务控制器

首先,用户请求API Server创建一个Load Balancer类型的服务,API Server收到请求并把这个服务的详细信息写入Etcd数据库。

其次,这个变化被服务控制器“观察”到了。

最后,服务控制器理解Load Balancer类型的服务。因为这类服务除了存放在Etcd内的服务资源外,还需要一个SLB作为入口,和若干Endpoint作为后端。所以服务控制器会分别请求云接口和API Server来创建SLB实例和Endpoint资源,如图2-9所示。

图2-9 服务控制器系统

2.3.2 路由控制器

如图2-10所示,当一个新节点被加入集群的时候,集群需要在VPC路由表里增加一条路由项,来搭建这个新加节点的Pod网络主干道。

增加路由项这件事情,就是由路由控制器来做的。路由控制器完成这件事情的流程,与上面服务控制器的处理流程非常类似,这里不再赘述。

图2-10 路由控制器系统