下一代 Kubernetes 发行版的结构
体系结构概述
通过 RKE2,我们从开发和维护轻量级 Kubernetes 发行版 K3s 中吸取经验教训,并将其应用于构建一个企业级的发行版,具有 K3s 的易用性。这意味着 RKE2 在最简单的情况下,是一个需要在所有预期参与 Kubernetes 集群的节点上安装和配置的单一二进制文件。一旦启动,RKE2 就能够启动并监督各节点中角色匹配的代理,同时从网络中获取所需的内容。
RKE2 汇集了多种开源技术,使这一切得以运作:
除了 Traefik 之外,所有这些都是与 Go+BoringCrypto 编译并静态链接的。
进程生命周期
内容启动
RKE2 从 RKE2 Runtime 镜像中提取二进制文件和清单,以运行 server 和 agent 节点。
这意味着 RKE2 默认扫描 /var/lib/rancher/rke2/agent/images/*.tar 以查找 rancher/rke2-runtime 镜像(其标签与 rke2 --version 的输出相关),如果找不到,则尝试从网络中拉取(即:Docker Hub)。然后 RKE2 从镜像中提取 /bin/,将其扁平化为 /var/lib/rancher/rke2/data/$<rke2_data_key>/bin,其中 $<rke2_data_key> 代表一个唯一字符串,用于标识该镜像。
为了使 RKE2 按预期工作,运行时镜像至少必须提供:
-
containerd( CRI) -
containerd-shim(shims 封装runc任务,并且在containerd停止时不会停止) -
containerd-shim-runc-v1 -
containerd-shim-runc-v2 -
kubelet(Kubernetes 节点代理) -
runc(OCI 运行时)
运行时镜像还提供以下操作工具:
-
ctr(低级别containerd维护和检查) -
crictl(低级别 CRI 维护和检查) -
kubectl(Kubernetes 集群维护和检查) -
socat(containerd进行端口转发所需)
在提取二进制文件后,RKE2 将从镜像中提取图表到 /var/lib/rancher/rke2/server/manifests 目录。
初始化服务器
在嵌入式 K3s 引擎中,服务器是专门的代理进程,这意味着以下启动将推迟,直到节点容器运行时已启动。
初始化代理
代理进程的入口点。对于服务器进程,嵌入式 K3s 引擎直接调用此方法。
服务器 Chart
在服务器节点上,helm-controller 现在可以将 /var/lib/rancher/rke2/server/manifests 中找到的任何 Chart 应用于集群。
-
rke2-canal.yaml 或 rke2-cilium.yaml 或 rke2-calico.yaml 或 rke2-flannel.yaml 或 rke2-multus.yaml(守护程序集,启动)
-
rke2-coredns.yaml(部署,启动)
-
rke2-ingress-nginx.yaml 和/或 rke2-traefik.yaml 以及 rke2-traefik-crd.yaml(部署)
-
rke2-metrics-server.yaml(部署)
-
rke2-runtimeclasses.yaml(部署)
-
rke2-snapshot-controller-crd.yaml、rke2-snapshot-controller.yaml 和 rke2-snapshot-validation-webhook.yaml(部署)