次世代Kubernetesディストリビューションの構造
アーキテクチャの概要
RKE2では、軽量な Kubernetesディストリビューションである K3sの開発と維持から得た教訓を活かし、エンタープライズ向けのディストリビューションを K3sの使いやすさで構築します。これは、RKE2が最もシンプルな形で、 Kubernetesクラスターに参加することが期待されるすべてのノードにインストールおよび構成される単一のバイナリであることを意味します。起動後、RKE2は各ノードごとに適切な役割のエージェントを起動し、監視しつつ、ネットワークから必要なコンテンツを取得します。
RKE2は、これを実現するために多くのオープンソース技術を統合しています:
これらのうち、Traefikを除くすべては、 Go+BoringCryptoでコンパイルされ、静的にリンクされています。
プロセスライフサイクル
コンテンツの起動
RKE2は、RKE2ランタイムイメージから_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(シムが`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 エンジンでは、サーバーは専門のエージェントプロセスであり、ノードのコンテナランタイムが起動するまで次の起動が遅延されます。
コンポーネントの準備
kube-apiserver
kube-apiserver イメージをプルし、すでに存在しない場合は、etcd を待つためのゴルーチンを起動し、その後 /var/lib/rancher/rke2/agent/pod-manifests/ に静的ポッド定義を書き込みます。
エージェントの初期化
エージェントプロセスのエントリポイント。サーバープロセスの場合、組み込みの K3s エンジンがこれを直接呼び出します。
サーバーチャート
サーバーノード上で、helm-controller は /var/lib/rancher/rke2/server/manifests に見つかったチャートをクラスターに適用できるようになりました。
-
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 (デプロイメント)