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 请求」即可。

相关与易混

  • 相关:CRIcontainerd 与 shimCompose
  • 易混:Kubernetes 不是容器运行时。它不实现 namespace 或 MicroVM。把 kubectl apply 当成 docker run 的集群版,会漏掉「中间还有 kubelet 与 CRI」这一层。