没有合适的资源?快使用搜索试试~ 我知道了~
首页Kubernetes入门指南:理解控制器与冰箱模型
Kubernetes入门指南:理解控制器与冰箱模型
需积分: 5 13 下载量 54 浏览量
更新于2024-07-15
收藏 15.54MB PDF 举报
Kubernetes学习笔记主要针对初学者,提供了一个易于理解的框架来掌握Kubernetes基础知识。控制器作为Kubernetes集群的核心组件,其重要性不言而喻,因为它们是集群运行的逻辑中枢,类似于大脑,负责维持集群中各种资源的稳定状态。 首先,理解控制器的概念是学习Kubernetes的关键。控制器种类繁多,功能各异,它们基于一些复杂的内部机制运行,比如etcd数据库,它是集群状态存储的基石。API服务器作为集群的入口,接收用户的请求并直接操作etcd。除这些核心组件外,其他如调度器、kube-proxy和kubelet等都可视为控制器的一部分,因为它们各自管理着集群的不同方面。 本文通过类比现实生活中的冰箱设计,帮助读者直观地理解控制器的工作原理。一个简单的冰箱由箱体、制冷系统、照明系统、温控器和门组成,这两个基本功能——开门亮灯和调节温度,映射到Kubernetes中的用户操作和组件状态控制。冰箱的统一入口就像是API服务器,用户只能通过这个入口来操作,控制器则扮演着调用相应组件(如温控器)并确保其响应用户需求的角色。 当用户打开冰箱门时,控制器检测到这个变化,自动启动照明系统;同样,当用户调整温控器时,控制器会根据设定的温度指令调整制冷系统。这个过程展示了控制器如何协调集群中各组件之间的交互,确保整个系统的稳定运行。 总结来说,Kubernetes控制器的学习不仅涉及到技术细节,如API调用、状态管理、自我修复等功能,更强调了它们在分布式系统管理中的核心作用。通过理解控制器原理,学习者能更好地构建和维护一个健壮的Kubernetes集群环境。
资源详情
资源推荐
![](https://csdnimg.cn/release/download_crawler_static/13090580/bge.jpg)
这里 token 是一个对的 key,而 value 是当前集群的基本信息。阿里云 Kubernetes 集群的管控,在接
到手动添加已有节点请求的时候,会生成这个对,并把 key 作为 token 返回给用户。
这个 token(key)存在的价值,是其可以让 attach_node.sh 脚本,以匿名身份在 ECS 上索引到集群
的基本信息(value),而这些基本信息,对节点准备至关重要。
总体上来说,节点准备就做两件事情,读和写。读即数据收集,写即节点配置。
这里的读写过程,绝大部分都很基础,大家可以通过阅读脚本来了解细节。唯一需要特别说明的是,
kubeadm join 把节点注册到 Master 的过程。此过程需要新加节点和集群 Master 之间建立互信。
一边,新加节点从管控处获取的 bootstrap token(与 openapi token 不同,此 token 是 value 的一部
分内容),实际上是管控通过可信的途径从集群 Master 上获取的。新加节点使用这个 bootstrap
token 连接 Master,Master 则可通过验证这个 bootstrap token 来建立对新加节点的信任。
另一边,新加节点以匿名身份从 Master kube-public 命名空间中获取集群 cluster-info,cluster-info
包括集群 CA 证书,和使用集群 bootstrap token 对这个 CA 做的签名。新加节点使用从管控处获取的
bootstrap token,对 CA 生成 b 新的签名,然后将此签名与 cluster-info 内签名做对比,如果两个签名
一致,则说明 cluster-info 和 bootstrap token 来自同一集群。新加节点因为信任管控,所以建立对
Master 的信任。
mkdir -p /var/log/acs
curl http:///public/pkg/run/attach/1.12.6-aliyun.1/attach_node.sh | bash -s -- -
-docker-version --token --endpoint --cluster-dns > /var/log/acs/init.log
![](https://csdnimg.cn/release/download_crawler_static/13090580/bgf.jpg)
3.1.2 自动添加已有节点
自动添加已有节点,不需要人为拷贝黏贴脚本到 ECS 命令行来完成节点准备的过程。管控使用了 ECS
userdata 的特性,把类似以上节点准备的脚本,写入 ECS userdata,然后重启 ECS 并更换系统盘。当
ECS 重启之后,会自动执行 Userdata 里边的脚本,来完成节点添加的过程。这部分内容,大家其实可
以通过查看节点 userdata 来确认。
3.2 !/bin/bash
这里我们看到,attach_node.sh 的参数,与前一节的参数有很大的不同。其实这里的参数,都是前一
节 value 的内容,即管控创建并维护的集群基本信息。自动添加已有节点省略了通过 key 获取 value 的
过程。
3.2.1 集群扩容
集群扩容与以上添加已有节点不同,此功能针对需要新购节点的情形。集群扩容的实现,在添加已有节
点的基础上,引入了弹性伸缩 ESS 组件。ESS 组件负责从无到有的过程,而剩下的过程与添加已有节点
类似,即依靠 ECS userdata 脚本来完成节点准备。下图是管控通过 ESS 从无到有创建 ECS 的过程。
mkdir -p /var/log/acs
curl http:///public/pkg/run/attach/1.12.6-aliyun.1/attach_node.sh | bash -s -- -
-docker-version --token --endpoint --cluster-dns > /var/log/acs/init.log
![](https://csdnimg.cn/release/download_crawler_static/13090580/bg10.jpg)
3.2.2 自动伸缩
前边三种方式是需要人为干预的伸缩方式,而自动伸缩的本质不同,是它可以在业务需求量增加的时
候,自动创建 ECS 实例并加入集群。为了实现自动化,这里引入了另外一个组件 Cluster Autoscaler。
集群自动伸缩包括两个独立的过程。
其中第一个过程,主要用来配置节点的规格属性,包括设置节点的用户数据。这个用户数据和手动添加
已有节点的脚本类似,不同的地方在于,其针对自动伸缩这种场景,增加了一些专门的标记。
attach_node.sh 脚本会根据这些标记,来设置节点的属性。
3.3 !/bin/sh
而第二个过程,是实现自动增加节点的关键。这里引入了一个新的组件 Autoscaler,它以 Pod 的形式
运行在 Kubernetes 集群中。理论上来说,我们可以把这个组件当做一个控制器。因为它的作用与控制
器类似,基本上还是监听 Pod 状态,以便在 Pod 因为节点资源不足而不能被调度的时,去修改 ESS 的
伸缩规则来增加新的节点。
curl http:///public/pkg/run/attach/1.12.6-aliyun.1/attach_node.sh | bash -s -- -
-openapi-token --ess true --labels k8s.io/cluster-
autoscaler=true,workload_type=cpu,k8s.aliyun.com=true
![](https://csdnimg.cn/release/download_crawler_static/13090580/bg11.jpg)
这里有一个知识点,集群调度器衡量资源是否充足的标准,是“预订率”,而不是“使用率”。这两者的差
别,类似酒店房价预订率和实际入住率:完全有可能有人预订了酒店,但是并没有实际入住。在开启自
动伸缩功能的时候,我们需要设置缩容阈值,就是“预订率”的下线。之所以不需要设置扩容阈值。是因
为 Autoscaler 扩容集群,依靠的是 Pod 的调度状态:当 Pod 因为节点资源“预订率”太高无法被调度的
时候,Autoscaler 就会扩容集群。
3.4 节点减少原理
与增加节点不同,集群减少节点的操作只有一个移除节点的入口。但对于用不同方法加入的节点,其各
自移除方式略有不同。
首先,通过添加已有节点加入的节点,需要三步去移除:管控通过 ECS API 清楚 ECS userdata;管控
通过 Kubernetes API 从集群中删除节点;管控通过 ECS InvokeCommand 在 ECS 上执行 kubeadm
reset 命令清理节点。
其次,通过集群扩容加入的节点,则在上边的基础上,增加了断开 ESS 和 ECS 关系的操作。此操作由
管控调用 ESS API 完成。
最后,经过 Cluster Autoscaler 动态增加的节点,则在集群 CPU 资源“预订率”降低的时候,由 Cluster
Autoscaler 自动移除释放。其触发点是 CPU“预订率”,即上图写 Metrics 的原因。
3.5 总结
总体上来说,Kubernetes 集群节点的增加与减少,主要涉及四个组件,分别是 Cluster Autoscaler,
ESS,管控以及节点本身(准备或清理)。根据场景不同,我们需要排查不同的组件。其中 Cluster
Autoscaler 是一个普通的 Pod,其日志的获取和其他 Pod 无异;ESS 弹性伸缩有其专门的控制台,我
们可以在控制台排查其伸缩配置、伸缩规则等相关子实例日志和状态;而管控的日志,可以通过查看日
志功能来查看;最后,对于节点的准备与清理,其实就是排查对应的脚本的执行过程。
以上讲道理居多,希望对大家排查问题有所帮助。
简介:不知道大家有没有意识到一个现实,就是大部分时候,我们已经不像以前一样,通过命令
行,或者可视窗口来使用一个系统了。现在我们上微博、或者网购,操作的其实不是眼前这台设
备,而是一个又一个集群。
通常,这样的集群拥有成百上千个节点,每个节点是一台物理机或虚拟机。
不知道大家有没有意识到一个现实,就是大部分时候,我们已经不像以前一样,通过命令行,或者可视
窗口来使用一个系统了。现在我们上微博、或者网购,操作的其实不是眼前这台设备,而是一个又一个
集群。
![](https://csdnimg.cn/release/download_crawler_static/13090580/bg12.jpg)
通常,这样的集群拥有成百上千个节点,每个节点是一台物理机或虚拟机。集群一般远离用户,坐落在
数据中心。为了让这些节点互相协作,对外提供一致且高效的服务,集群需要操作系统。Kubernetes
就是这样的操作系统。
比较 Kubernetes 和单机操作系统,Kubernetes 相当于内核,它负责集群软硬件资源管理,并对外提
供统一的入口,用户可以通过这个入口来使用集群,和集群沟通。
而运行在集群之上的程序,与普通程序有很大的不同。这样的程序,是“关在笼子里”的程序。它们从被
制作,到被部署,再到被使用,都不寻常。我们只有深挖根源,才能理解其本质。
第四部分:认证与调度
4.1 “关在笼子里”的程序
4.1.1 代码
我们使用 go 语言写了一个简单的 web 服务器程序 app.go,这个程序监听在 2580 这个端口。通过
http 协议访问这个服务的根路径,服务会返回“This is a small app for kubernetes…”字符串。
package main
import (
"github.com/gorilla/mux"
"log"
"net/http"
)
剩余85页未读,继续阅读
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://profile-avatar.csdnimg.cn/33e2df94a6284db38ab555e413a725f9_weixin_43334786.jpg!1)
![](https://csdnimg.cn/release/wenkucmsfe/public/img/user-vip.1c89f3c5.png)
Dustin.Hoffman
- 粉丝: 354
- 资源: 6
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![](https://csdnimg.cn/release/wenkucmsfe/public/img/voice.245cc511.png)
最新资源
- 中国微型数字传声器:技术革新与市场前景
- 智能安防:基于Hi3515的嵌入式云台控制系统设计
- 手机电量低时辐射真增千倍?解析手机使用谣言
- 56F803型DSP驱动的高精度大功率超声波电源控制策略研究
- ARM与GPRS结合的远程监测系统设计
- GPS与RFID技术结合的智能巡检系统设计
- CPLD驱动的低功耗爆炸场温度测试系统设计
- 基于FPGA的智能驱动控制系统:可扩展设计与工业网络协议
- 基于ATmega128和CH374的嵌入式USB接口设计
- 基于AT89C52的温度补偿超声波测距仪:高精度设计与应用
- MSP430F448单片机在交流数字电压表中的应用
- 提升变频器应用效率的12项实用技巧
- STM32F103在数字电镀电源并联均流系统中的应用
- PSpice仿真下的升压开关电源设计:拓扑分析与CCM稳定性提升
- 轻巧高效:MSP430主导的低成本无线传感器网络节点设计
- FPGA在EDA/PLD中实现LVDS接口的应用解析
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035111.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![](https://csdnimg.cn/release/wenkucmsfe/public/img/green-success.6a4acb44.png)