コンテンツにスキップ

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 ダウンロード

イメージのインポート

 gunzip -c velero-amd64.tar.gz | docker load
gunzip velero-amd64.tar.gz
ctr -n=k8s.io images import velero-amd64.tar
 gunzip -c velero-arm64.tar.gz | docker load
gunzip velero-arm64.tar.gz
ctr -n=k8s.io images import velero-arm64.tar

前提条件

  • 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 の場合は、バケット設定を省略します。

aws s3api create-bucket \
    --bucket $BUCKET \
    --region us-east-1

Velero の権限設定

以下は IAM ユーザーを使用した権限設定方法です。その他の方法については、kube2iam を使用した権限設定 を参照してください。

詳細については、AWS IAM ユーザードキュメント を参照してください。

  1. IAM ユーザーを作成します。
aws iam create-user --user-name velero

複数のクラスターを異なる S3 バケットでバックアップする場合は、デフォルトの velero ではなく、クラスターごとに固有のユーザー名を作成することをお勧めします。

  1. ポリシーをアタッチして、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
  1. ユーザーのアクセスキーを作成します。
aws iam create-access-key --user-name velero

期待される出力:

{
  "AccessKey": {
        "UserName": "velero",
        "Status": "Active",
        "CreateDate": "2017-07-31T22:24:41.576Z",
        "SecretAccessKey": <AWS_SECRET_ACCESS_KEY>,
        "AccessKeyId": <AWS_ACCESS_KEY_ID>
  }
}
  1. ローカルディレクトリに Velero 用の認証情報ファイル(credentials-velero)を作成します。
[default]
aws_access_key_id=<AWS_ACCESS_KEY_ID>
aws_secret_access_key=<AWS_SECRET_ACCESS_KEY>

OSS バケットの作成

Velero はバックアップを保存するためのオブジェクトストレージバケットを必要とします。可能であれば、単一の Kubernetes クラスターに固有のバケットを使用してください。プレースホルダーを適宜置き換えて、OSS バケットを作成します。

BUCKET=<YOUR_BUCKET>
REGION=<YOUR_REGION>
ossutil mb oss://$BUCKET \
        --storage-class Standard \
        --acl=private

RAM ユーザーの作成

  1. ユーザーを作成します。

詳細については、Alibaba Cloud ドキュメントの RAM ユーザーガイド を参照してください。

複数のクラスターを異なる OSS バケットでバックアップする場合は、デフォルトの velero ではなく、クラスターごとに固有のユーザー名を作成することをお勧めします。

  1. ポリシーをアタッチして、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"
        }
    ]
}
  1. ユーザーのアクセスキーを作成します。

詳細については、Alibaba Cloud ドキュメントの アクセスキーの作成 を参照してください。

  1. インストールディレクトリに Velero 用の認証情報ファイル(credentials-velero)を作成します。
ALIBABA_CLOUD_ACCESS_KEY_ID=<ALIBABA_CLOUD_ACCESS_KEY_ID>
ALIBABA_CLOUD_ACCESS_KEY_SECRET=<ALIBABA_CLOUD_ACCESS_KEY_SECRET>

Velero CLI のインストールと設定

CLI のインストール

wget https://static.guance.com/dataflux/package/velero-v1.13.0-linux-amd64.tar.gz && tar -xvf velero-v1.13.0-linux-amd64.tar.gz && mv velero-v1.13.0-linux-amd64/velero /bin
wget https://static.guance.com/dataflux/package/velero-v1.13.0-linux-arm64.tar.gz && tar -xvf velero-v1.13.0-linux-arm64.tar.gz && mv velero-v1.13.0-linux-arm64/velero /bin

オフラインインストール(オプション)CLI

tar -xvf velero-v1.13.0-linux-amd64.tar.gz && mv velero-v1.13.0-linux-amd64/velero /bin
tar -xvf velero-v1.13.0-linux-arm64.tar.gz && mv velero-v1.13.0-linux-arm64/velero /bin

インストールの確認

velero -h

起動

環境変数を設定します。

BUCKET=<YOUR_BUCKET>
REGION=<YOUR_REGION>
BUCKETPATH=<YOUR_BUCKETPATH>

初期化コマンドを実行します。

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 に変更してください。

環境変数を設定します。

BUCKET=<YOUR_BUCKET>
REGION=<YOUR_REGION>
BUCKETPATH=<YOUR_BUCKETPATH>

初期化コマンドを実行します。

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

検証

テストサービスの作成
kubectl create deployment demo --image=nginx
kubectl get pod
バックアップ

バックアップコマンドを実行します。

velero backup create demo

バックアップの確認コマンド:

$ 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>
サービスを削除して復元テスト

サービスを削除します。

$ kubectl delete -n default deploy demo

deployment.apps "demo" deleted

復元:

$ 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}}

確認:

$ kubectl get pod
NAME                    READY   STATUS    RESTARTS   AGE
demo-68b4b4d5bf-qxr26   1/1     Running   0          46s

定期バックアップの設定

毎日午前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

アンインストール

rm -f /bin/velero
velero uninstall

その他

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

フィードバック

このページは役に立ちましたか?