Controller Manager作为集群内部的管理控制中心,负责集群内的Node、Pod副本、服务端点(Endpoint)、命名空间(Namespace)、服务账号(ServiceAccount)、资源定额(ResourceQuota)等的管理,当某个Node意外宕机时,及时发现并执行自动化修复流程。

Controller Manager内部包含Replication Controller、Node Controller、ResourceQuota Controller、Namespace Controller、ServiceAccount Controller、Token Controller、Service Controller及Endpoint Controller等多个Controller,每种Controller都负责一种具体的控制流程。

1.1 Replication Controller

为了区别Controller Manager中的Replication Controller副本控制器和资源对象Replication Controller。将资源对象简写为RC。Replication Controller指副本控制器

副本控制器核心作用时确保任何时候集群中一个RC所关联的Pod副本数量保持预设值。超出摧毁,反之则创建。只有当pod重启策略为Always时,才会管理该pod的操作。pod被创建后不会消失,唯一的例外时当pod处于succeeded或failed状态时间过长,被系统自动回收。副本控制器会再其他工作节点重新创建,运行pod副本。

RC中的Pod模板就像一个模具,制作出的东西离开模具,之间不存在关系了。pod被创建后,模板如何变化都不会影响这个pod。pod可以通过修改标签脱离RC的管控。用来从集群中迁移,数据修复等调试。pod被迁移后,RC会创建新的pod替代之前的pod。删除RC不会影响之前创建的pod,如果要删除RC控制的pod,将RC中的副本数设置为0

副本控制器的职责如下

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

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

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

1.2 Node Controller

kubelet定时向API Server汇报状态信息,API Server接受到信息后更新到etcd。etcd存储的节点信息包括节点健康状态,节点资源,节点名称,节点地址信息,操作系统版本,Docker版本,kubelet版本。节点健康状态包含就绪True,未就绪False和未知Unknown三种。

(1)启动时如果设置了--clustr-cidr参数,那么为每个没有设置Spec。PodCIDR的Node节点生成一个CIDR地址,并用该CIDR地址设置节点的Spec.PodCIDR属性。防止不同系欸但的CIDR地址发生冲突。

(2)逐个读取节点信息,多次尝试修改nodeStatusMap中的节点状态信息,将该节点信息和Node Controller的nodeStatusMap中保存的节点信息做比较。如果判断没有收到kubelet发出的节点信息,或者第一次收到,或者节点状态变成非健康。则再nodeStatusMap中保存该节点的状态信息,并用Node Controller所在节点的系统时间作为探测时间和节点状态变化时间。如果节点信息发生改变,保存该节点状态信息。并用Node Controller所在节点的系统时间未作探测时间和节点状态变化时间。如果收到节点信息,但状态没改变,保存系欸但状态信息,用Node Controller所在节点系统时间作为探测时间,用上次节点信息的节点状态变化时间作为该节点的状态变化时间。如果一段时间没有收到节点状态信息,设置节点状态为未知,并且通过API Server保存节点状态。

(3)逐个读取节点信息,如果节点状态为非就绪状态,将节点加入待删除队列,否则将节点从该队列中删除。如果节点状态为非就绪状态,且系统指定了Cloud Provider,则调用Cloud Provider查看节点,发现节点故障,删除etcd中节点信息,并删除该节点相关的pod等资源信息。

1.3 ResourceQuota Controller

资源配额管理确保了指定的资源对象再任何时候不会超量占用系统物理资源,避免由于某些业务进程的设计或实现的缺陷导致整个系统运行紊乱甚至意外宕机,对集群的平稳运行和稳定性有非常重要的作用。

kubernetes支持如下三个层次的资源配额管理。

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

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

(3)Namespace级别,为Namespace多租户级别的资源限制,包括pod数量,RC数量,Service数量,ResourceQuota数量,Secert数量,可持有的PV数量。

kubernetes配额管理通过Admission Control准入控制来控制的,Admission Control当前提供了两种方式的配额约束,分别是LimitRanger与ResourceQuota。其中LimitRanger作用域Pod和Container上,ResourceQuota作用于Namespace上,限制Namespace里的各类资源的使用总额。

1.4 Namespace Controller

用户通过Apiserver 可以创建新的Namespace并保存在etcd中,Namespace Controller定期通过API Server读取这些Namespace信息。如果Namespace被API表示为优雅删除,则将该NameSpace状态设hi为Terminating并保存到etcd中,Namespace Controller删除该Namespace下所有的资源对象。

当Namespace状态被设置成Terminating后,Admission Controller的NamespaceLifecycle插件来阻止为该Namespace创建新的资源。Namespace Controller删除完该Namespace所有资源对象后,对该Namespace执行finalize操作,删除Namespace的spec.finalizers域中的信息。

如果Namespace设置了删除期限,并且spec.finalizers域值为空,Namespace Controller通过API Server删除该Namespace资源。

1.5 Service Controller与Endpoint Controller

Endpoints表示了一个Service对应的所有Pod副本的访问地址,而endpoints controller就是负责生成和维护所有Endpoints对象的控制器。负责监听Service和对应的pod副本的变化,如果Service被删除,删除和该Service同名的Endpoints对象。如果新的Service被创建或者修改,根据该Service信息获得相关的pod列表,然后创建或者更新Service对应的Endpoints对象。如果监测到pod的事件,则更新它所对应的Service的Endpoints对象

每个Node上的kube-proxy进程获取每个Service的Endpoints,实现Service的负载均衡。

kubernetes之Controller Manager原理分析的更多相关文章

  1. kubernetes的Controller Manager

    1. Controller Manager简介 Controller Manager作为集群内部的管理控制中心,负责集群内的Node.Pod副本.服务端点(Endpoint).命名空间(Namespa ...

  2. 029.核心组件-Controller Manager

    一 Controller Manager原理 1.1 Controller Manager概述 一般来说,智能系统和自动系统通常会通过一个"控制系统"来不断修正系统的工作状态.在K ...

  3. Kubernetes Job Controller 原理和源码分析(二)

    概述程序入口Job controller 的创建Controller 对象NewController()podControlEventHandlerJob AddFunc DeleteFuncJob ...

  4. Kubernetes Job Controller 原理和源码分析(一)

    概述什么是 JobJob 入门示例Job 的 specPod Template并发问题其他属性 概述 Job 是主要的 Kubernetes 原生 Workload 资源之一,是在 Kubernete ...

  5. Kubernetes Job Controller 原理和源码分析(三)

    概述Job controller 的启动processNextWorkItem()核心调谐逻辑入口 - syncJob()Pod 数量管理 - manageJob()小结 概述 源码版本:kubern ...

  6. kubernetes垃圾回收器GarbageCollector Controller源码分析(二)

    kubernetes版本:1.13.2 接上一节:kubernetes垃圾回收器GarbageCollector Controller源码分析(一) 主要步骤 GarbageCollector Con ...

  7. kubernetes之Scheduler原理分析

    scheduler在整个系统承担了承上启下的重要功能 承上值负责接受Controller Manager创建新的pod,安排目标Node 旗下指安置工作完成后,目标Node上的kubelet服务进程接 ...

  8. Kubernetes Controller Manager

    Controller Manager 作为集群内部的管理控制中心,负责集群内的Node.Pod副本.Service Endpoint.NameSpace.ServiceAccount.Resource ...

  9. SPI协议及工作原理分析

    说明.文章摘自:SPI协议及其工作原理分析 http://blog.csdn.net/skyflying2012/article/details/11710801 一.概述. SPI, Serial ...

随机推荐

  1. 决策树算法原理--good blog

    转载于:http://www.cnblogs.com/pinard/p/6050306.html (楼主总结的很好,就拿来主义了,不顾以后还是多像楼主学习) 决策树算法在机器学习中算是很经典的一个算法 ...

  2. 功能更新 | medini analyze — 符合ISO 26262的功能安全平台工具

            汽车电子电气系统的功能安全随着智能驾驶.新能源等新兴技术的发展而愈发受到重视.在国际功能安全标准ISO 26262的落地过程中遇到了很多的棘手问题:如何正确而有效地实施HARA以得到合 ...

  3. Spring Cloud Ribbon负载均衡(快速搭建)

    Spring Cloud Ribbon 是一个基于HTTP和TCP的客户端负载均衡工具,它基于Netflix Ribbon实现.通过 Spring Cloud 的封装, 可以让我们轻松地将面向服务的 ...

  4. 项目Alpha冲刺——集合

    作业描述 课程: 软件工程1916|W(福州大学) 作业要求: 项目Alpha冲刺(团队) 团队名称: 火鸡堂 作业目标: 完成项目Alpha冲刺 团队信息 队名:火鸡堂 队员学号 队员姓名 博客地址 ...

  5. createTextRange 创建文本对象

    document.body.createTextRange 主要是用来对一些文本对象进行操作.比如你有一大段文字,都在同一个P标签内,但是你只希望通过JS改变其中的一小部分,这时就可以用createT ...

  6. GlusterFS集群文件系统研究

    https://blog.csdn.net/liuaigui/article/details/6284551 1.      GlusterFS概述GlusterFS是Scale-Out存储解决方案G ...

  7. (尚021)Vue_eslint编码规范检查

    1.eslint 1.1说明 1)ESLint是一个代码规范检查工具 2)它定义了很多特定的规则,一旦你的代码违背了某一规则,eslint会做出非常有用的提示 3)官网:http://eslint.o ...

  8. Windbg命令脚本流程控制语句详解

    在Windbg命令脚本一文里,我们介绍了命令脚本语言的的组成要素,在本文里将对语句进行展开的讲解.这些语句主要是流程控制的语句,比如我们常见的条件分子和循环语句等. ; (命令分隔符) 分号(:)字符 ...

  9. NTSTATUS代码摘录

    00000000 STATUS_SUCCESS00000000 STATUS_WAIT_000000001 STATUS_WAIT_100000002 STATUS_WAIT_200000003 ST ...

  10. C语言博客作业--结构体,文件

    1.本章学习总结(2分) 1.1 学习内容总结 (1)结构体如何定义.成员如何赋值 结构体的一般形式为:      struct  结构体名     {      数据类型 成员名1:      数据 ...