了解控制器做了什么以及如何做的
Replication管理器
ReplicationController的操作可以理解为一个无限循环,每次循环,控制器都会查找符合其pod选择器定义的pod的数量,并且将该数值和期望的复制集(replica)数量作比较。
启动ReplicationController资源的控制器叫作Replication管理器。
当运行pod实例太少,ReplicationController会运行额外的实例,但它自己实际上不会去运行pod。它会创建新的pod清单,发布到API服务器,让调度器以及kubelet来做调度工作并运行pod。
Replication管理器通过API服务器操纵pod API对象来完成其它工作。所有控制器就是这样运作的。
ReplicaSet、DaemonSet以及Job控制器
ReplicaSet控制器基本上做了和前面描述的Replication管理器一样的事情。DaemonSet以及Job控制器比较相似,从它们各自资源集中定义的Pod模板创建pod资源。与replication管理器相似,这些控制器不会运行pod,而是将pod定义到发布API服务器,让Kubelet创建容器并运行。
Deployment控制器
Deployment控制器负责使deploymnet的实际状态与对应Deployment API对象的期望状态同步。
每次Deployment对象修改后(如果修改会影响到部署的pod),Deployment控制器都会滚动升级到新的版本。通过创建一个ReplicaSet,直到旧pod被新的代替。并不会直接创建任何pod。
StatefulSet控制器
StatefulSet控制器,类似于ReplicaSet控制器以及其他相关控制器,根据StatefulSet资源定义创建、管理、删除pod。其他的控制器只管理pod,而StatefulSet控制器会初始化并管理每个pod实例的持久卷声明字段。
Node控制器
Node控制器管理Node资源,描述了集群工作节点。其中,Node控制器使节点对象列表与集群中实际运行的机器列表保持同步。同时监控每个节点的健康状态,删除不可达节点的pod。
Node控制器不是唯一对Node对象做更改的组件。Kubelet也可以做更改,那么显然可以由用户通过REST API调用做更改。
Service控制器
Service控制器就是用来在LoadBalancer类型服务被创建或删除时,从基础设施服务请求、释放负载均衡器的。
Endpoint控制器
Service不会直接连接到pod,而是包含一个端点列表(IP和端口),列表要么是手动,要么是根据Service定义的pod选择器自动创建、更新。Endpoint控制器作为活动的组件,定期根据匹配标签选择器的pod的IP、端口更新端口列表。
控制器同时监听了Service和pod。当Service被添加、修改,或者pod被添加、修改或删除时,控制器会选中匹配Service的pod选择器的pod,或将其IP和端口添加到Endpoint资源中。请记住,Endpoint对象是个独立的对象,所以当需要的时候控制器会创建它。同样地,当删除Service时,Endpoint对象也会被删除。
Namespace控制器
当删除一个Namespace资源时,该命名空间里的所有资源都会被删除。这就是Namespace控制器做的事情。当收到删除Namespace对象的通知时,控制器通过API服务器删除所有归属该命名空间的资源。
PersistentVolume控制器
一旦用户创建了一个持久卷声明,kubernetes必须找到一个合适的持久卷同时将其和声明绑定。这些由持久卷控制器实现。
对于一个持久卷声明,控制器为声明查找最佳匹配项,通过选择匹配声明中的访问模式,并且声明的容量大于需求的容量的最小持久卷。实现方法是保存一份有序的持久卷列表,对于每种访问模式按照容量升序排列,返回列表的第一个卷,
当用户删除持久卷声明时,会解绑卷,然后根据卷的回收策略进行回收(原样保留、删除或清空)。