カスタム ClusterClass に基づいて TKG クラスタをプロビジョニングするには、次の手順を参照してください。これらの手順は、vSphere 8 U2 以降の環境に固有であることに注意してください。
前提条件
カスタム ClusterClass に基づいて TKG クラスタをプロビジョニングする手順は、vSphere 8 U2 リリースで更新されています。
- vSphere 8 U2 以降の環境
- ワークロード管理が有効
- スーパーバイザー 構成済み
- vSphere 向け Kubernetes CLI Tools がインストールされている Ubuntu クライアント
ワークフローの概要
ワークフローの概要は次のとおりです。
手順 | タスク | 方法 |
---|---|---|
1 | デフォルトの ClusterClass のクローンを作成して、カスタム ClusterClass を作成します。 | 1: カスタム ClusterClass の作成 |
2 | カスタム ClusterClass に基づいて新しい TKG クラスタをプロビジョニングし、すべてのクラスタ ノードが適切に起動していることを確認します。 | 2: カスタム ClusterClass に基づく TKG クラスタの作成 |
手順 | タスク | 方法 |
---|---|---|
3 | ワーカー ノードの 1 つに SSH 接続して、更新するパッケージがあることを確認します。 | 3: パッケージ更新の有無の確認 |
4 | 更新を実行する新しいコマンドを使用して、カスタム ClusterClass を更新します。 | 4: カスタム ClusterClass の更新 |
5 | 更新がすでに実行されている新しいノードのロールアウトを確認します。 | 5: クラスタ ノードのローリング アップデートの確認 |
1: カスタム ClusterClass の作成
tanzukubernetescluster
という名前のデフォルトの ClusterClass のクローンを作成することで、
ccc
(
customclusterclass
の省略形)という名前のカスタム ClusterClass を作成します。
- ccc-ns という名前の vSphere 名前空間 を作成します。
権限、ストレージ、コンテンツ ライブラリ、および仮想マシン クラスを構成します。必要に応じて、ドキュメントを参照してください。
注: vSphere 名前空間 名はユーザー定義です。別の名前を使用する場合は、指示を適宜調整します。 - スーパーバイザー にログインします。
kubectl vsphere login --server=IP-ADDRESS --vsphere-username [email protected]
- デフォルトの ClusterClass の出力を ccc.yaml という名前のファイルに書き込みます。
kubectl -n ccc-ns get clusterclass tanzukubernetescluster -o yaml > ccc.yaml
または、ショートカット バージョン:kubectl -n ccc-ns get cc tanzukubernetescluster -o yaml > ccc.yaml
- クローン作成された ClusterClass ファイルを編集するために を開きます。
vim ccc.yaml
ccc.yaml
ファイルを編集します。metadata.creationTimestamp
という行を削除します。metadata.generation
という行を削除します。metadata.resourceVersion
という行を削除します。metadata.uid
という行を削除します。metadata.name
の値をtanzukubernetescluster
からccc
に変更します。metadata.namespace
の値はccc-ns
のままにしますrun.tanzu.vmware.com/resolve-tkr: ""
の値はmetadata.annotations
のままにします。この注釈は TKR データ/解決に必要です。
- 変更を保存して確認します。
apiVersion: cluster.x-k8s.io/v1beta1 kind: ClusterClass metadata: annotations: run.tanzu.vmware.com/resolve-tkr: "" name: ccc namespace: ccc-ns spec: ...
- カスタム ClusterClass オブジェクトを作成します。
kubectl apply -f ccc.yaml -n ccc-ns
予期される結果:clusterclass.cluster.x-k8s.io/ccc created
- カスタム ClusterClass を一覧表示します。
kubectl get cc -n ccc-ns
予期される結果:NAME AGE ccc 3m14s tanzukubernetescluster 29m
2: カスタム ClusterClass に基づく TKG クラスタの作成
ccc-cluster.yaml
マニフェストを作成してクラスタをプロビジョニングします。#ccc-cluster.yaml apiVersion: cluster.x-k8s.io/v1beta1 kind: Cluster metadata: name: ccc-cluster spec: clusterNetwork: pods: cidrBlocks: - 192.0.2.0/16 services: cidrBlocks: - 198.51.100.0/12 serviceDomain: cluster.local topology: class: ccc version: v1.26.5---vmware.2-fips.1-tkg.1 controlPlane: replicas: 1 workers: machineDeployments: - class: node-pool name: tkgs-node-pool-1 replicas: 1 variables: - name: vmClass value: guaranteed-small - name: storageClass value: tkg-storage-profile
ここで、metadata.name
の値はクラスタの名前です:ccc-cluster
spec.topology.class
の値はカスタム ClusterClass の名前です:ccc
spec.topology.version
の値は TKR バージョンですspec.topology.variables.storageClass
の値はパーシステント ストレージ クラスの名前です
注: テスト目的で、制御プレーンとワーカー ノード プールには 1 つのレプリカで十分です。本番環境では、制御プレーンに 3 つのレプリカを使用し、ワーカー ノード プールごとに少なくとも 3 つのレプリカを使用します。- カスタム ClusterClass に基づいて TKG クラスタを作成します。
kubectl apply -f ccc-cluster.yaml -n ccc-ns
予期される結果:cluster.cluster.x-k8s.io/ccc-cluster created
- クラスタのプロビジョニングを確認します。
次のコマンドを実行します。すべてのクラスタ ノードが正常に起動するまで待機します。
kubectl -n ccc-ns get cc,clusters,vsphereclusters,kcp,machinedeployment,machineset,machine,vspheremachine,virtualmachineservice
注: 手順 5 でローリング アップデートの進行状況を監視できるように、このコマンドを別のセッションで実行すると役立ちます。
3: パッケージ更新の有無の確認
- 次のコマンドを実行して、SSH シークレットを取得します。
export CC=ccc-cluster && kubectl get secret -n ccc-ns ${CC}-ssh -o jsonpath={.data.ssh-privatekey} | base64 -d > ${CC}-ssh && chomd 4000 ${CC}-ssh
- 次のコマンドを実行して、ワーカー ノード仮想マシンの IP アドレスを取得します。
kubectl -n ccc-ns get vm -o wide
注: 複数のワーカー ノードを展開した場合は、1 つを選択します。制御プレーン ノードは使用しないでください。 - 次のコマンドを実行して、ワーカー ノード仮想マシンに SSH 接続します。
ssh -i ${CC}-ssh vmware-system-user@IP-ADDRESS-OF-WORKER-NODE
例:ssh -i ${CC}-ssh [email protected]
注: 接続を続行するには、「yes」と入力します。予期される結果:ホストに SSH 接続すると、次のメッセージが表示されます。tdnf update info not availble yet!
- 次のコマンドを実行し、更新を確認します。
sudo -i
tdnf update
- プロンプトで、いいえ(更新しない)に「N」と入力します。
予期される結果:
Operation aborted
注: ここでの目的は、更新を開始するのではなく、更新の存在を確認するだけです。次のセクションでカスタム ClusterClass にコマンドを追加して、更新を開始します。 - 「exit」と入力して SSH セッションからログアウトし、もう一度「exit」と入力します。
4: カスタム ClusterClass の更新
ccc
という名前のカスタム ClusterClass を編集用に開きます。kubectl edit cc ccc -n ccc-ns
postKubeadmCommands
を使用して、次のセクションまで下にスクロールします。- definitions: - jsonPatches: - op: add path: /spec/template/spec/kubeadmConfigSpec/postKubeadmCommands valueFrom: template: | - touch /root/kubeadm-complete - vmware-rpctool 'info-set guestinfo.kubeadm.phase complete' - vmware-rpctool 'info-set guestinfo.kubeadm.error ---' selector: apiVersion: controlplane.cluster.x-k8s.io/v1beta1 kind: KubeadmControlPlaneTemplate matchResources: controlPlane: true - jsonPatches: - op: add path: /spec/template/spec/postKubeadmCommands valueFrom: template: | - touch /root/kubeadm-complete - vmware-rpctool 'info-set guestinfo.kubeadm.phase complete' - vmware-rpctool 'info-set guestinfo.kubeadm.error ---' selector: apiVersion: bootstrap.cluster.x-k8s.io/v1beta1 kind: KubeadmConfigTemplate matchResources: machineDeploymentClass: names: - node-pool name: controlPlanePostKubeadmCommandsSuccess
次のコマンドを両方のvalueFrom.template
フィールドに追加します。- tdnf update -y
例:- definitions: - jsonPatches: - op: add path: /spec/template/spec/kubeadmConfigSpec/postKubeadmCommands valueFrom: template: | - touch /root/kubeadm-complete - vmware-rpctool 'info-set guestinfo.kubeadm.phase complete' - vmware-rpctool 'info-set guestinfo.kubeadm.error ---' - tdnf update -y selector: apiVersion: controlplane.cluster.x-k8s.io/v1beta1 kind: KubeadmControlPlaneTemplate matchResources: controlPlane: true - jsonPatches: - op: add path: /spec/template/spec/postKubeadmCommands valueFrom: template: | - touch /root/kubeadm-complete - vmware-rpctool 'info-set guestinfo.kubeadm.phase complete' - vmware-rpctool 'info-set guestinfo.kubeadm.error ---' - tdnf update -y selector: apiVersion: bootstrap.cluster.x-k8s.io/v1beta1 kind: KubeadmConfigTemplate matchResources: machineDeploymentClass: names: - node-pool name: controlPlanePostKubeadmCommandsSuccess
- カスタム ClusterClass への変更を保存し、エディタを閉じます。
wq
予期される結果:clusterclass.cluster.x-k8s/ccc edited
5: クラスタ ノードのローリング アップデートの確認
- 次のコマンドを実行して、クラスタがプロビジョニングされていることを確認します。
すべてのクラスタ ノードが正常に起動するまで待機します。
kubectl -n ccc-ns get cc,clusters,vsphereclusters,kcp,machinedeployment,machineset,machine,vspheremachine,virtualmachineservice
- 新しい UUID を持つ新しいノードがデプロイされたことがわかります。
- 次のコマンドを実行して、ワーカー ノード仮想マシンに SSH 接続します。
ssh -i ${CC}-ssh vmware-system-user@IP-ADDRESS-OF-WORKER-NODE
予期される結果:ホストに SSH 接続すると、次のメッセージが表示されます。tdnf update info not availble yet!
- 次のコマンドを実行します。
sudo -i
tdnf update
予期される結果:更新が必要なパッケージが少なくなります。
- プロンプトで、いいえ(更新しない)に「N」と入力します。
予期される結果:
Operation aborted
- 次のコマンドを実行して、tdnf が実行されたことを確認します。
cat /var/log/cloud-init-output.log | grep -i tdnf
- 「exit」と入力して SSH セッションからログアウトし、もう一度「exit」と入力します。
カスタム ClusterClass のメンテナンス
TKG サービス を新しいバージョンにアップグレードした後、以前の TKG サービス バージョンのデフォルトの ClusterClass から派生したカスタム ClusterClass が、新しい TKG サービス バージョンに付属するデフォルトの ClusterClass に対する変更を使用して更新されていることを確認する必要があります。
- TKG サービス バージョンをアップグレードします。
たとえば、TKG サービス v3.0 から v3.1 にアップグレードします。
TKG サービスのインストールとアップグレードを参照してください。
- ここに記載されている手順に従って、新しいカスタム ClusterClass を作成します。
新しいカスタム ClusterClass の名前に TKG サービス のバージョン(
ccc-3.1
など)を追加して、バージョンを手動で管理します。 - 以前のカスタム ClusterClass のカスタム パッチと変数を新しいカスタム ClusterClass に追加します。
この操作を行うには、
cat ccc.yaml
を実行し、その中のカスタム パッチと変数をccc-3.1.yaml
にコピーします。 - 新しいカスタム ClusterClass を適用し、調整が成功するまで待機します。
- クラスタ オブジェクトの
spec.topology.class
フィールドを編集して、以前のカスタム ClusterClass を使用して TKG クラスタを新しいカスタム ClusterClass に更新します。
管理対象外の ClusterClass
vSphere 8 U2 以降では、TKG コントローラでカスタム ClusterClass を管理しない場合、そのカスタム ClusterClass に注釈を追加できます。この注釈を追加する場合は、基盤となるすべての Kubernetes オブジェクト(証明書、シークレットなど)を手動で作成する必要があることに注意してください。その方法については、vSphere 8 U1 カスタム ClusterClass のドキュメントを参照してください。
注釈キー | 値 |
---|---|
run.tanzu.vmware.com/unmanaged-clusterclass | " " |
ccc
という名前のカスタム ClusterClass に注釈を追加する方法の例を次に示します。
apiVersion: cluster.x-k8s.io/v1beta1 kind: ClusterClass metadata: annotations: run.tanzu.vmware.com/resolve-tkr: "" run.tanzu.vmware.com/unmanaged-clusterclass: "" name: ccc namespace: ccc-ns spec: ...