NHN Kubernetes Service(NKS)クラスタのバックアップが必要な場合、Veleroプラグインを使用してObject Storageにバックアップできます。 この文書はObject StorageとVeleroを活用してクラスタをバックアップおよび復元する方法について記述します。
Veleroの詳細についてはVelero Docsを参照してください。
Object Storage APIを使用するにはテナントID(tenant ID)およびAPIエンドポイント(endpoint)の確認、APIパスワードの設定、Temporary URL Keyの作成を行う必要があります。
テナントIDとAPIのエンドポイントはObject StorageサービスページのAPI Endpoint設定ボタンをクリックして確認できます。
項目 | API Endpoint | 用途 |
---|---|---|
Identity | https://api-identity-infrastructure.nhncloudservice.com/v2.0 | 認証トークン発行 |
Tenant ID | 数字 + 英字で構成された32文字の文字列 | 認証トークン発行 |
APIパスワードはObject StorageサービスページのAPI Endpoint設定ボタンをクリックして設定できます。
Object Storage APIの詳細についてはObject Storage APIガイドを参照してください。
Veleroクライアントでvelero log
コマンドを使用するにはObject StorageにTemporary URL Keyを作成する必要があります。
名前 | 種類 | 形式 | 必須 | 説明 |
---|---|---|---|---|
X-Auth-Token | Header | String | O | トークンID |
X-Account-Meta-Temp-Url-Key | Header | String | O | Temporary URLに使用されるKey情報 |
$ curl -X POST {Object Store} -H "X-Auth-Token: {tokenId}" -H "X-Account-Meta-Temp-Url-Key: {key}"
Veleroクライアントはクラスタのバックアップおよび復元コマンドを入力するプログラムです。 Velero GithubリポジトリからVeleroクライアントをダウンロードして、クラスタのバックアップおよび復元に活用できます。ダウンロードしたVeleroクライアントコマンドを実行する前にバックアップおよび復元クラスタのkubeconfigファイルをWebコンソールからダウンロードし、KUBECONFIG環境変数を設定してバックアップおよび復元対象クラスタを正確に指定する必要があります。 kubeconfig設定の詳細についてはkubectlインストールを参照してください。
$ wget https://github.com/vmware-tanzu/velero/releases/download/v1.9.4/velero-v1.9.4-linux-amd64.tar.gz
$ tar xzf velero-v1.9.4-linux-amd64.tar.gz
どのパスからでもVeleroクライアントを実行できるように環境変数に指定されたパスに移すか、Veleroがあるパスを環境変数に追加します。
$ sudo mv velero-v1.9.4-linux-amd64/velero /usr/local/bin
$ export PATH=$PATH:$(pwd)
VeleroサーバーはHelmを利用してインストールします。
$ curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
ダウンロードしたファイルは基本的に実行権限がありません。実行権限を追加してください。
$ chmod 700 get_helm.sh
$ ./get_helm.sh
VeleroサーバーをインストールするにはHelm Repositoryを追加する必要があります。
$ helm repo add vmware-tanzu https://vmware-tanzu.github.io/helm-charts
Veleroサーバーはバックアップクラスタ
と復元クラスタ
にそれぞれインストールする必要があります。同じObject Storageを使用するには2つのクラスタに同じhelmコマンド
を使用してインストールすることを推奨します。
1.26以下のバージョンのクラスタにVeleroサーバーをインストールする場合、下記のコマンドを実行します。
$ helm install velero vmware-tanzu/velero \
--namespace velero \
--create-namespace \
--version 2.32.6 \
--set configuration.provider=community.openstack.org/openstack \
--set initContainers[0].name=velero-plugin-for-openstack \
--set initContainers[0].image=lirt/velero-plugin-for-openstack:v0.3.0 \
--set initContainers[0].volumeMounts[0].mountPath=/target \
--set initContainers[0].volumeMounts[0].name=plugins \
--set deployRestic=true \
--set configuration.defaultVolumesToRestic=true \
--set configuration.defaultResticPruneFrequency=0h1m0s \
--set configuration.backupStorageLocation.bucket={Container} \
--set configuration.backupStorageLocation.config.region={Region} \
--set configuration.backupStorageLocation.config.resticRepoPrefix=swift:{Container}:/restic \
--set configuration.extraEnvVars.OS_AUTH_URL={身元サービス(Identity)} \
--set configuration.extraEnvVars.OS_TENANT_ID={テナントID} \
--set configuration.extraEnvVars.OS_USERNAME={NHN Cloud ID} \
--set configuration.extraEnvVars.OS_PASSWORD={APIパスワード} \
--set configuration.extraEnvVars.OS_REGION_NAME={Region} \
--set configuration.extraEnvVars.OS_DOMAIN_ID=default
1.27以上のバージョンのクラスタにVeleroサーバーをインストールする場合、下記のコマンドを実行します。
$ helm install velero vmware-tanzu/velero \
--namespace velero \
--create-namespace \
--version 2.32.6 \
--set configuration.provider=community.openstack.org/openstack \
--set initContainers[0].name=velero-plugin-for-openstack \
--set initContainers[0].image=lirt/velero-plugin-for-openstack:v0.3.0 \
--set initContainers[0].volumeMounts[0].mountPath=/target \
--set initContainers[0].volumeMounts[0].name=plugins \
--set kubectl.image.tag=1.26.14-debian-11-r6 \
--set deployRestic=true \
--set configuration.defaultVolumesToRestic=true \
--set configuration.defaultResticPruneFrequency=0h1m0s \
--set configuration.backupStorageLocation.bucket={Container} \
--set configuration.backupStorageLocation.config.region={Region} \
--set configuration.backupStorageLocation.config.resticRepoPrefix=swift:{Container}:/restic \
--set configuration.extraEnvVars.OS_AUTH_URL={IDサービス(Identity)} \
--set configuration.extraEnvVars.OS_TENANT_ID={テナントID} \
--set configuration.extraEnvVars.OS_USERNAME={NHN Cloud ID} \
--set configuration.extraEnvVars.OS_PASSWORD={APIパスワード} \
--set configuration.extraEnvVars.OS_REGION_NAME={Region} \
--set configuration.extraEnvVars.OS_DOMAIN_ID=default
項目 | 説明 |
---|---|
Container | Object Sotrageで使用するコンテナ名 |
Region | 韓国(パンギョ)リージョン:KR1 韓国(坪村)リージョン: KR2 |
IDサービス(Identity) | API Endpoint設定のIDサービス(Identity) |
テナントID | API Endpoint設定のテナントID |
NHN Cloud ID | NHN Cloud ID |
APIパスワード | API Endpoint設定に入力したAPIパスワード |
Veleroサーバーはvelero uninstall
コマンドで削除できます。
クラスタのバックアップはvelero backup create
コマンドで設定できます。
$ export KUBECONFIG={バックアップクラスタのkubeconfigファイル}
$ velero backup create {name} --exclude-namespaces kube-system,velero
[注意]
kube-system
、velero
などのバックアップが必要ないnamespaceは除外する必要があります。 バックアップに含まれると復元時に問題が発生する可能性があります。
クラスタのバックアップ状態はvelero backup get
コマンドで確認できます。
$ velero backup get
NAME STATUS ERRORS WARNINGS CREATED EXPIRES STORAGE LOCATION SELECTOR
my-backup Completed 0 0 2022-02-09 10:13:44 +0900 KST 29d default <none>
クラスタバックアップ/復元はvelero restore create
コマンドで設定できます。
$ export KUBECONFIG={復元クラスタのkubeconfigファイル}
$ velero restore create --from-backup {name}
[注意] ストレージクラス(StorageClass)のリソースは、バックアップおよび復元されないため、復元前に
バックアップクラスタ
に存在するものと同じ名前のストレージクラスを復元クラスタ
にあらかじめ作成しておく必要があります。 [注意]バックアップクラスタ
と復元クラスタ
のバージョンが異なる場合、復元時に問題が発生する可能性があります。
$ velero backup create my-backup --exclude-namespaces kube-system,velero
$ velero backup get
NAME STATUS ERRORS WARNINGS CREATED EXPIRES STORAGE LOCATION SELECTOR
my-backup Completed 0 0 2022-02-09 13:23:13 +0900 KST 29d default <none>
$ velero restore create --from-backup my-backup
$ kubectl get pod --all-namespaces
velero schedule create
コマンドで定期的なバックアップを設定できます。詳細についてはschedule-a-backupを参照してください。
$ velero schedule create my-schedule --schedule="*/10 * * * *" --exclude-namespaces kube-system,velero
$ velero backup get
NAME STATUS ERRORS WARNINGS CREATED EXPIRES STORAGE LOCATION SELECTOR
my-schedule-20220209044049 Completed 0 0 2022-02-09 13:40:49 +0900 KST 29d default <none>
my-schedule-20220209043115 Completed 0 0 2022-02-09 13:31:15 +0900 KST 29d default <none>
velero schedule delete
コマンドで定期的なバックアップを解除できます。
$ velero schedule get
NAME STATUS CREATED SCHEDULE BACKUP TTL LAST BACKUP SELECTOR
my-schedule Enabled 2022-03-17 13:48:53 +0900 KST */10 * * * * 720h0m0s 4s ago <none>
$ velero schedule delete my-schedule
Are you sure you want to continue (Y/N)? y
Schedule deleted: my-schedule