K8S系列文章之基础理论篇

news2024/11/17 15:49:23

第一部分:理解控制器

简介:当我们尝试去理解 Kubernetes 集群工作原理的时候,控制器肯定是一个难点。这是因为
控制器有很多,具体实现大相径庭;且控制器的实现用到了一些较为晦涩的机制,不易理解。但
是,我们又不能绕过控制器,因为它是集群的“大脑”。
当我们尝试去理解 Kubernetes 集群工作原理的时候,控制器肯定是一个难点。这是因为控制器有很
多,具体实现大相径庭;且控制器的实现用到了一些较为晦涩的机制,不易理解。但是,我们又不能绕
过控制器,因为它是集群的“大脑”。在这,我们通过分析一个简易冰箱的设计过程,来深入理解集群控
制器的产生,功能以及实现方法。
下图是 Kubernetes 集群的核心组件,包括数据库 etcd,调度器 scheduler,集群入口 API Server,控
制器 Controller,服务代理 kube-proxy 以及直接管理具体业务容器的 kubelet。这些组件逻辑上可以
被分为三个部分:核心组件 etcd 数据库,对 etcd 进行直接操作的入口组件 API Server,以及其他组
件。这里的“其他组件”之所以可以被划分为一类,是因为它们都可以被看做是集群的控制器。
在这里插入图片描述

今天我们要讲的就是集群控制器原理。

1.2 控制器原理

虽然控制器是 Kubernetes 集群中比较复杂的组件,但控制器本身对我们来说并不陌生的。我们每天使
用的洗衣机、冰箱、空调等,都是依靠控制器才能正常工作。在控制器原理这一节,我们通过思考一个
简易冰箱的设计过程,来理解 Kubernetes 集群控制器的原理。

1.2.1 简易的冰箱

这个冰箱包括五个组件:箱体、制冷系统、照明系统、温控器以及门。冰箱只有两个功能:当有人打开
冰箱门的时候,冰箱内的灯会自动开启;当有人按下温控器的时候,制冷系统会根据温度设置,调节冰
箱内温度。
在这里插入图片描述

1.2.2 统一入口

对于上边的冰箱,我们可以简单抽象成两个部分:统一的操作入口和冰箱的所有组件。在这里,用户只
有通过入口,才能操作冰箱。这个入口提供给用户两个接口:开关门和调节温控器。用户执行这两个接
口的时候,入口会分别调整冰箱门和温控器的状态。

在这里插入图片描述

1.2.3 控制器

控制器就是为了解决上边的问题产生的。控制器就是用户的操作,和冰箱各个组件的正确状态之间的一
座桥梁:当用户打开门的时候,控制器观察到了门的变化,它替用户打开冰箱内的灯;当用户按下温控
器的时候,控制器观察到了用户设置的温度,它替用户管理制冷系统,调节冰箱内温度。

在这里插入图片描述

1.2.4 控制器管理器

冰箱有照明系统和制冷系统,显然相比一个控制器管理着两个组件,我们替每个组件分别实现一个控制
器是更为合理的选择。同时我们实现一个控制器管理器来统一维护所有这些控制器,来保证这些控制器
在正常工作。

在这里插入图片描述

1.2.5 SharedInformer

上边的控制器和控制器管理器,看起来已经相当不错了。但是当冰箱功能增加,势必有很多新的控制器
加进来。这些控制器都需要通过冰箱入口,时刻监控自己关心的组件的状态变化。比如照明系统控制器
就需要时刻监控冰箱门的状态。当大量控制器不断的和入口通信的时候,就会增加入口的压力。
这个时候,我们把监控冰箱组件状态变化这件事情,交给一个新的模块 SharedInformer 来实现。
SharedInformer 作为控制器的代理,替控制器监控冰箱组件的状态变化,并根据控制器的喜好,把不
同组件状态的变化,通知给对应的控制器。通过优化,这样的 SharedInformer 可以极大的缓解冰箱入
口的压力。

在这里插入图片描述

1.2.6 ListWatcher

在这里插入图片描述
假设 SharedInformer 和冰箱入口通过 http 协议通信的话,那么 http 分块编码(chunked transfer
encoding)就是实现 ListWatcher 的一个好的选择。控制器通过 ListWatcher 给冰箱入口发送一个查询
然后等待,当冰箱组件有变化的时候,入口通过分块的 http 响应通知控制器。控制器看到 chunked 响
应,会认为响应数据还没有发送完成,所以会持续等待。
在这里插入图片描述

1.3 举例

以上我们从一个简易冰箱的进化过程中,了解了控制器产生的意义,扮演的角色,以及实现的方式。现
在我们回到 Kubernetes 集群。Kubernetes 集群实现了大量的控制器,而且在可以预见的未来,新的
功能的控制器会不断出现,而一些旧的控制器也会被逐渐淘汰。
目前来说,我们比较常用的控制器,如 pod 控制器、deployment 控制器、service 控制器、replicaset
控制器等。这些控制器一部分是由 kube controller manager 这个管理器实现和管理,而像 route 控制
器和 service 控制器,则由 cloud controller manager 实现。
之所以会出现 cloud controller manager,是因为在不同的云环境中,一部分控制器的实现,会因为云
厂商、云环境的不同,出现很大的差别。这类控制器被划分出来,由云厂商各自基于 cloud controller
manager 分别实现。
这里我们以阿里云 Kubernetes 集群 cloud controller manager 实现的 route 控制器和 service 控制器
为例,简单说明 Kubernetes 控制器的工作原理。

1.3.1 服务控制器

首先,用户请求 API Server 创建一个 LoadBalancer 类型的服务,API Server 收到请求并把这个服务的
详细信息写入 etcd 数据库。而这个变化,被服务控制器观察到了。服务控制器理解 LoadBalancer 类
型的服务,除了包括存放在 etcd 内部的服务记录之外,还需要一个 SLB 作为服务入口,以及若干
endpoints 作为服务后端。所以服务控制器分别请求 SLB 的云 openapi 和 API Server,来创建云上
SLB 资源,和集群内 endpoints 资源。
在这里插入图片描述

1.3.2 路由控制器

在集群网络一章中,我们提到过,当一个节点加入一个 Kubernetes 集群的时候,集群需要在 VPC 路由
表里增加一条路由,来搭建这个新加入节点到 pod 网络的主干道。而这件事情,就是路由控制器来做
的。路由控制器完成这件事情的流程,与上边服务控制器的处理流程非常类似,这里不再赘述。
在这里插入图片描述

1.4 总结

基本上来说,Kubernetes 集群的控制器,其实扮演着集群大脑的角色。有了控制器,Kubernetes 集群
才有机会摆脱机械和被动,变成一个自动、智能、有大用的系统。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/604753.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023轻松斩获5家大厂offer后的面试总结!

2023年能这么轻松地斩获5家大厂offer,其实这些功劳都要归功于阿里团队的这份软件测试核心知识文档,小编今天在此分享出来,也希望能帮助更多的小伙伴拿到更多高薪的offer; 内容涉及:测试理论、Linux基础、MySQL基础、W…

【小张和Oracle数据库】Java两年半练习生裁员后竟然找到了一份DBA的工作?

一、引言 大家好,我叫张小念(小名念念),家里人都叫宝儿。 一个java两年半的练习生,经历了起起伏伏的疫情时代,终于在java一行也算是入了门。 但是,计划永远赶不上变化, 有一天经…

Makerbase SimpleFOC ESP32 例程3 I²C双编码器测试(AS5600)

Makerbase SimpleFOC ESP32 例程3 IC双编码器测试(AS5600) 第一部分 硬件介绍 1.1 硬件清单 序号品名数量1ESP32 FOC V1.0 主板12YT2804电机2312V电源适配器14USB 线156pin杜邦线2 注意:YT2804是改装的云台无刷电机,带有AS5600编码器,可实现360连续运…

Makerbase SimpleFOC ESP32 例程2 双电机开环位置测试

Makerbase SimpleFOC ESP32 例程2 双电机开环位置测试 第一部分 硬件介绍 1.1 硬件清单 序号品名数量1ESP32 FOC V1.0 主板12YT2804电机2312V电源适配器14USB 线1 注意:YT2804是改装的云台无刷电机,带有AS5600编码器,可实现360连续运转。 主要参数如…

区间预测 | MATLAB实现基于QRCNN-GRU-Multihead-Attention多头注意力卷积门控循环单元多变量时间序列区间预测

区间预测 | MATLAB实现基于QRCNN-GRU-Multihead-Attention多头注意力卷积门控循环单元多变量时间序列区间预测 目录 区间预测 | MATLAB实现基于QRCNN-GRU-Multihead-Attention多头注意力卷积门控循环单元多变量时间序列区间预测效果一览基本介绍模型描述程序设计参考资料 效果一…

菱形图案打印、水仙花数、买汽水

目录 菱形图案打印 上三角 下三角 拓展:带空格直角三角形图案 代码一 代码二 水仙花数 拓展:变种水仙花数 买汽水 代码一 代码二 妙用汽水瓶 菱形图案打印 题目要求 其实呢这道题很多人想到直接用printf()进行输出,我想说的是&#…

开源:小狐狸GPT付费AI-v2.0.0 H5和小程序端增加使用手册

小狐狸GPT付费AI体验系统、系统版本更新至1.2.0,源码为小程序、H5、WEB版本,购买含更新,独立版;开源、开源、开源、可二开!!200包含H5、web的vue全开源,最新版更新了:H5和小程序端增…

打造一个你自己图标exe的Python脚本启动器

目录 1. 背景需求2. 需求软件3. 准备图标4. 编译命令4.1 使用Windows API4.2 使用-mwindows参数编译4.3 使用pythonw.exe解释器 5. 测试运行5.1 参考代码5.2 使用效果 1. 背景需求 有时候为了确保多平台的兼容性,需要开发绿色版的应用程序,也就是在嵌入…

windows server 查看登录日志

windows server 查看登录日志 1、 先要开启登录审核,在查看登录日志 点击 “服务器管理器” – > “工具” – > “本地安全策略” 点击 “本地策略” – > “点击审核策略” 审核 成功 和 失败的记录(可以全选也可以选择需要审计的操作&am…

Linux pthread_create源码分析

前言 本文介绍pthread_create函数的使用和源码分析。 /include/pthread.h bionic/libc/bionic/pthread_create.cpp bionic/libc/bionic/pthread_attr.cpp pthread_create使用 Android中的绝大部分线程,最后都是通过pthread_create创建的。 int pthread_create(p…

【LeetCode热题100】打卡第11天:有效括号合并两个有序链表

文章目录 【LeetCode热题100】打开第11天⛅前言🔒有效括号🔑题解🔒合并两个有序链表🔑题解💡思路一:合并到第三方链表上🔐【非递归实现】🔐【递归实现】 💡思路二 &#…

2023年上半年数据库系统工程师下午真题及答案解析

试题一(15分) 某新能源汽车公司为了提升效率,需开发一个汽车零件采购系统。请完成系统的数据库设计。 概念结构设计 需求描述 (1)记录供应商信息,包括供应商的名称、地址和一个电话。 (2)记录零件信息,包括零件的编码、名称和价格。 (3)…

线程的四个属性

如上图所示,线程有四个属性: 线程ID线程名称守护线程线程优先级 1. 线程ID 每个线程都有id,这个id不能修改 线程id会不停的自增,从1开始 main函数就是第一个线程,id1 id 是操作系统用来识别各个线程的编号&#…

DHVT:在小数据集上降低VIT与卷积神经网络之间差距,解决从零开始训练的问题

VIT在归纳偏置方面存在空间相关性和信道表示的多样性两大缺陷。所以论文提出了动态混合视觉变压器(DHVT)来增强这两种感应偏差。 在空间方面,采用混合结构,将卷积集成到补丁嵌入和多层感知器模块中,迫使模型捕获令牌特征及其相邻特征。 在信…

tcp shrinking window 之进退

一个有趣的问题:Unbounded memory usage by TCP for receive buffers, and how we fixed it 引出一个 kernel patch:[PATCH] Add a sysctl to allow TCP window shrinking in order to honor memory limits 但这 patch 把一个问题变成了两个问题&#…

apple pencil一代的平替有哪些品牌?平价电容笔推荐

要知道,真正的苹果原装电容笔,价格可不低,仅仅一支就是近千块。实际上,平替电容笔对没有太多预算的用户是个不错的选择。一款苹果的电容笔的售价,相当于平替电容笔的四倍,不过平替电容笔的书写体验&#xf…

pnpm对npm及yarn降维打击详解

目录 正文npm2yarnpnpm总结 正文 大家最近是不是经常听到 pnpm,我也一样。今天研究了一下它的机制,确实厉害,对 yarn 和 npm 可以说是降维打击。 那具体好在哪里呢? 我们一起来看一下。 我们按照包管理工具的发展历史&#xf…

3.5 凸多边形最优三角部分

博主简介:一个爱打游戏的计算机专业学生博主主页: 夏驰和徐策所属专栏:算法设计与分析 1.什么是多边形的三角剖分? 多边形三角剖分是指将多边形分割成互不相交的三角形的弦的集合T。 我的理解: 多边形三角剖分是将给…

uniapp本地存储详解

uniapp本地存储详解 前言 在开发uniapp应用时,我们常常需要使用本地存储来保存一些数据,比如用户登录信息、设置项等,使得应用能够在设备上保存和读取数据,以便提供更好的用户体验和离线功能支持,本文将简单介绍unia…

python编程——编译器与解释器

作者:Insist-- 个人主页:insist--个人主页 本文专栏:python专栏 专栏介绍:本专栏为免费专栏,并且会持续更新python基础知识,欢迎各位订阅关注。 目录 前言 一、编译器与解释器的介绍 二、编译器与解释器…