在 云计算与微服务架构领域,面试题里没有“Kubernetes”(通常简称为K8s)的大厂架构师,大约只有两类人:一类是还在写单体代码的资深开发,另一类是还没重构代码的前端工程师。
很多人在日常工作中会使用K8s,甚至使用Helm或Kustomize编写YAML文件部署应用,但对于“K8s到底为什么是这样设计的?”、“核心控制面是如何工作的?”这些问题,往往知其然而不知其所以然。
作为一名资深架构师,本文将带你跳出命令行的操作层面,从系统架构、核心控制原理、关键设计理念三个维度,对K8s进行一次深度全解。
一、 K8s的本质:为什么我们需要它?
在深入原理之前,必须明确K8s的市场定位。Docker解决了单机容器的打包和运行问题,极大地提高了应用交付的效率。但是,当线上需要运行1000个微服务实例,且在不同负载下需要动态扩展时,单纯靠Docker Swarm或Shell脚本已经无法满足需求。
K8s(Kubernetes)本质上是一个开源的、用于自动部署、扩展和管理容器化应用程序的系统。
它的核心使命是:
编排:决定容器在哪个节点上运行。
维护:当节点宕机时,自动在其他节点重构容器。
发现与负载均衡:让外部流量能稳定地访问到内部成百上千个Pod。
二、 系统架构:大脑、手脚与中枢神经
K8s采用了经典的主从架构,可以将其比喻为一个生命体:
控制平面:大脑(负责决策)
工作节点:手脚(负责干活)
Master节点
Master节点是集群的大脑,负责管理整个集群的状态。其核心组件包括:
API Server (kube-apiserver):集群的统一入口。所有的请求(无论是管理员用kubectl发来的,还是内部的Controller发来的)都必须经过这里。它负责认证、授权,并存储数据到Etcd。
Etcd:高可用的键值数据库。它是集群的“记事本”或“唯一定义者”。所有的集群状态(比如:“Pod 1应该在节点A上”)都保存在Etcd中。K8s的所有操作都是围绕读取和更新Etcd中的数据进行的。
Scheduler (kube-scheduler):调度员。当用户提交一个未分配节点的Pod时,Scheduler会根据资源要求、亲和性(亲和/反亲和)、硬件限制等因素,计算哪个节点最合适,并将其标记到该节点。
Controller Manager (kube-controller-manager):控制循环的大管家。它的职责是维护集群状态,确保实际状态与期望状态一致。比如,用户想运行3个Nginx副本,假如死了2个,Controller会及时感知并启动新的Pod补齐。
Worker节点 (工作节点)
Worker节点负责运行实际的应用容器。一个Node至少包含以下三个组件:
Kubelet:工作节点的代理。它订阅Master发来的指令(来自API Server),并告诉Docker/Containerd去启动、停止或重启容器。
kube-proxy:维护网络规则。它负责在网络层实现Service与Pod的代理和负载均衡,保证服务发现的稳定性。
Container Runtime (如Containerd/CRI-O):真正的容器运行环境,负责拉取镜像、运行容器。
三、 核心原理:控制循环与声明式API
这是理解K8s最关键的部分,也是架构师面试的必考点。
控制循环
K8s的大部分功能是由无数个后台的“死循环”驱动的。你可以把每一个控制器看作一个侦探或法官,流程如下:

从Etcd读取当前系统状态。
与期望状态对比(这个状态是用户在YAML文件里定义的)。
如果实际状态 != 期望状态,则采取行动调整系统(比如创建、删除、重启Pod)。
再次(循环)。
正是这种“监控-比对-修正”的机制,赋予了K8s极强的自愈能力。
声明式 API
这是K8s区别于传统命令式运维的核心理念。
命令式(如Docker run):你告诉系统“做什么”。如果失败了,你还得手动检查。
声明式(K8s):你告诉系统“想要什么状态”。你提交一个Deployment的YAML文件,描述“我要3个副本”。至于怎么做到的(是新建容器还是重启旧的),K8s会自动维护。
这种设计极大地简化了“状态同步”的复杂性,是云原生架构的基石。
四、 关键设计概念:Pod,Service与Deployment
为了实现上述的海军布阵,K8s引入了三个核心概念:
Pod(最小的调度单元):
K8s不会直接管理Container,而是管理Pod。一个Pod可以包含一个或多个紧密关联的Container(它们共享网络和存储卷)。
Pod是短暂的(有生有灭),K8s负责为每个Pod提供唯一的IP地址。
Deployment(管理Pod的上帝):
Deployment不直接操作Pod,而是管理ReplicaSet。你只需要告诉Deployment“我要3个副本”,它就会确保这3个副本随时存在。一旦Pod重启,Deployment能自动保证版本不被降级。
Service(大厅的接待员):
* Pod IP是动态变化的(重启就变)。Service提供了一种稳定的访问方式(ClusterIP)。Service负责负载均衡,将外部请求的流量均匀分配给后端的多个Pod。
五、
回到标题,K8s捕捉的不是容器本身,而是集群的秩序。
它通过API Server收集意图,Etcd持久化定义,Scheduler分配资源,Controller不断修正偏差(自愈)。这种架构让基础设施成为了代码的一部分。
作为架构师,掌握K8s不仅是会写kubectl apply,更重要的是理解其声明式架构和控制循环模型。这不仅能帮助你设计更健壮的分布式系统,更能让你看清现代DevOps体系的底层脉络。
感兴趣的伙伴可以在下方添加一下,也是为了大家有个属于纯爱好者的、纯净的平台来交流沟通、入圈、寻找自己的partner,少走弯路、少踩坑,毕竟鱼龙混杂、知己难觅~
(备用微信号: domsm789 )
