Controller Manager工作原理

简介: 【7月更文挑战第3天】Controller Manager是Kubernetes核心组件,监控集群资源状态变化,维持期望状态。

Controller Manager通过API Server提供的(List-Watch)接口实时监控集群中特定资源的状态变化,当发生各种故障导致某资源对象的状态发生变化时,Controller会尝试将其状态调整为期望的状态。

Controller Manager的内部包含Replication Controller、Node Controller、ResourceQuota Controller、Namespace Controller、Service Account Controller、Token Controller、Service Controller及Endpoint Controller共8种Controller,每种Controller都负责一种特定资源的控制流程,Controller Manager是这些Controller的核心管理者。

1.Replication Controller

Replication Controller的核心作用是确保任何时候集群中某个与RC关联的Pod副本数量都保持预设值。

(1)确保在当前集群中有且仅有N个Pod实例,N是在RC中定义的Pod副本数量。

(2)通过调整RC的spec.replicas属性值来实现系统扩容或者缩容。

(3)通过改变RC中的Pod模板(主要是镜像版本)来实现系统的滚动升级。


Replication Controller的典型使用场景如下。

(1)重新调度(Rescheduling)。

不管是想运行1个副本还是1000个副本,副本控制器都能确保指定数量的副本存在于集群中,即使发生节点故障或Pod副本被终止运行等意外状况。

(2)弹性伸缩(Scaling)。

手动或者通过自动扩容代理修改副本控制器的spec.replicas属性值,非常容易实现增加或减少副本的数量。

(3)滚动更新(Rolling Updates)。

副本控制器被设计成通过逐个替换Pod的方式来辅助服务的滚动更新。

2.Node Controller

kubelet进程在启动时通过API Server注册自身的节点信息,并定时向API Server汇报状态信息,API Server在接收到这些信息后,会将它们更新到etcd中。

节点健康状况包含“就绪”(True)、“未就绪”(False)和“未知”(Unknown)3种。

Node Controller通过API Server实时获取Node的相关信息,实现管理和监控集群中的各个Node的相关控制功能,Node Controller的核心工作流程如下。


(1)Controller Manager启动阶段。

如果设置了--cluster-cidr参数,那么为每个没有设置Spec.PodCIDR的Node都生成一个CIDR地址,并用该CIDR地址设置节点的Spec.PodCIDR属性,这样做的目的是防止不同节点的CIDR地址发生冲突。

(2)逐个读取Node信息。

多次尝试修改nodeStatusMap中的节点状态信息,将该节点信息和Node Controller的nodeStatusMap中保存的节点信息进行比较。如果判断出没有收到kubelet发送的节点信息、第1次收到节点kubelet发送的节点信息,或在该处理过程中节点状态变成非“健康”状态,则在nodeStatusMap中保存该节点的状态信息,并用Node Controller所在节点的系统时间作为探测时间和节点状态变化时间。

如果判断出在指定时间内收到新的节点信息,且节点状态发生变化,则在nodeStatusMap中保存该节点的状态信息,并用Node Controller所在节点的系统时间作为探测时间和节点状态变化时间。如果判断出在指定时间内收到新的节点信息,但节点状态没发生变化,则在nodeStatusMap中保存该节点的状态信息,并用Node Controller所在节点的系统时间作为探测时间,将上次节点信息中的节点状态变化时间作为该节点的状态变化时间。

(3)逐个读取节点信息。

如果节点状态变为非“就绪”状态,则将节点加入待删除队列,否则将节点从该队列中删除。如果节点状态为非“就绪”状态,且系统指定了Cloud Provider,则Node Controller调用Cloud Provider查看节点,若发现节点故障,则删除etcd中的节点信息,并删除和该节点相关的Pod等资源的信息。

3.ResourceQuota Controller

作为完备的企业级的容器集群管理平台,Kubernetes也提供了ResourceQuota Controller(资源配额管理)这一高级功能,资源配额管理能够确保指定的资源对象在任何时候都不会超量占用系统物理资源,避免了由于某些业务进程的设计或实现的缺陷导致整个系统运行紊乱甚至意外宕机,对整个集群的平稳运行和稳定性具有非常重要的作用。

目前Kubernetes支持以下3个层次的资源配额管理。


(1)容器级别,可以对CPU和Memory进行限制。

(2)Pod级别,可以对一个Pod内所有容器的可用资源进行限制。

(3)Namespace级别,为Namespace(多租户)级别的资源限制。

4.Namespace Controller

用户通过API Server可以创建新的Namespace并将其保存在etcd中,Namespace Controller定时通过API Server读取这些Namespace的信息。如果Namespace被API标识为优雅删除(通过设置删除期限实现,即设置DeletionTimestamp属性),则将该Namespace的状态设置成Terminating并保存到etcd中。同时Namespace Controller删除该Namespace下的Service Account、RC、Pod、Secret、PersistentVolume、ListRange、 ResourceQuota和Event等资源对象。

5.Service Controller

Service Controller其实是属于Kubernetes集群与外部的云平台之间的一个接口控制器。Service Controller监听Service的变化,如果该Service是一个LoadBalancer类型的Service(externalLoadBalancers=true),则Service Controller确保在外部的云平台上该Service对应的LoadBalancer实例被相应地创建、删除及更新路由转发表(根据Endpoints的条目)。

6.Endpoints Controller

Endpoints表示一个Service对应的所有Pod副本的访问地址,Endpoints Controller就是负责生成和维护所有Endpoints对象的控制器。

Endpoints Controller负责监听Service和对应的Pod副本的变化,如果监测到Service被删除,则删除和该Service同名的Endpoints对象。如果监测到新的Service被创建或者修改,则根据该Service信息获得相关的Pod列表,然后创建或者更新Service对应的Endpoints对象。

相关文章
|
Kubernetes API Perl
Kubernetes核心原理(二)之Controller Manager
1. Controller Manager简介 Controller Manager作为集群内部的管理控制中心,负责集群内的Node、Pod副本、服务端点(Endpoint)、命名空间(Namespace)、服务账号(ServiceAccount)、资源定额(ResourceQuota)的管理,当某个Node意外宕机时,Controller Manager会及时发现并执行自动化修复流程,确保集群始终处于预期的工作状态。
5119 0
|
监控 Kubernetes API
Kubernetes HPA Controller工作原理
HPA Controller 介绍 关于Kubernetes Horizontal Pod Autoscaler(简称HPA)的概念和使用介绍,请参考以下官方文档链接,在这里我不再赘述。 https://kubernetes.
3268 0
|
Kubernetes Perl 容器
Kube Controller Manager 源码分析
Kube Controller Manager 源码分析 Controller Manager 在k8s 集群中扮演着中心管理的角色,它负责Deployment, StatefulSet, ReplicaSet 等资源的创建与管理,可以说是k8s的核心模块,下面我们以概略的形式走读一下k8s Controller Manager 代码。
3735 0
|
Kubernetes 容器 Perl
Kubernetes源码分析-Device Manager的初始化
Kubernetes引入的Devic Plugin,通过扩展机制实现支持GPU、FPGA、高性能 NIC、InfiniBand等各种设备的集成,而Device Manager正是Kubelet内负责Device Plugin交互和设备生命周期管理的模块,在[了解其基本设计](https://yq.aliyun.com/articles/498185)后,我们需要通过对Device Manager的
1811 0
|
关系型数据库 Linux API
Openstack组件部署 — Networking service_安装并配置Controller Node
目录 目录 前文列表 前提条件 网络环境 完成下面的步骤以创建数据库 创建service credentials服务凭证 创建Neutron的API Endpoints 配置自服务网络 安装网络组件 配置服务组件 配置 Modular Layer 2 ML2 ...
1642 0
|
Java 开发者 Spring
controller 配置总结 | 学习笔记
快速学习 controller 配置总结。
109 0
|
Kubernetes 应用服务中间件 nginx
|
前端开发 存储 网络协议
Service Fabric学习-从helloworld开始(无状态服务)
原先做服务器程序, 都是部署在xx云上, 也没理解云是个啥, 不就是个服务器(虚拟机)租赁商吗? 好吧, 其实这个是IaaS, 而接下来要学习的ServiceFabric(以下简称SF)是PaaS.  首先SF和Orleans类似, 都是基于actor模型, 然后编程方式也很像, 大概就是定义公开接口, 然后后端服务实现接口, 前端调用接口这样.
2135 0
|
9月前
|
Kubernetes 负载均衡 容器
Cloud Controller Manager
Cloud Controller Manager是Kubernetes的一个组件,它提供了一个控制平面,用于管理Kubernetes集群。Cloud Controller Manager通过插件机制,可以对接各种云服务提供商的资源,例如阿里云的负载均衡(CLB,原SLB)、虚拟私有云(VPC)等。这样,Kubernetes集群就可以与这些云服务商的资源进行交互,实现负载均衡、跨节点通信等功能。
341 1
|
Kubernetes API Docker
cloud-controller-manager
cloud-controller-manager
742 0

热门文章

最新文章