コンテンツにスキップ

VCluster@CNCF

はじめに

本サイトにつきまして、以下をご認識のほど宜しくお願いいたします。


01. VClusterの仕組み

アーキテクチャ

VClusterは、コントロールプレーン、Syncer、といったコンポーネントから構成されている。

仮想Cluster間では、Namespacedスコープはもちろん、ClusterスコープのKubernetesリソースも分離できる。

vcluster_architecture


コントロールプレーン

ホスト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の場合

AWS 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