このトピックでは、vSphere 上のスタンドアローン管理クラスタを使用して、Tanzu Kubernetes Grid (TKG) のクラスタ インフラストラクチャをバックアップおよびリストアする方法について説明します。以下の方法があります。
注
- VMware では、Velero を使用した TKG スタンドアローン管理クラスタのバックアップはサポートされていません。
- スタンドアローン管理クラスタが展開された後に再構成された場合、ここで説明するように再作成しても、すべてのリソースがリカバリされない場合があります。
スタンドアローン管理クラスタを使用して、Tanzu Kubernetes Grid (TKG) ワークロード クラスタでホストされているワークロードと動的ストレージ ボリュームをバックアップおよびリストアするには、「クラスタ ワークロードのバックアップとリストア」を参照してください。
スーパーバイザー クラスタ、およびそれらのクラスタが作成したワークロード クラスタを含む vSphere with Tanzu クラスタをバックアップおよびリストアするには、VMware vSphere 8.0 のドキュメントの「vSphere with Tanzu のバックアップとリストア」を参照してください。
注意
- この機能は、サポートされていない「テクニカル プレビュー」状態です。「TKG の機能状態」を参照してください。
オープン ソース コミュニティ標準ツールである Velero を使用して、TKG スタンドアローン管理クラスタのインフラストラクチャとワークロードをバックアップおよびリストアできます。
Velero は、バックアップを保存するためにさまざまなストレージ プロバイダをサポートしています。Velero は、次の機能もサポートします。
Tanzu Kubernetes Grid サブスクリプションには、Tanzu Kubernetes Grid ダウンロード ページから入手可能な、テスト済みの互換性のある Velero ディストリビューションのサポートが含まれています。
TKG クラスタをバックアップおよびリストアするには、以下が必要です。
上記の前提条件を満たしたら、Velero を使用してクラスタ間でワークロードを移行することもできます。手順については、Velero ドキュメントの「Cluster Migration」および「Resource Filtering」を参照してください。
以前のバージョンの TKG を使用して Velero CLI をすでにインストールしている場合は、Velero を v1.11.1 にアップグレードする必要があります。詳細については、以下の「Velero のアップグレード」を参照してください。
Velero CLI v1.11.1 をインストールするには、次の手順を実行します。
.gz
ファイルをダウンロードします。ファイル名は、velero-linux-
、velero-mac-
、または velero-windows64-
で始まります。gunzip
コマンドまたは任意の抽出ツールを使用してバイナリを解凍します。
gzip -d <RELEASE-TARBALL-NAME>.gz
プラットフォームの CLI バイナリの名前を velero
に変更し、実行可能であることを確認して、PATH
に追加します。
/usr/local/bin
フォルダに移動し、名前を velero
に変更します。chmod +x /usr/local/bin/velero
Program Files\velero
フォルダを作成し、そこにバイナリをコピーします。velero.exe
に変更します。velero
フォルダを右クリックして [プロパティ] > [セキュリティ] を選択し、ユーザー アカウントに [フル コントロール] 権限があることを確認します。env
を検索します。Path
行を選択し、[編集] をクリックします。velero
バイナリへのパスを入力します。TKG を v2.3 から v2.4 にアップグレードした場合は、Velero を v1.11.1 にアップグレードする必要があります。
重要Velero v1.10.x では、異なる CRD、異なるコンポーネントの命名、および機能が v1.9.x とは異なる方法で使用されます。TKG 2.3 で Velero v1.9.x を使用していて、TKG 2.4 にアップグレードしている場合は、v1.11.1 にアップグレードする前に Velero を v1.9.x から v1.10.x にアップグレードする必要があります。Velero を v1.9.x から v1.10.x にアップグレードする手順については、Velero を v1.11.1 にアップグレードする前に TKG 2.3 ドキュメントの「Velero をアップグレードする」の手順に従ってください。
Velero を v1.10.x から v1.11.1 にアップグレードするには、次の手順を実行します。
Velero v1.11.1 バイナリを使用して CRD 定義を更新します。
velero install --crds-only --dry-run -o yaml | kubectl apply -f -
Velero デプロイ構成を更新して、新しいバージョンの Velero と、インフラストラクチャ用の Velero プラグインのバージョンを使用します。
kubectl set image deployment/velero \
velero=velero/velero:v1.11.1 \
velero-plugin-for-vsphere=velero/velero-plugin-for-vsphere:v1.5.1 \
--namespace velero
kubectl set image deployment/velero \
velero=velero/velero:v1.11.1 \
velero-plugin-for-aws=velero/velero-plugin-for-aws:v1.7.1 \
--namespace velero
kubectl set image deployment/velero \
velero=velero/velero:v1.11.1 \
velero-plugin-for-microsoft-azure=velero/velero-plugin-for-microsoft-azure:v1.7.1 \
--namespace velero
(オプション)node
デーモン セットを使用している場合は、ノード エージェントのバージョンを更新します。
kubectl set image daemonset/node-agent \
node-agent=velero/velero:v1.11.1 \
--namespace velero
詳細については、Velero ドキュメントの「Velero 1.11 へのアップグレード」を参照してください。
Tanzu Kubernetes Grid ワークロード クラスタのコンテンツをバックアップするには、次のもののストレージ場所が必要です。
Velero ドキュメントの「Backup Storage Locations and Volume Snapshot Locations」を参照してください。Velero は、次のいずれかのストレージ プロバイダをサポートしています。
VMware では、一意のストレージ バケットを各クラスタ専用にすることをお勧めしています。
MinIO を設定するには:
MinIO 認証情報とストレージの場所を使用して minio
コンテナ イメージを実行します。次に例を示します。
$ docker run -d --name minio --rm -p 9000:9000 -e "MINIO_ACCESS_KEY=minio" -e "MINIO_SECRET_KEY=minio123" -e "MINIO_DEFAULT_BUCKETS=mgmt" gcr.io/velero-gcp/bitnami/minio:2021.6.17-debian-10-r7
認証情報をローカル ファイルに保存して、velero install
の --secret-file
オプションに渡します。次に例を示します。
[default]
aws_access_key_id=minio
aws_secret_access_key=minio123
vSphere では、クラスタ オブジェクト ストレージのバックアップとボリューム スナップショットが同じストレージの場所に保存されます。この場所は、Amazon Web Services (AWS) の S3 互換の外部ストレージ、または MinIO などの S3 プロバイダである必要があります。
vSphere で Velero のストレージを設定するには、v1.5.1 プラグインの「Velero Plugin for vSphere in Vanilla Kubernetes Cluster」を参照してください。
AWS で Velero のストレージを設定するには、Velero Plugins for AWS リポジトリに記載されている手順に従います。
プラグインごとに必要に応じて S3 ストレージを設定します。オブジェクト ストア プラグインはクラスタ オブジェクトのバックアップを格納および取得し、ボリューム スナップショットツールはデータ ボリュームを保存および取得します。
Azure で Velero のストレージを設定するには、Velero Plugins for Azure リポジトリに記載されている手順に従います。
プラグインごとに必要に応じて S3 ストレージを設定します。オブジェクト ストア プラグインはクラスタ オブジェクトのバックアップを格納および取得し、ボリューム スナップショットツールはデータ ボリュームを保存および取得します。
ワークロード クラスタ オブジェクトをバックアップするには、Velero v1.11.1 サーバをスタンドアローン管理クラスタにインストールし、インストールを確認します。
Velero をインストールするには、次のオプションを指定して velero install
を実行します。
--provider $PROVIDER
:たとえば、aws
--plugins projects.registry.vmware.com/tkg/velero/velero-plugin-for-aws:v1.7.1_vmware.1
--bucket $BUCKET
:S3 バケットの名前。--backup-location-config region=$REGION
:バケットが含まれる AWS リージョン。--snapshot-location-config region=$REGION
:バケットが含まれる AWS リージョン。--kubeconfig
Velero サーバを現在のデフォルト以外のクラスタにインストールします。(オプション)--secret-file ./VELERO-CREDS
Velero に S3 バケットへのアクセス権を付与する 1 つの方法は、このオプションに次のようなローカル VELERO-CREDS
ファイルを渡すことです。
[default]
aws_access_key_id=<AWS_ACCESS_KEY_ID>
aws_secret_access_key=<AWS_SECRET_ACCESS_KEY>
その他のオプションについては、「Install and start Velero」を参照してください。
velero install
コマンドを実行すると、velero
という名前の名前空間をクラスタに作成し、velero
という名前の展開をそこに配置します。
次の設定が必要です。
--plugins projects.registry.vmware.com/tkg/velero/velero-mgmt-cluster-plugin:v0.2.1_vmware.1
注複数のオプションをカンマで区切って追加できます。例:
--plugins projects.registry.vmware.com/tkg/velero/velero-plugin-for-aws:v1.7.1_vmware.1,projects.registry.vmware.com/tkg/velero/velero-mgmt-cluster-plugin:v0.2.1_vmware.1
--snapshot-location-config
を設定しませんvelero install
コマンドが完了したら、Velero が正常にインストールされたことを検証します。
Velero ポッドのステータスが Running
であることを検証します。
kubectl -n velero get pod
NAME READY STATUS RESTARTS AGE
velero-78fdbcd446-v5cqr 1/1 Running 0 3h41m
バックアップの場所が Available
フェーズであることを検証します。
velero backup-location get
NAME PROVIDER BUCKET/PREFIX PHASE LAST VALIDATED ACCESS MODE DEFAULT
default aws mgmt Available 2022-11-11 05:55:55 +0000 UTC ReadWrite true
スタンドアローン管理クラスタによって管理されているすべてのワークロード クラスタ オブジェクトをバックアップするには、以下を実行します。
velero backup create my-backup --exclude-namespaces tkg-system --include-resources cluster.cluster.x-k8s.io --wait
注
--exclude-namespaces tkg-system
は管理クラスタ自体を除外します。
--include-resources cluster.cluster.x-k8s.io
はワークロード クラスタ オブジェクトを含めます。VMware では、スケール アップやスケール ダウンなど、構造上の変更を行った直後にワークロード クラスタをバックアップすることをお勧めします。これにより、リストア プロセスの失敗を引き起こす可能性のあるバックアップ オブジェクトと物理インフラストラクチャ間の不一致が回避されます。
最新のバックアップ後にクラスタ オブジェクトが変更されると、リストア後のシステムの状態が想定した最新の状態と一致しません。この問題は「ドリフト」と呼ばれます。一般的なタイプのドリフトを検出して回復する方法については、以下の「ドリフトの処理」セクションを参照してください。
ドリフトを最小限に抑えるために、VMware では Velero を使用して頻繁で定期的なバックアップをスケジュール設定することをお勧めします。たとえば、すべてのワークロード クラスタを毎日バックアップし、各バックアップを 14 日間保持するには、以下を実行します。
velero create schedule daily-bak --schedule="@every 24h" --exclude-namespaces tkg-system --include-resources cluster.cluster.x-k8s.io --ttl 336h0m0s
Velero のスケジュール設定オプションの詳細については、Velero のドキュメントの「バックアップのスケジュール設定」を参照してください。
kubeconfig
ファイルを再生成するVelero を使用してワークロード クラスタをリストアしたら、新しい kubeconfig
ファイルを、それを使用するすべてのユーザーに配布する必要があります。
kubeconfig
を再生成します。
tanzu cluster kubeconfig get CLUSTER-NAME --namespace NAMESPACE
上記のコマンドの出力を、クラスタを使用するすべてのユーザーに配布して、古い kubeconfig
ファイルを置き換えます。
kubeconfig
ファイルには ID または認証情報が含まれておらず、Pinniped のドキュメントの「Kubernetes クラスタへのフェデレーション認証に Pinniped を使用する方法」で説明されているように、安全に配布できます。スタンドアローン管理クラスタおよび管理するワークロード クラスタ オブジェクトをリストアするには、構成ファイルから管理クラスタを再作成し、Velero を使用してワークロード クラスタをリストアし、新しい kubeconfig
ファイルを、それを使用するユーザーに配布します。
ワークロード クラスタ オブジェクトの最新のバックアップとその現在の実行状態との間でドリフトが疑われる場合は、「ドリフト ディテクタの使用」の説明に従って、ドリフト ディテクタ ツールを使用して修正レポートを生成します。
管理クラスタが最初に展開された後に行われた構成変更が、その構成ファイルまたは環境変数に反映されていることを確認します。反映されていない場合、最新の状態にリストアされません。
「構成ファイルからの管理クラスタの展開」の説明に従って、ここで構成ファイル mgmt-cluster-config.yaml
から管理クラスタを再作成します。
--az-file vsphere-zones.yaml
を tanzu mc create
コマンドに含めることによって、VSphereFailureDomain
および VSphereDeploymentZone
オブジェクト定義を持つファイルも含めます。管理クラスタが作成された直後は、TKR は 1 つだけである必要があります。
tanzu kubernetes-release get
NAME VERSION COMPATIBLE ACTIVE UPDATES AVAILABLE
v1.27.5---vmware.2-tkg.1 v1.27.5+vmware.1-tkg.1 True True
バックアップされたワークロード クラスタで使用されるすべての TKR が使用可能になるまで数分待機します。
tanzu kubernetes-release get
NAME VERSION COMPATIBLE ACTIVE UPDATES AVAILABLE
v1.25.13---vmware.2-tkg.2 v1.25.13+vmware.2-tkg.2 True True
v1.26.8---vmware.1-tkg.1 v1.26.8+vmware.1-tkg.1 True True
v1.27.5---vmware.2-tkg.1 v1.27.5+vmware.1-tkg.1 True True
上記の「クラスタへの Velero サーバの展開」の手順に従って、Velero を管理クラスタにインストールします。認証情報とバックアップ場所の構成設定の値がバックアップの作成時と同じであることを確認します。
Velero のインストール後、バックアップが同期され、使用するバックアップがコマンドによって一覧表示されるまで velero backup get
を実行します。
velero backup get
NAME STATUS ERRORS WARNINGS CREATED EXPIRES STORAGE LOCATION SELECTOR
my-backup Completed 0 0 2022-12-07 17:10:42 +0000 UTC 24d default <none>
velero restore create
を実行してワークロード クラスタ リソースをリストアします。VMware では、最新のバックアップを使用することをお勧めします。
velero restore create my-restore --from-backup my-backup --wait
リストアが完了すると、クラスタのステータスは createdStalled
になります。
tanzu cluster list
NAME NAMESPACE STATUS CONTROLPLANE WORKERS KUBERNETES ROLES PLAN TKR
tkg-vc-antrea default createdStalled 0/3 0/3 v1.27.5+vmware.1 <none> prod v1.27.5---vmware.2-tkg.1
クラスタ オブジェクトにパッチを適用して、paused
プロパティを false
に設定します。これは、クラスタ オブジェクトが新しい管理クラスタで paused
状態で再作成されるため、コントローラが調整を試みないようにするために必要です。
リストア後にクラスタの一時停止を解除するには、以下を実行します。
kubectl -n my-namespace patch cluster CLUSTER-NAME --type merge -p '{"spec":{"paused":false}}'
複数の名前空間内のすべてのクラスタの一時停止を解除するには、次のスクリプトを実行します。
#!/bin/bash
for ns in $(kubectl get ns -o custom-columns=":metadata.name" | grep -v "tkg-system");
do
clusters=$(kubectl -n $ns get cluster -o name)
if [[ -n $clusters ]];then
kubectl -n $ns patch $clusters --type merge -p '{"spec":{"paused":false}}'
fi
done
次のように、すべてのワークロード クラスタが running
状態であることを確認します。
tanzu cluster list
NAME NAMESPACE STATUS CONTROLPLANE WORKERS KUBERNETES ROLES PLAN TKR
tkg-vc-antrea default running 3/3 3/3 v1.27.5+vmware.1 <none> prod v1.27.5---vmware.2-tkg.1
次のように、ワークロード クラスタごとに tanzu cluster get CLUSTER-NAME
を実行して、すべてのコンポーネントが running
状態であることを確認します。
tanzu cluster get tkg-vc-antrea
NAME NAMESPACE STATUS CONTROLPLANE WORKERS KUBERNETES ROLES TKR
tkg-vc-antrea default running 3/3 3/3 v1.27.5+vmware.1 <none> v1.27.5---vmware.2-tkg.1
Details:
NAME READY SEVERITY REASON SINCE MESSAGE
/tkg-vc-antrea True 4h14m
├─ClusterInfrastructure - VSphereCluster/tkg-vc-antrea-s6kl5 True 4h36m
├─ControlPlane - KubeadmControlPlane/tkg-vc-antrea-ch5hn True 4h14m
│ ├─Machine/tkg-vc-antrea-ch5hn-8gfvt True 4h14m
│ ├─Machine/tkg-vc-antrea-ch5hn-vdcrp True 4h23m
│ └─Machine/tkg-vc-antrea-ch5hn-x7nmm True 4h32m
└─Workers
├─MachineDeployment/tkg-vc-antrea-md-0-8b8zn True 4h23m
│ └─Machine/tkg-vc-antrea-md-0-8b8zn-798d5b8897-bnxn9 True 4h24m
├─MachineDeployment/tkg-vc-antrea-md-1-m6dvh True 4h24m
│ └─Machine/tkg-vc-antrea-md-1-m6dvh-79fb858b96-p9667 True 4h28m
└─MachineDeployment/tkg-vc-antrea-md-2-brm2m True 4h21m
└─Machine/tkg-vc-antrea-md-2-brm2m-6478cffc5f-tq5cn True 4h23m
すべてのワークロード クラスタが実行されたら、Tanzu CLI を使用してワークロード クラスタを管理できます。
管理クラスタを再作成する前にドリフト ディテクタを実行した場合は、「ドリフトの修正」の説明に従って、ドリフト ディテクタ レポートにフラグが付いているオブジェクトを手動で修正または調査します。
管理クラスタとそのワークロード クラスタの新しい kubeconfig
ファイルを再生成して配布します。
管理クラスタの kubeconfig
を再生成します。
tanzu management-cluster kubeconfig get
ワークロード クラスタごとに、その kubeconfig
を再生成します。
tanzu cluster kubeconfig get CLUSTER-NAME --namespace NAMESPACE
上記のコマンドの出力を、クラスタを使用するすべてのユーザーに配布して、古い kubeconfig
ファイルを置き換えます。
kubeconfig
ファイルには ID または認証情報が含まれておらず、Pinniped のドキュメントの「Kubernetes クラスタへのフェデレーション認証に Pinniped を使用する方法」で説明されているように、安全に配布できます。最新のバックアップ後にクラスタ オブジェクトが変更されるとドリフトが発生し、リストア後のシステムの状態が想定した最新の状態と一致しません。
ドリフトを最小限に抑えるため、VMware では頻繁で定期的なバックアップをスケジュール設定することをお勧めします。
ドリフトの検出と修正には、以下のセクションで説明するドリフト ディテクタ ツールが役に立ちます。
ドリフト ディテクタは、次の機能を備えたコマンドライン ツールです。
重要ドリフト ディテクタはサポートされていない試験的な状態です。ドリフトは複雑で、ドリフト ディテクタはドリフトのすべてのインスタンスを検出できない場合があります。これは参照としてのみ使用し、通常のバックアップの代わりに使用しないでください。
ドリフト ディテクタをインストールして使用する方法については、VMware KB Web サイトの「Tanzu Kubernetes Grid 管理クラスタのドリフト ディテクタ」を参照してください。プロセス全体は次のとおりです。
TKG をバックアップからリストアする前に、drift-detector
コマンドを実行してレポートを生成します。
最新のバックアップから TKG をダウンロードしてリストアします。
ドリフト ディテクタのレポートを参照して、「ドリフトの修正」のガイダンスに従って、リストアされた TKG の状態に対して修正アクションを実行します。
ドリフトのケースは複雑な場合がありますが、ドリフト ディテクタのレポートを作成した場合、または前回のバックアップ以降にクラスタ オブジェクト状態でドリフトを検出した場合は、次のようにいくつかの一般的なパターンを修正できます。
古いワーカー ノード:
ゴースト ワーカー ノード インフラストラクチャ:
軽減策:
kubeconfig
を取得し、それを kubectl
コンテキストとして設定します。次の kubectl
コマンドと tanzu
コマンドの出力を比較します。
# Get the actual worker nodes of the workload cluster
$ kubectl --context tkg-vc-antrea-admin@tkg-vc-antrea get node
NAME STATUS ROLES AGE VERSION
tkg-vc-antrea-md-0-p9vn5-645498f59f-42qh9 Ready <none> 44m v1.27.5+vmware.1
tkg-vc-antrea-md-0-p9vn5-645498f59f-shrpt Ready <none> 114m v1.27.5+vmware.1
tkg-vc-antrea-wdsfx-2hkxp Ready control-plane 116m v1.27.5+vmware.1
# Get the worker nodes managed by the TKG
$ tanzu cluster get tkg-vc-antrea
NAME NAMESPACE STATUS CONTROLPLANE WORKERS KUBERNETES ROLES TKR
tkg-vc-antrea default running 1/1 1/1 v1.27.5+vmware.1 <none> v1.27.5---vmware.2-tkg.1-zshippable
Details:
NAME READY SEVERITY REASON SINCE MESSAGE
/tkg-vc-antrea True 13m
├─ClusterInfrastructure - VSphereCluster/tkg-vc-antrea-b7fr9 True 13m
├─ControlPlane - KubeadmControlPlane/tkg-vc-antrea-wdsfx True 13m
│ └─Machine/tkg-vc-antrea-wdsfx-2hkxp True 13m
└─Workers
└─MachineDeployment/tkg-vc-antrea-md-0-p9vn5 True 13m
└─Machine/tkg-vc-antrea-md-0-p9vn5-645498f59f-shrpt True 13m
tanzu cluster get
からの Workers
> Machine
リストを持たない kubectl
によってリストされた各ワーカー ノードの場合:
ワーカーを想定される値にスケール アップします。次に例を示します。
tanzu cluster scale ${cluster_name} --worker-machine-count 2
kubeconfig
を使用してゴースト ノードをドレインし、そのワークロードを TKG によって管理されるノードに移動します。kubectl drain ${node_name} --delete-emptydir-data --ignore-daemonsets
クラスタからゴースト ノードを削除します。
kubectl delete node ${node_name}
vSphere またはその他のインフラストラクチャにログインし、仮想マシンを手動で削除します。
制御プレーンの古いノードとゴースト インフラストラクチャ
軽減策:
kubeconfig
を取得し、それを kubectl
コンテキストとして設定します。次の kubectl
コマンドと tanzu
コマンドの出力を比較します。
# Get the actual control plane nodes of the workload cluster
$ kubectl --context wc-admin@wc get node
NAME STATUS ROLES AGE VERSION
wc-2cjn4-4xbf8 Ready control-plane 107s v1.27.5+vmware.1
wc-2cjn4-4zljs Ready control-plane 26h v1.27.5+vmware.1
wc-2cjn4-59v95 Ready control-plane 26h v1.27.5+vmware.1
wc-2cjn4-ncgxb Ready control-plane 25h v1.27.5+vmware.1
wc-md-0-nl928-5df8b9bfbd-nww2w Ready <none> 26h v1.27.5+vmware.1
wc-md-1-j4m55-589cfcd9d6-jxmvc Ready <none> 26h v1.27.5+vmware.1
wc-md-2-sd4ww-7b7db5dcbb-crwdv Ready <none> 26h v1.27.5+vmware.1
# Get the control plane nodes managed by the TKG
$ tanzu cluster get wc
NAME NAMESPACE STATUS CONTROLPLANE WORKERS KUBERNETES ROLES TKR
wc default updating 4/3 3/3 v1.27.5+vmware.1 <none> v1.27.5---vmware.2-tkg.1-zshippable
Details:
NAME READY SEVERITY REASON SINCE MESSAGE
/wc True 24m
├─ClusterInfrastructure - VSphereCluster/wc-9nq7v True 26m
├─ControlPlane - KubeadmControlPlane/wc-2cjn4 True 24m
│ ├─Machine/wc-2cjn4-4xbf8 True 24m
│ ├─Machine/wc-2cjn4-4zljs True 26m
│ └─Machine/wc-2cjn4-59v95 True 26m
└─Workers
├─MachineDeployment/wc-md-0-nl928 True 26m
│ └─Machine/wc-md-0-nl928-5df8b9bfbd-nww2w True 26m
├─MachineDeployment/wc-md-1-j4m55 True 26m
│ └─Machine/wc-md-1-j4m55-589cfcd9d6-jxmvc True 26m
└─MachineDeployment/wc-md-2-sd4ww True 26m
└─Machine/wc-md-2-sd4ww-7b7db5dcbb-crwdv True 26m
tanzu cluster get
からの ControlPlane
> Machine
リストを持たない kubectl
によってリストされた各 control-plane
ノードの場合:
ノードを削除します。
kubectl delete node ${node_name}