Kubernetes
定义
Kubernetes(常简称
k8s)是一套集群控制系统。使用者声明「某种工作负载应保持若干副本、使用某镜像、挂载某存储、暴露某服务」,控制面持续把集群现状收敛到该声明。调度、重启、滚动升级与失效转移发生在多台机器之间,而不是一台机器上的一组
run。
与本百科相关的最小对象是 Pod:一次调度的最小单位,包含一组共享网络与存储的容器。节点代理 kubelet 负责在本机创建 Pod,它并不内建 Docker 实现,而是通过 CRI 调用节点上的容器运行时。
问题背景
单机 Compose 在一台主机上已经够用。当实例数超过单机容量,或需要主机失效后自动在其他机器拉起时,必须把「放在哪台机器」从使用者脚本中拿走。Kubernetes 把放置、副本与修复做成控制回路:声明进入 API,控制器比较现状与期望,再向节点下发具体操作。
机制说明
控制面与节点
一个集群至少包含:
- API Server:所有声明与状态的入口;
- Scheduler:为尚未放置的 Pod 选择节点;
- Controller Manager:维持 Deployment 等高层对象的副本数;
- kubelet(每台节点):接收应当在本机运行的 Pod,并调用运行时;
- 容器运行时:真正拉取镜像、创建沙箱与容器。
Box 若进入这条链,位置是「节点上的运行时」,而不是控制面。Box 的 README 也写明:本仓库是本地运行时,不是托管 sandbox 控制平面;需要远程编排时应在原生 SDK 前放置经过认证的服务。
Pod 与容器的差别
Pod 先有一个网络与隔离外壳(CRI 中称为
PodSandbox),再在其中启动一个或多个容器。同一 Pod
内的容器共享网络命名空间,因此可以用 localhost 互访。跨 Pod
通信走服务(Service)与集群网络,而不是 Compose 默认的单机项目网络。
RuntimeClass
集群可以安装多种运行时,并用 RuntimeClass 为不同工作负载选择不同后端。例如默认用 containerd + runc,特定工作负载用 Box 的 MicroVM。这要求节点上存在对应的 CRI 实现或 containerd shim,见 containerd 与 shim。
在 Box 中的位置
- Box 提供 CRI v1 服务器(
src/cri/)以及 containerd runtime-v2 shim 预览(containerd-shim/)。二者都是「让 kubelet / containerd 把工作交给 Box」的适配,不声明完整 CRI 符合性。 docs/cri-conformance.md记录符合性范围。docs/production-cluster-tests.md描述集群侧测试。- 本地验证常用
kind。
a3s-box-linux-test/evidence/w0/kind-a3s-box.yaml是把 Box 挂入 kind 的配置实例,不属于 Box 仓库本身的运行时逻辑。
验证命令
在已安装 kubectl 与
kind、并已按证据目录准备二进制的前提下,kubelet 会通过 CRI 或
RuntimeClass 调用 Box。没有集群时,不必为了理解概念而安装
Kubernetes;先理解「kubelet 不自己起容器,它发 CRI 请求」即可。
相关与易混
- 相关:CRI、containerd 与 shim、Compose
- 易混:Kubernetes 不是容器运行时。它不实现 namespace 或 MicroVM。把
kubectl apply当成docker run的集群版,会漏掉「中间还有 kubelet 与 CRI」这一层。