一直关注云计算领域的人,必定知道Kubernetes的崛起。
如今,世界范围内的公有云巨头(谷歌、亚马逊、微软、华为云、阿里云等等)都在其传统的公共云服务之上提供托管的Kubernetes服务。而且云服务龙头AWS也终于落地,进入企业商用K8s软件市场,这让它成了可以通吃主流公私有云的唯一基础架构平台。
可以看出,不少年薪30w及以上的运维岗位,都要求会K8s技术了。K8s 凭借在扩展性、管理、大数据分析、网络场景、兼容性、负载均衡、灰度升级、失败冗余、容灾恢复、 DevOps 等方面的优势,受到不少企业的青睐。
今天给大家分享一份阿里内部流传的《Kubernetes实战手册》 ,该文档将K8S分为理论和实践两个部分进行讲解,双管齐下,事半功倍,让你能够迅速搞懂核心原理,吃透基础理论,一次学会并开始使用K8s!
这份资料分为理论篇和实战篇
理论篇
这么理解集群控制器,能行!
基本上来说,K8S 集群的控制器,其实扮演着集群大脑的角色。有了控制器,
K8S 集群才有机会摆脱机械和被动,变成一个自动、智能、有大用的系统。
集群网络详解
我们主要通过网络搭建和通信两个角度去分析 K8S 集群网络。其中网络搭建包括初始阶段,集群阶段,节点阶段以及 Pod 阶段,这么分类有助于我们理解这些复杂的配置。而理解了各个配置,集群通信原理就比较容易理解了。
集群伸缩原理
总体上来说,K8S 集群节点的增加与减少,主要涉及四个组件,分别是 Cluster Autoscaler,ESS,管控以及节点本身(准备或清理)。根据场景不同,我们需要排查不同的组件。其中 Cluster Autoscaler 是一个普通的 Pod,其日志的获取和其他Pod 无异;ESS 弹性伸缩有其专门的控制台,我们可以在控制台排查其伸缩配置、伸缩规则等相关子实例日志和状态;而管控的日志,可以通过查看日志功能来查看;最后,对于节点的准备与清理,其实就是排查对应的脚本的执行过程
认证与调度
在这篇文章中,我们以一个简单的容器化 web 程序为例,着重分析了客户端怎么样通过 Kubernetes 集群 API Server 认证,以及容器应用怎么样被分派到合适节。
在分析过程中,我们弃用了一些便利的工具,比如 kubectl,或者控制台。我们用了一些更接近底层的小实验,比如拆解 KubeConfig 文件,再比如分析调度器日志来分析认证和调度算法的运作原理。希望这些对大家进一步理解 Kubernetes 集群有所帮助。
集群服务的三个要点和一种实现
我们基本上需要把握三个要点。一、服务本质上是负载均衡;二、服务负载均衡的实现采用了与服务网格类似的 Sidecar 的模式,而不是 LVS 类型的独占模式;三、kube-proxy 本质上是一个集群控制器。除此之外,我们思考了过滤器框架的设计,并在此基础上,理解使用 iptables 实现的服务负载均衡的原理。
镜像拉取这件小事
理解私有镜像自动拉取的实现,有一个难点和一个重点。难点是 OAuth 2.0 安全协议的原理,上文主要分析了为什么 OAuth 会这么设计;重点是集群控制器原理,因为整个自动化的过程,实际上是包括 Admission control 和 Acr credential helper 在内的多个控制器协作的结果。
实践篇
读懂这一篇,集群节点不下线
这个问题根本原因肯定在 systemd,但是 runC 的函数 UseSystemd 使用不那
么美丽的方法,去测试 systemd 的功能,而这个函数在整个容器生命周期管理过程
中,被频繁的触发,让这个低概率问题的发生成为了可能。systemd 的修复已经被
红帽接受,预期不久的将来,我们可以通过升级 systemd,从根本上解决这个问题。
节点下线姊妹篇
在节点就绪状态这种场景下,kubelet 实际上实现了节点的心跳机制。kubelet 会定期把节点相关的各种状态,包括内存,PID,磁盘,当然包括这个文章中关注的就绪状态等,同步到集群管控。kubelet 在监控或者管理集群节点的过程中,使用了各种插件来直接操作节点资源。这包括网络,磁盘,甚至容器运行时等插件,这些插件的状况,会直接应用 kubelet 甚至节点的状态。
我们为什么会删除不了集群的命名空间?
K8S 集群命名空间删除不掉的问题,是线上比较常见的一个问题。这个问题看起来无关痛痒,但实际上不仅复杂,而且意味着集群重要功能的缺失。这篇文章全面分析了一个这样的问题,其中的排查方法和原理,希望对大家排查类似问题有一定的帮助。
阿里云ACK产品安全组配置管理
从三个方面,深入讨论了阿里云 ACK 产品安全组配置管理。这三个方面分别安全组在集群中扮演的角色,安全组与集群网络,以及常见问题和解决方案。同时通过分析,可以看到 ACK 产品安全组配置管理的三个重点,分别是集群的外网访问控制,集群容器组之间跨节点访问,以及集群使用多个安全组管理。与这三个重点对于的,就是三类常见的问题。
二分之一活的微服务
这其实是一个比较简单的问题,排查过程其实也就几分钟。但是写这篇文章,有点感觉是在看长安十二时辰,短短几分钟的排查过程,写完整背后的原理,前因后果,却花了几个小时。这是 Istio 文章的第一篇,希望在大家排查问题的时候,有所帮助。
半夜两点Ca证书过期问题处理惨况总结
在 Istio 比较早期的版本中,自签名 Ca 证书有效期只有一年时间,如果使用老版本 Istio 超过一年,就会遇到这个问题。当证书过期之后,我们创建新的虚拟服务或者 pod,都会因为 CA 证书过期而失败。而这时如果 Citadel 重启,它会读取过期证书并验证其有效性,就会出现以上 Cidatel 不能启动的问题。
这个 Ca 证书在 K8s 集群中,是以 istio-ca-secret 命名的 secret,我们可以使用 openssl 解码证书来查看有效期。这个问题比较简单的处理方法,就是删除这个Secret,并重启 Citadel,这时 Citadel 会走向新建和验证自签名 Ca 证书的逻辑并刷新 Ca 证书。或者参考以下官网处理方式。