别再死磕 K8s 文档了:一个“亚马逊仓库”的比喻,把 Kubernetes 全部讲透

别再死磕 K8s 文档了:一个“亚马逊仓库”的比喻,把 Kubernetes 全部讲透

💡 原文中文,约9000字,阅读约需22分钟。
📝

内容提要

Kubernetes的核心是声明期望状态,系统自动将实际状态向期望状态靠拢。文章用亚马逊仓库比喻解释各组件:apiserver是唯一入口,etcd是真相账本,controller-manager发现差距,scheduler分配位置,kubelet执行落地,kube-proxy和EndpointSlices负责流量路由。控制面管理集群,数据面处理业务流量,Ingress可绕过kube-proxy直连Pod。

🔎

延伸解读

为什么“期望状态”是理解 K8s 的钥匙

文章反复强调,Kubernetes 的核心不是一堆组件,而是“声明期望状态,系统自动逼近”的哲学。这个类比(定速巡航)非常关键:你只设定目标,系统负责执行。理解这一点,再看 apiserver、etcd 等组件,就会明白它们都是为了实现这个闭环而存在。如果一开始就陷入术语,很容易迷失方向。

控制面与数据面的分离:性能的关键

文章特别指出,管理集群(控制面)和路由业务流量(数据面)是两码事。用户请求不会经过 apiserver 或 etcd,而是通过 kube-proxy 或 Ingress 直达 Pod。这种解耦设计让控制面专注于状态管理,数据面专注于性能。现代 Ingress 甚至绕开 kube-proxy,直接基于 EndpointSlices 路由,进一步降低延迟。

EndpointSlices:大规模集群的救星

文章解释了为什么 EndpointSlices 比 Endpoints 更高效:在万级节点集群中,每次 Pod 变化都更新整份清单会拖垮系统。EndpointSlices 将清单拆分成小分册,只更新受影响的部分,大幅减少网络和计算开销。这个机制是支撑大规模集群的关键,也是理解现代 K8s 网络的重要一环。

Q&A

Kubernetes 的核心哲学是什么?

Kubernetes 的核心哲学是声明期望状态(Desired State),系统自动将实际状态向期望状态靠拢。你只需要告诉系统你想要什么,系统会持续调整,使现实逼近你的期望。

在 Kubernetes 中,kube-apiserver 的作用是什么?

kube-apiserver 是整个集群的唯一入口,所有请求都必须经过它。它负责身份认证、权限校验和准入控制,只有通过这三道关卡,请求才会被处理。

etcd 在 Kubernetes 中扮演什么角色?

etcd 是集群的真相来源,存储所有配置和状态信息。只有 kube-apiserver 能直接读写 etcd,其他组件不能直接访问。生产环境中 etcd 通常以集群形式运行,保证高可用。

kube-controller-manager 是如何工作的?

kube-controller-manager 负责监控实际状态与期望状态的差异,并采取行动。它包含多个子控制器,如 Deployment Controller、ReplicaSet Controller 和 Node Controller,每个都执行监听、对比、行动的循环。

kube-scheduler 如何决定 Pod 在哪个节点上运行?

kube-scheduler 通过过滤和打分来选择节点。首先过滤掉不满足条件的节点,然后对剩余节点打分,选择得分最高的节点进行绑定。

kubelet 的主要职责是什么?

kubelet 是每个节点上的代理,负责启动和管理 Pod。它监听 apiserver 获取分配给本节点的 Pod,调用容器运行时启动容器,进行健康检查并汇报状态。

kube-proxy 在 Kubernetes 中起什么作用?

kube-proxy 运行在每个节点上,维护路由规则,将 Service 的流量转发到后端 Pod。它自动更新路由表,确保流量始终导向健康的 Pod。

Service 在 Kubernetes 中解决了什么问题?

Service 为 Pod 提供稳定的访问入口,因为 Pod 的 IP 是临时的。Service 的 IP 和 DNS 名称固定不变,通过 kube-proxy 自动将请求路由到当前健康的 Pod,实现客户端与 Pod 的解耦。

EndpointSlices 相比 Endpoints 有什么优势?

EndpointSlices 将 Endpoints 拆分成多个小分册,每个分册最多包含 100 个 IP。这样当 Pod 变化时,只需更新对应的分册,减少了大规模集群中的更新开销,避免了资源风暴。

外部流量如何进入 Kubernetes 集群并到达 Pod?

外部流量通过云负载均衡器进入,然后转发给 Ingress Controller(如 NGINX、Envoy),Ingress Controller 直接绕开 kube-proxy,基于 EndpointSlices 将流量路由到目标 Pod IP,实现高性能直连。

🏷️

标签

➡️

继续阅读