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の場合¶
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