这一章节,我们讨论阿里云 K8S 集群扩容与缩容的实现原理。理解实现原理,在遇到问题的时候,我们就可以高效地排查并定位原因。我们的讨论基于当前的1.12.6 版本。
-
节点增加原理
-
手动添加已有节点
-
自动添加已有节点
-
集群扩容
-
自动伸缩
-
节点减少原理
认证与调度
不知道大家有没有意识到一个现实,就是大部分时候,我们已经不像以前一样,通过命令行,或者可视窗口来使用一个系统了。现在我们上微博、或者网购,操作的其实不是眼前这台设备,而是一个又一个集群。
通常,这样的集群拥有成百上千个节点,每个节点都是一台物理机或虚拟机。集群一般远离用户,坐落在数据中心。为了让这些节点互相协作,对外提供一致且高效的服务,集群需要操作系统。Kubernetes 就是这样的操作系统。
比较 Kubernetes 和单机操作系统,Kubernetes 相当于内核,它负责集群软硬件资源管理,并对外提供统一的入口,用户可以通过这个入口来使用集群,和集群沟通。
而运行在集群之上的程序,与普通程序有很大的不同。这样的程序,是“关在笼子里”的程序。它们从被制作,到被部署,再到被使用,都不寻常。我们只有深挖根源,才能理解其本质。
在这节中,我们以一个简单的容器化web程序为例,着重分析了客户端怎么样通过Kubernetes集群API Server认证,以及容器应用怎么样被分派到合适节点这两件事情。
-
“关在笼子里”的程序
-
双向数字证书验证
-
KubeConfig文件
-
Pod配置
集群服务的三个要点和一种实现
理解 K8S 集群服务的概念,是比较不容易的一件事情。尤其是当我们基于似是而非的理解,去排查服务相关问题的时候,会非常不顺利。
这体现在,对于新手来说,ping 不通服务的 IP 地址这样基础的问题,都很难理解;而就算对经验很丰富的工程师来说,看懂服务相关的 iptables 配置,也是相当的挑战。
这一章节,将深入解释一下 K8S 集群服务的原理与实现,便于大家理解。
-
K8S集群服务的本质是什么
-
自带通信员
-
把服务照进现实
-
过滤器框架
-
节点网络
-
升级过滤器框架
-
用自定义链实现服务的反向代理
镜像拉取
相比 K8s 集群的其他功能,私有镜像的自动拉取,看起来可能是比较简单的。而镜像拉取失败,大多数情况下都和权限有关。所以,在处理相关问题的时候,我们往往会轻松的说:这问题很简单,肯定是权限问题。但实际的情况是,我们经常为一个问题,花了多个人的时间却找不到原因。这主要还是我们对镜像拉取,特别是私有镜像自动拉取的原理理解不深。
-
理解OAuth2.0协议
-
Docker扮演的角色
-
K8s实现的私有镜像自动拉取
-
阿里云实现的Acr credential helper
实践
==
读懂这一篇,集群节点不下线
排查完全陌生的问题,完全不熟悉的系统组件,是售后工程师的一大工作乐趣,当然也是挑战。今天借这个章节,跟大家分析一例这样的问题。排查过程中,需要理解一些自己完全陌生的组件,比如 systemd 和 dbus。但是排查问题的思路和方法基本上还是可以复用了,希望对大家有所帮助。
-
需要知道的Kubernetes知识
-
什么是PLEG
-
容器runtime
-
Docker Daemon调用栈分析
-
Containerd调用栈分析
-
什么是Dbus
-
RunC请求Dbus
-
Systemd
-
Live Debugging
-
问题修复
节点下线姊妹篇
之前分享过一例集群节点 NotReady 的问题。在那个问题中,我们的排查路劲,从 K8S 集群到容器运行时,再到 sdbus 和 systemd,不可谓不复杂。那个问题目前已经在 systemd 中做了修复,所以基本上能看到那个问题的几率是越来越低了。
但是,集群节点就绪问题还是有的,然而原因却有所不同。
这一章节,跟大家分享另外一例集群节点 NotReady 的问题。这个问题和之前那个问题相比,排查路劲完全不同。作为姊妹篇分享给大家。
-
问题现象
-
止步不前的 PLEG
-
无响应的 Terwayd
我们为什么会删除不了集群的命名空间?
阿里云售后技术团队的同学,每天都在处理各式各样千奇百怪的线上问题。常见的有,网络连接失败,服务器宕机,性能不达标,请求响应慢等。但如果要评选,什么问题看起来微不足道事实上却足以让人绞尽脑汁,我相信答案肯定是“删不掉”的问题。比如文件删不掉,进程结束不掉,驱动卸载不了等。
这样的问题就像冰山,隐藏在它们背后的复杂逻辑,往往超过我们的预想。
-
从集群入口开始
-
Controller 在做什么?
-
API、Group、Version
-
Controller 为什么不能删除命名空间里的资源
-
节点与 Pod 之间的通信
-
Route Controller 为什么不工作?
-
集群节点访问云资源
阿里云ACK产品安全组配置管理
阿里云容器产品 Kubernetes 版本,即 ACK,基于阿里云 IaaS 层云资源创建。资源包括云服务器 ECS,专有网络 VPC,弹性伸缩 ESS 等。以这些资源为基础,ACK 产品实现了 Kubernetes 集群的节点,网络,自动伸缩等组件和功能。
一般而言,用户对 ACK 产品有很大的管理权限,这包括集群扩容,创建服务等。与此同时,用户可以绕过 ACK 产品,对集群底层云资源进行修改。如释放 ECS,删除 SLB。如果不能理清背后的影响,这样的修改会损坏集群功能。
这一章节会以 ACK 产品安全组的配置管理为核心,深入讨论安全组在集群中扮演的角色,安全组在网络链路中所处的位置,以及非法修改安全组会产生的各类问题。文章内容适用于专有集群和托管集群。
-
安全组在 ACK 产品中扮演的角色
-
安全组与 ACK 集群网络
-
怎么样管理 ACK 集群的安全组规则
-
限制集群访问外网
-
IDC 与集群互访
-
使用新的安全组管理节点
读者福利
分享一份自己整理好的Java面试手册,还有一些面试题pdf
不要停下自己学习的脚步
中扮演的角色
-
安全组与 ACK 集群网络
-
怎么样管理 ACK 集群的安全组规则
-
限制集群访问外网
-
IDC 与集群互访
-
使用新的安全组管理节点
读者福利
分享一份自己整理好的Java面试手册,还有一些面试题pdf
不要停下自己学习的脚步
[外链图片转存中…(img-MQtvTkuK-1714803805205)]
[外链图片转存中…(img-LlClYoPj-1714803805206)]