VCluster@本番環境¶
はじめに¶
本サイトにつきまして、以下をご認識のほど宜しくお願いいたします。
01. VClusterの仕組み¶
アーキテクチャ¶
VCluster は、コントロールプレーン、Syncer、といったコンポーネントから構成されている。
仮想 Cluster 間では、Namespaced スコープはもちろん、Cluster スコープの Kubernetes リソースも分離できる。

コントロールプレーン¶
ホスト Cluster 上に、Namespace を単位とした仮想 Cluster を作成する。
仮想 Cluster のバージョンは、ホスト Cluster に合わせる必要がある。
Syncer¶
仮想 Cluster 内の仮想リソース (Service、Pod、ServiceAccount) を、ホスト Cluster にコピーする。
ホスト Cluster で受信したリクエストを実 Service にルーティングできれば、仮想 Cluster にもルーティングできる。
また、ホスト Cluster 上の ServiceAccount にクラウドプロバイダーの認可ロールを紐づければ、IRSA を実装できる。
02. セットアップ¶
インストール¶
▼ vcluster cliの場合¶
# vcluster cliをインストールする
$ curl -L -o vcluster "https://github.com/loft-sh/vcluster/releases/latest/download/vcluster-linux-arm64"
$ sudo install -c -m 0755 vcluster /usr/local/bin
# 仮想Clusterを作成する
$ vcluster create <Cluster名> \
-n <ClusterのNamespace名> \
-f foo-values.yaml \
--kubernetes-version=<バージョン>
▼ Helmの場合¶
Amazon EKS 上で仮想 Cluster を作成する。
$ helm repo add <チャートリポジトリ名> https://charts.loft.sh
$ helm repo update
$ kubectl create namespace vcluster
# 仮想Clusterを作成する
$ helm install <Helmリリース名> <チャートリポジトリ名>/vcluster-eks -n vcluster --version <バージョンタグ>
03. vclusterコマンド¶
create¶
▼ createとは¶
仮想 Cluster を作成する。
$ vcluster create foo-cluster \
-n foo \
--kubernetes-version=<バージョン>
▼ -f¶
使用する values ファイルを指定する。
$ vcluster create foo-cluster \
-n foo \
-f foo-values.yaml \
--kubernetes-version=<バージョン>
▼ --upgrade¶
仮想 Cluster の Kubernetes のバージョンをアップグレードする。
$ vcluster create foo-cluster \
-n foo \
--upgrade \
--kubernetes-version=<バージョン>
▼ --isolate¶
仮想 Cluster からホスト Cluster へは名前解決不可能できないようにし、仮想 Cluster 間を分離する。
$ vcluster create foo-cluster \
-n foo \
--isolate \
--kubernetes-version=<バージョン>
connect¶
▼ connectとは¶
仮想 Cluster にポートフォワーディングを実行する。
これを実行している間、仮想 Cluster に対して kubectl コマンドを実行できるようになる。
$ vcluster connect <Cluster名> \
-n <ClusterのNamespace名>
[done] √ Virtual cluster kube config written to: ./kubeconfig.yaml. You can access the cluster via `kubectl --kubeconfig ./kubeconfig.yaml get namespaces`
[info] Starting port forwarding: kubectl port-forward --namespace <Namespace名> <Cluster名> 8443:8443
Forwarding from 127.0.0.1:8443 -> 8443
Forwarding from [::1]:8443 -> 8443
なお、仮想 Cluster に直接的にコマンドを送信できる。
$ vcluster connect <Cluster名> \
-n <ClusterのNamespace名> \
-- kubectl get pod -A