一、前言
- Kubernetes(简称K8S)是开源的容器集群管理系统,可以实现容器集群的自动化部署、自动扩缩容、维护等功能。它既是一款容器编排工具,也是全新的基于容器技术的分布式架构领先方案。在Docker技术的基础上,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等功能,提高了大规模容器集群管理的便捷性。【Kubernetes是容器集群管理工具】
文章内容可以过多,限于文章篇幅,没办法为大家展示全部内容,有感兴趣想要获取学习的朋友,可以点击此处来获取就可以了!
理论篇
第一部分:理解控制器
当我们尝试去理解 Kubernetes 集群工作原理的时候,控制器肯定是一个难点。这是因为控制器有很多,具体实现大相径庭;且控制器的实现用到了一些较为晦涩的机制,不易理解。但是,我们又不能绕过控制器,因为它是集群的“大脑”。
第二部分:网络详解
阿里云 Kubernetes 集群网络目前有两种方案,一种是 flannel 方案,另外一种是基于calico 和弹性网卡 eni 的 terway 方案。Terway 和 flannel 类似,不同的地方在于,terway 支持Pod 弹性网卡,以及 NetworkPolicy 功能。
第三部分:伸缩原理
阿里云 Kubernetes 集群的一个重要特性,是集群的节点可以动态地增加或减少。有了这个特性,集群才能在计算资源不足的情况下扩容新的节点,同时也可以在资源利用率降低的时候,释放放节点以节省费用。
第四部分:认证与调度
在这, 我们以一个简单的容器化 web 程序为例,着重分析了客户端怎么样通过 Kubernetes 集群 APIServer 认证,以及容器应用怎么样被分派到合适节点这两件事情。
在分析过程中,我们弃用了一些便利的工具,比如 kubectl,或者控制台。我们用了一些更接近底层的小实验,比如拆解 KubeConfig 文件,再比如分析调度器日志来分析认证和调度算法的运作原理。希望这些能对大家进一步理解 Kubernetes 集群有所帮助。
第五部分:服务原理
理解 Kubernetes 集群服务的概念,是比较不容易的一件事情。尤其是当我们基于似是而非的理解,去排查服务相关问题的时候,会非常不顺利。
这体现在,对于新手来说,ping 不同服务的 IP 地址这样基础的问题,都很难理解;而就算对方经验很丰富的工程师来说,看懂服务相关的 iptables 配置,也是相当的挑战。
这部分来深入解释一下 Kubernetes 集群服务的原理与实现,便于大家理解。
第六部分:镜像自动拉取
相比 Kubernetes 集群的其他功能,私有镜像的自动拉取,看起来可能是比较简单的。而镜像拉取失败,大多数情况下都和权限有关。所以,在处理相关问题的时候,我们往往会轻松地说:这问题很简单,肯定是权限问题。但实际的情况是,我们经常为一个问题,花了多个人的时间却找不到原因。这主要还是我们对镜像拉取,特别是私有镜像自动拉取的原理理解不深。这篇文章,作者将带领大家讨论下相关原理。
实践篇
第七部分:节点就绪的问题之一
排查完全陌生的问题,完全不熟悉的系统组件,是售后工程师的一大工作乐趣,当然也是挑战。今天借这篇文章,跟大家分析一例这样的问题。排查过程中,需要理解一些自己完全陌生的组件,比如 systemd 和 dbus。
第八部分:节点就绪问题之二
之前分享过一例集群节点 NotReady 的问题。在那个问题中,我们的排查路径,从 Kubernetes 集群到容器运行时,再到 sdbus 和 systemd,不可谓不复杂。那个问题目前已经在解决 systemd 中做了修复,所以以前基本上能看到那个问题的几率是越来越低了。
但是,集群节点就绪问题还是有的,然而原因却有所不同。
这部分跟大家分享另外一例集群节点 NotReady 的问题。这个问题和之前那个问题相比,查路径完全不同。作为姊妹篇分享给大家。
第九部分:命名空间删除问题
阿里云售后技术团队的同学,每天都在处理各式各样千奇百怪的线上问题。常见的有,网络连接失败,服务器宕机,性能不达标,请求响应慢等情况。但如果要评选,什么问题看起来微不足道事实上却足以让人绞尽脑汁,我相信答案肯定是“删不掉”的问题。比如文件删不掉,进程结束不掉,驱动卸载不了等。这样的问题就像冰山,隐藏在它们背后的复杂逻辑,往往超过我们的预想。
第十部分:集群安全组配置管理
阿里云容器产品 Kubernetes 版本,即 ACK,基于阿里云 IaaS 层云资源创建。资源包括云服务器 ECS,专有网络 VPC,弹性伸缩 ESS 等。以这些资源为基础,ACK 产品实现了 Kubernetes 集群的节点,网络,自动伸缩等组件和功能。
一般而言,用户对 ACK 产品有很大的管理权限,这包括集群扩容,创建服务等。与此同时,用户可以绕圈过去 ACK 产品,对集群底层资源进行修改。如释放 ECS,删除 SLB。如果不能理清背后的影响,这样的修改会损坏集群功能。
这部分会以 ACK 产品安全组的配置管理为核心,深入讨论安全组在集群中扮演的角色,安全组在网络链路中所处的位置,以及非法修改安全组会产生的各类问题。文章内容适用于专有集群和托管集群。
第十一部分:二分之一活的微服务
Istio is the future!基本上,我相信对云原生技术趋势有些微判断的同学,都会有这个感悟。其背后的逻辑其实是比较简单的:当容器集群,特别是 Kubernetes 成为事实上的标准之后,应用必然会不断地复杂化,服务治理肯定会成为强需求
第十二部分:服务网格证书过期问题
客户某一台 Kubernetes 集群节点重启之后,他再也无法创建 Istio 虚拟服务和 Pod 了。一来对 Istio 还不是那么熟悉,二来时间可能有点晚,脑子还在懵圈中,本来一个应该比较轻松解决掉的问题,花了几十分钟看代码,处理的惨不忍睹。最终还是在某位大神的帮助下,解决了问题。鉴于此问题,以及相关报错,在网上找不到对应的文章,所以这里分享下这个问题,避免后来的同学,在同样的地方踩坑。另外谨以此篇致敬工作中遇到过的大神!
总结
也许你在学习和实践上也有过这样的难点与困惑:
网上检索大量资料来学习,往往会一头雾水,找不到正确的切入点;而官方文档像工具书一样晦涩难懂,往往学起来不得其法,事倍功半。
大部分图书更为体系化,但重理论多于实践,而实践经验才是帮助你在工作中快速上手,真正落地到自己的项目中的助推剂。
自己“硬啃”Kubernetes源码,但这注定是一条非常非常非常难的路。别问我为什么知道,因为我就是这么死磕代码过来的。
如果你对学习Kubernetes存在以上问题或者无从下手,这份手册可以很好地帮助到你,有需要的话可以点击此处来获取就可以了!