Guance クラスターバックアップと復元¶
注意事項
本ドキュメントで説明する Velero は Kubernetes の設定(YAML ファイル)をバックアップするものであり、PVC ボリュームのデータは含まれません。
概要¶
Velero はオープンソースツールであり、Kubernetes クラスターリソースと永続ボリュームの安全なバックアップと復元、災害復旧、および移行を実行できます。
-
災害復旧 Velero は、インフラストラクチャの喪失、データ破損、またはサービス停止が発生した場合に、復旧時間を短縮できます。
-
データ移行 Velero は、Kubernetes リソースをあるクラスターから別のクラスターに簡単に移行することで、クラスターの移植性を実現します。
-
データ保護 スケジュールされたバックアップ、保持ポリシー、およびカスタムアクションのためのバックアップ前後フックなど、重要なデータ保護機能を提供します。
-
クラスターバックアップ 名前空間リソースまたはラベルセレクターを使用して、クラスター全体または一部の Kubernetes リソースとボリュームをバックアップします。
-
定期バックアップ スケジュールを設定して、定期的に自動でバックアップを開始します。
-
バックアップフック バックアップ前後フックを設定して、Velero のバックアップ前後にカスタム操作を実行します。
基本情報と互換性¶
| 名称 | 説明 |
|---|---|
| Velero バージョン | 1.13.0 |
| オフラインインストール対応 | はい |
| サポートアーキテクチャ | amd64/arm64 |
オフラインアーティファクト一覧¶
| 名称 | ダウンロード URL |
|---|---|
| Velero CLI | Amd ダウンロード Arm ダウンロード |
| Velero イメージ | Amd ダウンロード Arm ダウンロード |
イメージのインポート¶
前提条件¶
- Kubernetes クラスターがデプロイされていること(未デプロイの場合は Kubernetes デプロイメント を参照)、および
kubectlを使用してクラスターを制御できること。
Velero のインストール¶
オブジェクトストレージの設定¶
S3 バケットの作成¶
Velero はバックアップを保存するためのオブジェクトストレージバケットを必要とします。可能であれば、単一の Kubernetes クラスターに固有のバケットを使用してください(詳細は FAQ を参照)。プレースホルダーを適宜置き換えて、S3 バケットを作成します。
BUCKET=<YOUR_BUCKET>
REGION=<YOUR_REGION>
aws s3api create-bucket \
--bucket $BUCKET \
--region $REGION \
--create-bucket-configuration LocationConstraint=$REGION
us-east-1リージョンはLocationConstraintをサポートしていません。リージョンがus-east-1の場合は、バケット設定を省略します。
Velero の権限設定¶
以下は IAM ユーザーを使用した権限設定方法です。その他の方法については、kube2iam を使用した権限設定 を参照してください。
詳細については、AWS IAM ユーザードキュメント を参照してください。
- IAM ユーザーを作成します。
複数のクラスターを異なる S3 バケットでバックアップする場合は、デフォルトの
veleroではなく、クラスターごとに固有のユーザー名を作成することをお勧めします。
- ポリシーをアタッチして、
veleroに必要な権限を付与します。
cat > velero-policy.json <<EOF
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:DescribeVolumes",
"ec2:DescribeSnapshots",
"ec2:CreateTags",
"ec2:CreateVolume",
"ec2:CreateSnapshot",
"ec2:DeleteSnapshot"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:DeleteObject",
"s3:PutObject",
"s3:AbortMultipartUpload",
"s3:ListMultipartUploadParts"
],
"Resource": [
"arn:aws:s3:::${BUCKET}/*"
]
},
{
"Effect": "Allow",
"Action": [
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::${BUCKET}"
]
}
]
}
EOF
aws iam put-user-policy \
--user-name velero \
--policy-name velero \
--policy-document file://velero-policy.json
- ユーザーのアクセスキーを作成します。
期待される出力:
{
"AccessKey": {
"UserName": "velero",
"Status": "Active",
"CreateDate": "2017-07-31T22:24:41.576Z",
"SecretAccessKey": <AWS_SECRET_ACCESS_KEY>,
"AccessKeyId": <AWS_ACCESS_KEY_ID>
}
}
- ローカルディレクトリに Velero 用の認証情報ファイル(
credentials-velero)を作成します。
OSS バケットの作成¶
Velero はバックアップを保存するためのオブジェクトストレージバケットを必要とします。可能であれば、単一の Kubernetes クラスターに固有のバケットを使用してください。プレースホルダーを適宜置き換えて、OSS バケットを作成します。
BUCKET=<YOUR_BUCKET>
REGION=<YOUR_REGION>
ossutil mb oss://$BUCKET \
--storage-class Standard \
--acl=private
RAM ユーザーの作成¶
- ユーザーを作成します。
詳細については、Alibaba Cloud ドキュメントの RAM ユーザーガイド を参照してください。
複数のクラスターを異なる OSS バケットでバックアップする場合は、デフォルトの
veleroではなく、クラスターごとに固有のユーザー名を作成することをお勧めします。
- ポリシーをアタッチして、velero に必要な権限を付与します。
セキュリティ上の理由から、バックアップまたは復元タスクの完了後は、velero の削除権限を解放することをお勧めします。
{
"Version": "1",
"Statement": [
{
"Action": [
"ecs:DescribeSnapshots",
"ecs:CreateSnapshot",
"ecs:DeleteSnapshot",
"ecs:DescribeDisks",
"ecs:CreateDisk",
"ecs:Addtags",
"oss:PutObject",
"oss:GetObject",
"oss:DeleteObject",
"oss:GetBucket",
"oss:ListObjects",
"oss:ListBuckets"
],
"Resource": [
"*"
],
"Effect": "Allow"
}
]
}
- ユーザーのアクセスキーを作成します。
詳細については、Alibaba Cloud ドキュメントの アクセスキーの作成 を参照してください。
- インストールディレクトリに Velero 用の認証情報ファイル(
credentials-velero)を作成します。
Velero CLI のインストールと設定¶
CLI のインストール¶
オフラインインストール(オプション)CLI¶
インストールの確認¶
起動¶
環境変数を設定します。
初期化コマンドを実行します。
velero install \
--provider aws \
--image pubrepo.guance.com/googleimages/velero:v1.13.0 \
--plugins pubrepo.guance.com/googleimages/velero-plugin-for-aws:v1.9.0 \
--bucket $BUCKET \
--backup-location-config region=$REGION \
--snapshot-location-config region=$REGION \
--secret-file ./credentials-velero \
--prefix $BUCKETPATH \
--backup-location-config s3ForcePathStyle="true",s3Url=https://s3.$BUCKET.amazonaws.com.cn
海外ノードを使用する場合は、s3Url を
https://s3.$BUCKET.amazonaws.comに変更してください。
環境変数を設定します。
初期化コマンドを実行します。
velero install \
--provider alibabacloud \
--image pubrepo.guance.com/googleimages/velero:v1.13.0 \
--bucket $BUCKET \
--secret-file ./credentials-velero \
--use-volume-snapshots=false \
--backup-location-config region=$REGION \
--prefix $BUCKETPATH \
--plugins pubrepo.guance.com/googleimages/velero-plugin-alibabacloud:v1.9.6-581f313-aliyun
検証¶
テストサービスの作成¶
バックアップ¶
バックアップコマンドを実行します。
バックアップの確認コマンド:
$ velero get backup
NAME STATUS ERRORS WARNINGS CREATED EXPIRES STORAGE LOCATION SELECTOR
demo Completed 0 0 2024-03-04 18:31:28 +0800 CST 29d default <none>
サービスを削除して復元テスト¶
サービスを削除します。
復元:
$ velero restore create --from-backup demo --include-namespaces default --selector app=demo
Restore request "demo-20240304184105" submitted successfully.
Run `velero restore describe demo-20240304184105` or `velero restore logs demo-20240304184105` for more details.
velero restore create --from-backup {{backup_name}} --restore-volumes --include-namespaces {{namespace_name}} --selector app={{app_label}}
確認:
定期バックアップの設定¶
毎日午前1時にバックアップ(PVC データはバックアップしない)、保持期間は7日間
$ velero create schedule all-guance --schedule="0 1 * * *" --ttl 168h
$ velero get schedule
NAME STATUS CREATED SCHEDULE BACKUP TTL LAST BACKUP SELECTOR PAUSED
all-guance Enabled 2024-03-04 18:44:55 +0800 CST 0 1 * * * 168h0m0s n/a <none> false
アンインストール¶
その他¶
関連コマンド¶
velero get backup # バックアップの確認
velero get schedule # 定期バックアップの確認
velero get restore # 既存の復元の確認
velero get plugins # プラグインの確認
velero restore create --from-backup all-ns-backup # クラスター全体のバックアップを復元(既存のサービスは上書きされない)
velero restore create --from-backup all-ns-backup --include-namespaces default,nginx-example # default および nginx-example 名前空間のみ復元
Velero はリソースをバックアップ元とは異なる名前空間に復元できます。これには --namespace-mappings フラグを使用します。
velero restore create RESTORE_NAME --from-backup BACKUP_NAME --namespace-mappings old-ns-1:new-ns-1,old-ns-2:new-ns-2
例: test-velero 名前空間のリソースを test-velero-1 に復元する場合
velero restore create restore-for-test --from-backup everyday-1-20210203131802 --namespace-mappings test-velero:test-velero-1
# 定期バックアップ
velero create schedule prd-aws-df --schedule="0 1 * * *" --ttl 168h