膜拜!阿里内部都在强推的 K8S(kubernetes) 学习指南,不能再详细了
容器技术本身偏向运维,namespace 资源隔离、cgroups 资源限制等概念,对开发者来说,理解起来比较困难。这几年,在跟朋友探讨 k8s 落地时,也有一些问题被反反复复地提及,比如:
为什么容器里只能跑“一个进程”?
原先一直用的某个 JVM 参数,在容器里就不好使了?
为什么 kubernetes 不能固定 IP 地址?容器网络连不通,该如何 debug?
k8s 中 statefulSet 和 operator 到底什么区别?pv 和 pvc 又该怎么用?
这些问题的答案和原理并不复杂。但对初学者来说,很难用一两句话就解释清楚。因为容器技术涉及操作系统、网络、存储、调度、分布式原理等等方方面面的知识,是个名副其实的全栈技术。
而其技术体系里那些“牵一发而动全身”的主线,比如 Linux 进程模型对容器本身的重要意义,“控制器”模式对整个 k8s 项目提纲挈领的作用等等,并不会详细展现在 docker 或 kubernetes 官方文档中,但偏偏就是它们,才是掌握容器技术体系的精髓所在。
在这里分享我偶然间得到的一份文档,该文档将 K8S 分为理论和实践两个部分进行讲解,双管齐下,事半功倍。
限于文章篇幅原因,只能以截图的形式展示出来,有需要的小伙伴 点击这里凭本文截图即可获取!
理论模块
理解集群控制器
基本上来说,K8S 集群的控制器,其实扮演着集群大脑的角色。有了控制器,K8S 集群才有机会摆脱机械和被动,变成一个自动、智能、有大用的系统。
控制器原理
统一入口
控制器
控制器管理器
SharedInformer
ListWatcher
服务控制器
路由控制器

集群网络详解
我们主要通过网络搭建和通信两个角度去分析 K8S 集群网络。其中网络搭建包括初始阶段,集群阶段,节点阶段以及 Pod 阶段,这么分类有助于我们理解这些复杂的配置。而理解了各个配置,集群通信原理就比较容易理解了。
集群网络搭建
通信

集群伸缩原理
总体上来说,K8S 集群节点的增加与减少,主要涉及四个组件,分别是 Cluster Autoscaler,ESS, 管控以及节点本身(准备或清理)。根据场景不同,我们需要排查不同的组件。其中 Cluster Autoscaler 是一个普通的 Pod,其日志的获取和其他 Pod 无异;ESS 弹性伸缩有其专门的控制台,我们可以在控制台排查其伸缩配置、伸缩规则等相关子实例日志和状态;而管控的日志,可以通过查看日志功能来查看;最后,对于节点的准备与清理,其实就是排查对应的脚本的执行过程。
节点增加原理
手动添加已有节点
自动添加已有节点
集群扩容
自动伸缩
节点减少原理

认证与调度
在这节中,我们以一个简单的容器化 web 程序为例,着重分析了客户端怎么样通过 Kubernetes 集群 API Server 认证,以及容器应用怎么样被分派到合适节点这两件事情。
“关在笼子里”的程序
双向数字证书验证
KubeConfig 文件
Pod 配置

集群服务的三个要点和一种实现
K8S 集群服务的本质是什么
自带通信员
把服务照进现实
过滤器框架
节点网络
升级过滤器框架
用自定义链实现服务的反向代理

镜像拉取
理解 OAuth2.0 协议
Docker 扮演的角色
K8s 实现的私有镜像自动拉取
阿里云实现的 Acr credential helper

实践模块
读懂这一篇,集群节点不下线
需要知道的 Kubernetes 知识
什么是 PLEG
容器 runtime
Docker Daemon 调用栈分析
Containerd 调用栈分析
什么是 Dbus
RunC 请求 Dbus
Systemd
Live Debugging
问题修复

节点下线姊妹篇
问题现象
止步不前的 PLEG
无响应的 Terwayd

我们为什么会删除不了集群的命名空间?
从集群入口开始
Controller 在做什么?
API、Group、Version
Controller 为什么不能删除命名空间里的资源
节点与 Pod 之间的通信
Route Controller 为什么不工作?
集群节点访问云资源

阿里云 ACK 产品安全组配置管理
安全组在 ACK 产品中扮演的角色
安全组与 ACK 集群网络
怎么样管理 ACK 集群的安全组规则
限制集群访问外网
IDC 与集群互访
使用新的安全组管理节点
典型问题与解决方案
使用多个安全组管理集群节点
限制集群访问公网或者运营级 NAT 保留地址
容器组跨节点通信异常

二分之一活的微服务
代理与代理的生命周期管理
就绪检查的实现
控制面和数据面

半夜两点 Ca 证书过期问题处理惨况总结
不断重启的 Citadel
一般意义上的证书验证
Citadel 证书体系

限于文章篇幅原因,就展示到这里了,有需要的小伙伴 点击这里凭本文截图即可获取!
评论