首页 > 其他分享 >Controller Manager原理分析

Controller Manager原理分析

时间:2023-06-16 23:32:59浏览次数:36  
标签:Node Service Namespace Manager Controller 原理 Pod 节点

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对象。

标签:Node,Service,Namespace,Manager,Controller,原理,Pod,节点
From: https://blog.51cto.com/key3feng/6503404

相关文章

  • springboot2 自动装配原理
    springboot自动装配Spring支持两种bean配置方式:XML配置、JavaConfig配置@SpringBootApplication注解我们创建一个springboot项目后,一般要用该注解,然后在springbootApplication.run方法传入标注了该注解的类,这样就可以去加载spring的相关操作@SpringBootApplicationpublic......
  • Java类加载原理中为何要设计双亲委派机制
    首先,给大家演示两个示例代码,我们自定义一个与Java核心类库中java.lang.String类名相同的代码:packagejava.lang;/***自定义java.lang.String类**@author编程老司机*@date2023-06-16*/publicclassString{static{System.out.println("加载自......
  • 基础知识-计算机组成原理
    (2023-6-16,未更新完)参考资料2021年计算机组成原理考研复习指导|王道考研【重学计算机】计算机组成原理|cnblogs|闪客sun概论可以在计算机中直接执行的语言和用助记符编写的语言是(机器语言)和(汇编语言)。机器语言是唯一可以直接执行的语言,汇编语言用助记符编写。而正则语言......
  • 学习笔记之Zookeeper内部原理解析
    1.1节点类型1.2Stat结构体(1)czxid-创建节点的事务zxid每次修改ZooKeeper状态都会收到一个zxid形式的时间戳,也就是ZooKeeper事务ID。事务ID是ZooKeeper中所有修改总的次序。每个修改都有唯一的zxid,如果zxid1小于zxid2,那么zxid1在zxid2之前发生。(2)ctime-znode被创建的毫秒数(从19......
  • k8s 集群原理
    1.背景Kubernetes作为容器应用的管理中心,对集群内部所有容器的生命周期进行管理,结合自身的健康检查及错误恢复机制,实现了集群内部应用层的高可用性。Kubernetes服务本身的稳定运行对集群管理至关重要,影响服务稳定的因素一般来说分为两种,一种是服务本身异常或者服务所在机器宕机,另......
  • 代理ip匿名原理及那些行业需要代理ip
      互联网的高速发展,连带了代理ip也受到了更多人的使用,不同的行业都存在使用代理ip的情况,同时代理ip也以为匿名程度分成了高匿、普匿、透明代理,那么代理ip匿名的原理是什么呢?又有哪些行业需要代理ip呢?下面我们一起来分析一下。  一、代理ip匿名原理 代理IP匿名的原理基......
  • ABP框架中UnitOfWorkManager.Current.SetTenantId()并不是修改AbpSession.TenantId的
    1.结论UnitOfWorkManager.Current.SetTenantId()修改的是ABP过滤器中使用的TenantId,并不会修改AbpSession.TenantId代码演示:2.关于UnitOfWorkManager.Current.SetTenantId()方法的作用前提:ABP框架是是支持多租户的,对于单数据库的多租户设计,需要通过TenantId来区分宿主和......
  • Spring----AOP入门介绍、原理与使用
    AOP介绍AOP:面向切面编程,无入侵式编程一种编程范式,指导开发者如何组织程序结构OOP:面向对象作用:在不惊动原始设计的基础上为其做功能增强概念定义Aspect(切面):描述通知与切入点的对应关系(执行位置和共性之间的关系)Aspect声明类似于Java中的类声明,在Aspect中会包含......
  • 使用MockMvc测试 Controller
    使用MockMvc可以做到controller层的测试。如果直接得到controller,然后调用指定的方法是不会通过拦截器等外层组件的,使用mockMvc可以。packagecom.lomi.mockMvc;importcn.hutool.json.JSONUtil;importcom.lomi.controller.TestController;importcom.lomi.entity.Goods;im......
  • 操作系统(5.1.1)--常规存储管理方式的特征和局部性原理
    1.常规存储器管理方式的特征(1)一次性。即作业在运行前需一次性地全部装入内存。(2)驻留性。即作业装入内存后,便一直驻留在内存中,直至作业运行结束。由此可以看出,上述的一次性及驻留性,使许多在程序运行中不用或暂不用的程序(数据)占据了大量的内存空间,使得一些需要运行的作业无法装入......