Kubernetes 学习路线:从集群实操一路读到源码

Kubernetes 的资料不少,但「会用」和「懂它为什么这样做」之间隔着一整套源码。按一条实战到源码的路线来梳理,每个组件该读哪块代码、读到什么程度,其实是有章可循的。下面这张全景图可以先当目录看:

图片[1]-Kubernetes 学习路线:从集群实操一路读到源码-星海夜航

先把集群跑起来

起点是四件事:理解核心对象概念、用 kubeadm 十分钟拉起一个集群、部署第一个应用、再给应用加 Service 做扩容和滚动更新。中间可以装个 Kuboard,在页面上直观地看集群里发生了什么。这一步的目的是后面读源码时脑子里有实物。

从 kubectl 入手读代码

一次 kubectl 请求是怎么发出去的,是最好的第一条线索:命令解析用的 cobra,命令分成七大组,还能开 pprof 抓火焰图。create 命令的执行流程里能看到两个设计模式的实际应用——builder 建造者模式和 visitor 访问者模式。理解了 kubectl,再去看 apiserver:启动主流程、认证(Authentication)、鉴权(Authorization,node 限制和 RBAC 两种)、审计(audit)、准入控制器(admission),还可以顺手写一个自定义准入控制器,给 Pod 注入 nginx sidecar。

调度与控制器的骨架

kube-scheduler 部分把几个通用机制一次讲透:leaderelection 选主、事件广播器、informer,然后才是利用 informer 调度 Pod。kube-controller-manager 是各种控制器的宿主,从 ReplicaSet 和它的控制器入门,再逐个啃 Job/CronJob、Deployment(同步、暂停回滚、扩缩容、滚动更新)、DaemonSet、StatefulSet(含动态 PV 准备)。

kubelet:源码里最厚的一块

kubelet 管一台节点上容器的整个生命周期:启动主流程、节点自注册、基于 NodeStatus 和 lease 的心跳、syncLoop 的四路监听(configCh、housekeepingCh、syncCh、healthmanager)、podManager 内存管理、volumeManager 的理想状态与 reconciler、statusManager、probeManager 健康检查。

稳定性线:Eviction 驱逐、容器 QoS 与 OOMScoreAdj、oomWatcher。资源管理线:cgroupManager(cgroupv1/v2 的 CPU、内存限制)、cpuManager、memoryManager、deviceManager 和 TopologyManager。再往下是 containerRuntime 与 sandbox/init 容器的创建停止流程、内置 cadvisor,以及容器底层原理:namespace、cgroups、CRI 与 dockershim 的去留、OCI 镜像规范、联合文件系统。

网络、存储与弹性伸缩

网络从 Service 的四种类型、负载均衡和服务发现模式入手,底层看 kube-proxy 的 iptables/ipvs 规则同步(syncProxyRules)、Pod 间通信、CNI 与 calico 插件、Ingress 七层路由(traefik)。存储看 PV/PVC 控制器源码的 volumeWorker、reclaimVolume、claimWorker,配置对象对应 configMap/secret 在 kubelet 里的挂载流程。

弹性伸缩:HPA 调谐过程、metrics-server 与 kubelet top 原理、基于 prometheus-adapter 的自定义指标扩容、VPA 三件套(Recommender/Updater/AdmissionController);最后用 kubebuilder 写一个 CRD 自定义控制器跑起来。服务网格方向是 istio 的安装与流量管理、Sidecar 注入与流量劫持、xDS 协议与 istiod/pilot-agent 分析,加上 envoy 的动态端点发现(EDS/CDS)。

怎么推进

顺序就是上面的依赖关系:没跑过集群别急着开 IDE;kubectl 到 apiserver 是「一次请求的一生」;控制器部分挑 Deployment 读透,其余都是同一套骨架。读每个组件前先在实操里复现它的行为(比如故意把 Service 配错),带着现象进代码,进度会快很多。

© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容