Kubernetes核心原理(二)之Controller Manager

版权声明:本文为博主原创文章,未经博主允许不得转载。如需转载请联系本人,并标明出处和作者。

本文CSDN博客地址:http://blog.csdn.net/huwh_/article/details/75675761

1. Controller Manager简介

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

每个Controller通过API Server提供的接口实时监控整个集群的每个资源对象的当前状态,当发生各种故障导致系统状态发生变化时,会尝试将系统状态修复到“期望状态”。

2. Replication Controller

为了区分,资源对象Replication Controller简称RC,而本文是指Controller Manager中的Replication Controller,称为副本控制器。副本控制器的作用即保证集群中一个RC所关联的Pod副本数始终保持预设值。

  1. 只有当Pod的重启策略是Always的时候(RestartPolicy=Always),副本控制器才会管理该Pod的操作(创建、销毁、重启等)。
  2. RC中的Pod模板就像一个模具,模具制造出来的东西一旦离开模具,它们之间就再没关系了。一旦Pod被创建,无论模板如何变化,也不会影响到已经创建的Pod。
  3. Pod可以通过修改label来脱离RC的管控,该方法可以用于将Pod从集群中迁移,数据修复等调试。
  4. 删除一个RC不会影响它所创建的Pod,如果要删除Pod需要将RC的副本数属性设置为0。
  5. 不要越过RC创建Pod,因为RC可以实现自动化控制Pod,提高容灾能力。

2.1. Replication Controller的职责

  1. 确保集群中有且仅有N个Pod实例,N是RC中定义的Pod副本数量。
  2. 通过调整RC中的spec.replicas属性值来实现系统扩容或缩容。
  3. 通过改变RC中的Pod模板来实现系统的滚动升级。

2.2. Replication Controller使用场景


使用场景

说明

使用命令
重新调度 当发生节点故障或Pod被意外终止运行时,可以重新调度保证集群中仍然运行指定的副本数。  
弹性伸缩 通过手动或自动扩容代理修复副本控制器的spec.replicas属性,可以实现弹性伸缩。 kubectl scale
滚动更新 创建一个新的RC文件,通过kubectl 命令或API执行,则会新增一个新的副本同时删除旧的副本,当旧副本为0时,删除旧的RC。 kubectl rolling-update

滚动升级,具体可参考kubectl rolling-update --help,官方文档:https://kubernetes.io/docs/tasks/run-application/rolling-update-replication-controller/

[root@node5 ~]# kubectl rolling-update --help

Perform a rolling update of the given ReplicationController.

Replaces the specified replication controller with a new replication controller by updating one pod at a time to use the

new PodTemplate. The new-controller.json must specify the same namespace as the

existing replication controller and overwrite at least one (common) label in its replicaSelector.

Usage:

  kubectl rolling-update OLD_CONTROLLER_NAME ([NEW_CONTROLLER_NAME] --image=NEW_CONTAINER_IMAGE | -f NEW_CONTROLLER_SPEC) [flags]

Aliases:

  rolling-update, rollingupdate

 

Examples:

# Update pods of frontend-v1 using new replication controller data in frontend-v2.json.

$ kubectl rolling-update frontend-v1 -f frontend-v2.json

# Update pods of frontend-v1 using JSON data passed into stdin.

cat frontend-v2.json | kubectl rolling-update frontend-v1 -f -

# Update the pods of frontend-v1 to frontend-v2 by just changing the image, and switching the

# name of the replication controller.

$ kubectl rolling-update frontend-v1 frontend-v2 --image=image:v2

# Update the pods of frontend by just changing the image, and keeping the old name

$ kubectl rolling-update frontend --image=image:v2

3. Node Controller

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

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

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

2、具体流程见以上流程图。

3、逐个读取节点信息,如果节点状态变成非“就绪”状态,则将节点加入待删除队列,否则将节点从该队列删除。

4. ResourceQuota Controller

资源配额管理确保指定的资源对象在任何时候都不会超量占用系统物理资源。

支持三个层次的资源配置管理:

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

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

3)Namespace级别:包括

  • Pod数量
  • Replication Controller数量
  • Service数量
  • ResourceQuota数量
  • Secret数量
  • 可持有的PV(Persistent Volume)数量

说明:

  1. k8s配额管理是通过Admission Control(准入控制)来控制的;
  2. Admission Control提供两种配额约束方式:LimitRanger和ResourceQuota;
  3. LimitRanger作用于Pod和Container;
  4. ResourceQuota作用于Namespace上,限定一个Namespace里的各类资源的使用总额。

ResourceQuota Controller流程图

5. Namespace Controller

用户通过API Server可以创建新的Namespace并保存在etcd中,Namespace Controller定时通过API Server读取这些Namespace信息。

如果Namespace被API标记为优雅删除(即设置删除期限,DeletionTimestamp),则将该Namespace状态设置为“Terminating”,并保存到etcd中。同时Namespace Controller删除该Namespace下的ServiceAccount、RC、Pod等资源对象。

6. Endpoint Controller

Service、Endpoint、Pod的关系:

Endpoints表示了一个Service对应的所有Pod副本的访问地址,而Endpoints Controller负责生成和维护所有Endpoints对象的控制器。它负责监听Service和对应的Pod副本的变化。

  1. 如果监测到Service被删除,则删除和该Service同名的Endpoints对象;
  2. 如果监测到新的Service被创建或修改,则根据该Service信息获得相关的Pod列表,然后创建或更新Service对应的Endpoints对象。
  3. 如果监测到Pod的事件,则更新它对应的Service的Endpoints对象。

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

7. Service Controller

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

参考《Kubernetes权威指南》

时间: 2024-09-09 23:22:09

Kubernetes核心原理(二)之Controller Manager的相关文章

diamond专题(二)-- 核心原理介绍

大家好,通过第一篇的快速使用,大家已经对diamond有了一个基本的了解.本次为大家带来的是diamond核心原理的介绍,主要包括server集群的数据同步.client获取server地址.client从server获取数据.client运行时感知server的数据变化,这四部分. 一.server集群数据同步 diamond-server将数据存储在mysql和本地文件中,mysql是一个中心,diamond认为存储在mysql中的数据绝对正确,除此之外,server会将数据存储在本地文件中

kubernetes架构之二

一.概述 IaaS:即基础设施即服务,通过虚拟化和分布式存储等技术,实现对包括服务器.存储设备.网络设备等各种物理资源的抽象:从而形成了一个可扩展.可按需分配的虚拟资源池.最具代表性的IaaS产品有Amazon AWS,提供虚拟机EC2和云存储S3等服务: PaaS:平台即服务,为开发者提供了应用的开发环境和运行环境,将开发者从繁琐的IT环境管理中解放出来:PaaS主要面向的是软件专业人员: SaaS:软件即服务,面向使用软件的终端用户.比如:在线使用的邮箱系统  二.架构和组件 kuberne

大数据思维的十大核心原理

大数据思维是客观存在,大数据思维是新的思维观.用大数据思维方式思考问题,解决问题是当下企业潮流.大数据思维开启了一次重大的时代转型. 大数据思维原理是什么?笔者概括为10项原理. 一.数据核心原理 从"流程"核心转变为"数据"核心 大数据时代,计算模式也发生了转变,从"流程"核心转变为"数据"核心.Hadoop体系的分布式计算框架已经是"数据"为核心的范式.非结构化数据及分析需求,将改变IT系统的升级方式:

位置-有关计算机原理二维数组地址的问题

问题描述 有关计算机原理二维数组地址的问题 设有个一二维数组A[6][8]假设A[0][0]存放位置在1000每个元素占6个空间按行优先存储则A[3][6]的存储位置是多少? 解决方案 应该是1180,3*8+6,A[3][6]的首地址是6,不是7, 解决方案二: 应该是1186吧.(10个字符) 解决方案三: 1180,一共31个元素,(31-1)*6+1000 解决方案四: (A[0][7])7+ (A[3][7])8*3-1(A[3][6]) 解决方案五: typedef struct {

Ajax技术组成与核心原理分析_AJAX相关

本文主要为大家分析了Ajax技术组成原理,供大家参考,具体内容如下 1.Ajax特点:局部刷新.提高用户的体验度,数据从服务器商加载  2.AJax的技术组成不是新技术,而是之前技术的整合 Ajax: Asynchronous Javascript And Xml;(异步的JavaScript和XML) 包括的技术:JavaScript.XML.CSS.XMLHttpRequest 异步:发送请求以后,不等结果,由回调函数处理. JavaScript:向服务器发送请求,获得返回结果,更新页面 X

Ajax技术组成与核心原理分析

本文主要为大家分析了Ajax技术组成原理,供大家参考,具体内容如下 1.Ajax 特点:局部刷新.提高用户的体验度,数据从服务器商加载 2.AJax的技术组成 不是新技术,而是之前技术的整合 Ajax: Asynchronous Javascript And Xml;(异步的JavaScript和XML) 包括的技术:JavaScript.XML.CSS.XMLHttpRequest 异步:发送请求以后,不等结果,由回调函数处理. JavaScript:向服务器发送请求,获得返回结果,更新页面

大型网站技术架构——核心原理与案例分析(二)

网站高性能架构 一.性能测试指标  1.1.响应时间 1.2.并发数   指系统能够同时处理请求的数目,反映了系统的负载特性 1.3.吞吐量  TPS(每秒事务数) HPS(每秒HTTP请求数) QPS(每秒查询数)等 1.4.性能计数  包括System Load.对象与线程数.内存使用.CPU使用.磁盘与网络I/O等指标 二.性能测试方法 2.1.性能测试 与初期规划的性能指标为预期目标,不断施加压力,验证是否在可接受范围,性能是否能达到性能预期 2.2.负载测试  不断地增加并发请求以增加

大话Elasticsearch常用操作和核心原理

作者:朱培 ID:sdksdk0 最近有朋友问到Elasticsearch的一些问题,所以我这边重新总结了一些关于搜索引擎的底层原理.分布式文档系统.ES的并发控制. 一.背景知识 1.搜索的分类 我们想要寻找某些信息的时候,一般会直接去百度.谷歌.搜歌.360搜索等,搜索分为垂直搜索.互联网搜索.IT系统的搜索.搜索,就是在任何场景下,找寻你想要的信息,这个时候,会输入一段你要搜索的关键字,然后就期望找到这个关键字相关的有些信息. 2.如果用数据库做搜索会怎么样? 做软件开发的话,或者对IT.

大型网站技术架构——核心原理与案例分析(一)

一.大型网站架构模式: 1.分层 - 横向 如应用层.服务层.数据层 2.分割-纵向 将业务化分为不同粒度的细小的功能和服务 如订单业务.购物车业务.短信业务.邮件业务等 3.分布式-将不现的服务.不同的模块部署在不同的服务器,通过远程调用协同工作,分布式静态资源.分布式数据和存储.分布式计算.注意,会对性能有影响(网络请求开销),分布式事物.数据一致性. 4.集群-用更多服务器提供相同的服务,可以提供很好的并发性,不足以支持访问量时,只需要要向集群中加入新的机器即可.当一台机子不可用时,可通过