Velero を使用して Kubernetes クラスターをバックアップおよび復元する

Velero を使用して Kubernetes クラスターをバックアップおよび復元する

[[425938]]

Velero (https://velero.io) は、Kubernetes クラスター リソースと永続ボリュームをバックアップおよび復元する機能を提供できます。 Velero はパブリック クラウドまたはローカルに構築されたプライベート クラウド環境にインストールでき、次の機能が提供されます。

  • クラスターデータをバックアップし、クラスター障害が発生した場合に復元する
  • クラスターリソースを別のクラスターに移行する
  • 本番環境のクラスターを開発環境とテスト環境のクラスターにコピーする

Velero は、クラスター上で実行されるサーバーと、ローカルで実行されるコマンドライン クライアントで構成されます。

原理

各 Velero 操作 (オンデマンド バックアップ、スケジュールされたバックアップ、復元など) は CRD カスタム リソースです。 Velero はクラスター内のすべてのオブジェクトをバックアップまたは復元できるほか、タイプ、名前空間、タグ別にオブジェクトをフィルタリングすることもできます。 Velero は、Kubernetes を使用した災害復旧に最適であり、クラスターでシステム操作 (アップグレードなど) を実行する前にアプリケーション状態のスナップショットを取得するのにも最適です。

オンデマンドバックアップ

オンデマンド バックアップ操作では、コピーされた Kubernetes オブジェクトの圧縮ファイルをクラウド オブジェクト ストレージにアップロードしたり、クラウド環境が提供する API を呼び出して永続ボリュームのディスク スナップショットを作成したりできます。オプションで、バックアップ中に実行されるバックアップ フックを指定できます。たとえば、スナップショットを取得する前に、データベースにメモリ内のバッファーをディスクにフラッシュするように指示することができます。

クラスター バックアップは厳密にはアトミックではないことに注意することが重要です。バックアップの進行中に Kubernetes オブジェクトが作成または編集された場合、それらのオブジェクトはバックアップに含まれない可能性があります。それは可能です。

スケジュールされたバックアップ

スケジュールされた操作を通じて、データを定期的にバックアップできます。最初のバックアップはスケジュールが最初に作成されたときに実行され、その後のバックアップはスケジュールで指定された間隔で実行されます。これらの間隔は Cron 式によって指定されます。

スケジュールされたバックアップの名前は <SCHEDULE NAME>-<TIMESTAMP> です。<TIMESTAMP> の形式は YYYYMMDDhhmmss です。

バックアップと復元

復元操作により、以前に作成したバックアップからすべてのオブジェクトと永続ボリュームを復元できます。さらに、オブジェクトと永続ボリュームのサブセットのみを復元することもできます。 Velero は複数の名前空間の再マッピングをサポートします。たとえば、復元操作では、名前空間 abc 内のオブジェクトを名前空間 def の下に再作成したり、名前空間 123 内のオブジェクトを 456 の下に再作成したりできます。

復元のデフォルト名は <BACKUP NAME>-<TIMESTAMP> です。<TIMESTAMP> の形式は YYYYMMDDhhmmss です。カスタム名を指定することもできます。復元されたオブジェクトには、キーvelero.io/restore-nameと値を持つタグも含まれています。 <名前を復元>。

デフォルトでは、バックアップの保存場所は読み取り/書き込みモードで作成されますが、復元中にバックアップの保存場所を読み取り専用モードで構成することができます。これにより、その保存場所のバックアップの作成と削除が無効になり、復元シナリオ中に誤ってバックアップが作成または削除されないようにするのに役立ちます。さらに、復元中またはリソースの復元後に実行される復元フックを指定することもできます。たとえば、データベース アプリケーション コンテナーを起動する前に、カスタム データベース復元操作を実行する必要がある場合があります。

バックアッププロセス

velero backup create test-backup コマンドを実行すると、次の操作が実行されます。

  • VeleroクライアントはKubernetes APIサーバーを呼び出してバックアップCRDオブジェクトを作成します。
  • バックアップコントローラは、新しいバックアップオブジェクトの作成を監視し、検証を実行します。
  • バックアップコントローラは、APIサーバーにクエリを実行してリソースを取得し、バックアップ用のデータを収集することで、バックアップの実行を開始します。
  • バックアップ コントローラーは、S3 などのオブジェクト ストレージ サービスを呼び出して、バックアップ ファイルをアップロードします。

デフォルトでは、velero backup create は任意の永続ボリュームのディスク スナップショットをサポートします。追加のパラメータを指定してスナップショットを調整できます。 --snapshot-volumes=false オプションを使用してスナップショットを無効にすることができます。

バックアップの有効期限を設定する

バックアップを作成するときに、フラグ --ttl を追加して TTL を指定できます。指定しない場合、デフォルトの TTL 値は 30 日になります。 Velero は、バックアップ リソースの有効期限が切れたことを検出すると、次のように対応するバックアップ データを削除します。

  • バックアップリソース
  • クラウドオブジェクトストレージからファイルをバックアップする
  • すべてのPersistentVolumeスナップショット
  • すべての関連付けを復元する

同期オブジェクトストレージ

Velero はオブジェクト ストレージをリソースのソースとして扱います。常に正しいバックアップ リソースが存在することを継続的に確認します。バケット内に正しくフォーマットされたバックアップ ファイルが存在するが、Kubernetes API サーバー内に対応するバックアップ リソースが存在しない場合、Velero はオブジェクト ストレージから Kubernetes に情報を同期します。これにより、元のバックアップ オブジェクトが新しいクラスターに存在しないクラスター移行シナリオで復元機能が動作できるようになります。同様に、バックアップ オブジェクトが Kubernetes に存在するがオブジェクト ストアには存在しない場合は、バックアップ アーカイブが存在しなくなるため、Kubernetes から削除されます。

バックアップの保存場所とボリュームのスナップショットの場所

Velero には、BackupStorageLocation と VolumeSnapshotLocation という 2 つのカスタム リソースがあり、これらは Velero バックアップとそれに関連付けられた永続ボリューム スナップショットの保存場所を構成するために使用されます。

  • BackupStorageLocation: ストレージ領域、すべての Velero データが保存されるストレージ領域内のプレフィックス、およびその他のプロバイダー固有のフィールドのセットとして定義されます。このセクションに含まれるフィールドについては、次のセクションで詳しく説明します。
  • VolumeSnapshotLocation: プロバイダー固有のフィールド (AWS リージョン、Azure リソース グループ、Portworx スナップショット タイプなど) によって完全に定義されます。

ユーザーは、1 つ以上の BackupStorageLocations オブジェクトを事前に構成したり、1 つ以上の VolumeSnapshotLocations オブジェクトを事前に構成したり、バックアップを作成するときにバックアップと関連するスナップショットを保存する場所を選択したりできます。

この構成は、次のようなさまざまな用途をサポートするように設計されています。

  • 単一の Velero バックアップで複数の永続ボリュームのスナップショットを作成します。たとえば、EBSボリュームとPortworxボリュームの両方を持つクラスターでは
  • 異なる地域の異なるストレージにデータをバックアップする
  • これをサポートするボリュームプロバイダー (Portworx など) の場合、一部のスナップショットをローカル クラスターに保存し、他のスナップショットをクラウドに保存することが可能です。

インストール

Github リリース ページ (https://github.com/vmware-tanzu/velero/releases) から指定された velero バイナリ クライアント インストール パッケージをダウンロードします。たとえば、ここでは最新の安定バージョン v1.6.3 をダウンロードします。

  1. ➜ ~ wget https://github.com/vmware-tanzu/velero/releases/download/v1.6.3/velero-v1.6.3-darwin-amd64.tar.gz
  2. # 制限がある場合は、ダウンロードを高速化するために次のURLに置き換えることもできます
  3. # wget https://download.fastgit.org/vmware-tanzu/velero/releases/download/v1.6.3/velero-v1.6.3-darwin-amd64.tar.gz
  4. ➜ ~ tar -zxvf velero-v1.6.3-darwin-amd64.tar.gz && cd velero-v1.6.3-darwin-amd64
  5. ➜ ~ 木。
  6. ├── ライセンス
  7. ├── 例
  8. │ ├── README.md
  9. │ ├── ミニオ
  10. │ │ └── 00-minio-deployment.yaml
  11. │ └── nginxアプリ
  12. │ ├── README.md
  13. │ ├── ベース.yaml
  14. │ └── -pv.yaml付き
  15. └── ベレロ
  16.  
  17. 3 つのディレクトリ、7 つのファイル

ルート ディレクトリにある velero バイナリ ファイルを PATH パスにコピーします。

  1. ➜ ~ cp velero /usr/ local /bin && chmod +x /usr/ local /bin/velero
  2. ➜ ~ ベレロバージョン
  3. クライアント:
  4. バージョン: v1.6.3
  5. Gitコミット: 5fe3a50bfddc2becb4c0bd5e2d3d4053a23e95d2
  6. <サーバー バージョンの取得中にエラーが発生しました:種類"ServerStatusRequest"一致するものがありません バージョン「velero.io/v1 >

MINIOのインストール

ここでは、クラウド環境のオブジェクト ストレージを minio を使用して置き換えることができます。上記で解凍した圧縮パッケージには、リソース リスト ファイル examples/minio/00-minio-deployment.yaml が含まれています。テストの便宜上、Service を NodePort タイプに変更できます。コンソール ページへのアクセス エントリを提供するには、コンソール アドレスを構成できます。完全なリソース リスト ファイルは次のとおりです。

  1. APIバージョン: v1
  2. 種類: 名前空間
  3. メタデータ:
  4. 名前: ベレロ
  5. ---  
  6. APIバージョン: アプリ/v1
  7. 種類: デプロイメント
  8. メタデータ:
  9. 名前空間: velero
  10. 名前: ミニオ
  11. ラベル:
  12. コンポーネント: minio
  13. 仕様:
  14. 戦略:
  15. タイプ: 再作成
  16. セレクタ:
  17. 一致ラベル:
  18. コンポーネント: minio
  19. テンプレート:
  20. メタデータ:
  21. ラベル:
  22. コンポーネント: minio
  23. 仕様:
  24. ボリューム:
  25. -名前: ストレージ
  26. 空ディレクトリ: {}
  27. -名前: 設定
  28. 空ディレクトリ: {}
  29. コンテナ:
  30. -名前:ミニオ
  31. 画像: minio/minio:latest
  32. イメージプルポリシー: IfNotPresent
  33. 引数:
  34. - サーバー
  35. - /ストレージ
  36. - --config-dir=/config  
  37. - --コンソールアドレス=:9001  
  38. 環境:
  39. -名前: MINIO_ACCESS_KEY
  40. 値: "minio"  
  41. -名前: MINIO_SECRET_KEY
  42. 値: "minio123"  
  43. ポート:
  44. - コンテナポート: 9000
  45. - コンテナポート: 9001
  46. ボリュームマウント:
  47. -名前: ストレージ
  48. マウントパス: "/storage"  
  49. -名前: 設定
  50. マウントパス: "/config"  
  51. ---  
  52. APIバージョン: v1
  53. 種類: サービス
  54. メタデータ:
  55. 名前空間: velero
  56. 名前: ミニオ
  57. ラベル:
  58. コンポーネント: minio
  59. 仕様:
  60. タイプ: NodePort
  61. ポート:
  62. -名前: api
  63. ポート: 9000
  64. ターゲットポート: 9000
  65. -名前: コンソール
  66. ポート: 9001
  67. ターゲットポート: 9001
  68. セレクタ:
  69. コンポーネント: minio
  70. ---  
  71. APIバージョン: batch/v1
  72. 種類: 仕事
  73. メタデータ:
  74. 名前空間: velero
  75. 名前: minio-setup
  76. ラベル:
  77. コンポーネント: minio
  78. 仕様:
  79. テンプレート:
  80. メタデータ:
  81. 名前: minio-setup
  82. 仕様:
  83. 再起動ポリシー: OnFailure
  84. ボリューム:
  85. -名前: 設定
  86. 空ディレクトリ: {}
  87. コンテナ:
  88. -名前: mc
  89. 画像: minio/mc:latest
  90. イメージプルポリシー: IfNotPresent
  91. 指示:
  92. - /bin/sh
  93. - -c
  94. - 「mc --config-dir=/config config host add velero http://minio:9000 minio minio123 && mc --config-dir=/config mb -p velero/velero」  
  95. ボリュームマウント:
  96. -名前: 設定
  97. マウントパス: "/config"  

次に、Kubernetes クラスターに直接デプロイします。

  1. ➜ ~ kubectl apply -f examples/minio/00-minio-deployment.yaml
  2. 名前空間/velero が作成されました
  3. デプロイメント.apps/minio が作成されました
  4. サービス/minio を作成しました
  5. job.batch/minio-setup が作成されました
  6. ➜ ~ kubectl ポッドを取得 -n velero
  7. 名前準備完了 ステータス 再起動 年齢
  8. minio-5b96ffddf8-x8s7p 1/1 実行中 0 2分48秒
  9. minio-setup-rhc4d 0/1 完了 1 2分48秒
  10. ➜ ~ kubectl get svc -n velero
  11. 名前タイプ クラスター IP 外部 IP ポート 年齢
  12. minio ノードポート 10.103.132.34 <なし> 9000:32036/TCP、9001:31925/TCP 3分56秒

次にhttp://を使用します。 :31925 minio のコンソール ページにアクセスし、minio と minio を使用してログインします。

もちろん、異なる Kubernetes およびストレージ プール クラスターでデータをバックアップおよび復元する必要がある場合は、クラスターで壊滅的な障害が発生したときにバックアップ データが影響を受けないように、Kubernetes クラスターの外部に minio サーバーをインストールする必要があります。バイナリモードでインストールできます。

minioをインストールするサーバーにバイナリパッケージをダウンロードします

  1. ➜ ~ wget https://dl.minio.io/server/minio/release/linux-amd64/minio
  2. ➜ ~ chmod +x ミニオ
  3. ➜ ~ sudo mv minio /usr/ local /bin/
  4. ➜ ~ minio --version  

オブジェクトストレージ用のディスクを準備します。ここではこの手順をスキップします。 systemd を使用して minio サービスを管理できます。 systemd init システムを使用してシステムを実行する場合は、minio サービスを実行するためのユーザーとグループを作成してください。

  1. ➜ ~ sudo groupadd --system minio  
  2. ➜ ~ sudo useradd -s /sbin/nologin --system -g minio minio  

minio ユーザーに /data ディレクトリ (上記の手順で準備したディスク マウント場所) の所有権を付与します。

  1. ➜ ~ sudo chown -R minio:minio /data/

minio 用の systemd サービス ユニット ファイルを作成します。

  1. ➜ ~ vi /etc/systemd/system/minio.service
  2. [ユニット]
  3. 説明=ミニオ
  4. ドキュメント=https://docs.minio.io
  5. 欲しいもの=ネットワークオンライン.ターゲット
  6. =network-online.targetの後
  7. AssertFileIsExecutable=/usr/ローカル/bin/minio
  8.  
  9. [サービス]
  10. 作業ディレクトリ=/data
  11. ユーザー=minio
  12. グループ= minio
  13. 環境ファイル=-/etc/デフォルト/minio
  14. ExecStartPre=/bin/bash -c "if [ -z \"${MINIO_VOLUMES}\" ]; then echo \"変数 MINIO_VOLUMES が /etc/default/minio に設定されていません\"; exit 1; fi"  
  15. ExecStart=/usr/ローカル/bin/minio サーバー $MINIO_OPTS $MINIO_VOLUMES
  16. # systemd がこのサービスを常に再起動するようにする
  17. 再起動=常に
  18. #このプロセス開くことができるファイル記述子の最大数を指定します
  19. 制限NOFILE=65536
  20. # タイムアウトロジックを無効にしてプロセスが停止するまで待機ます
  21. タイムアウトストップ秒=無限
  22. SendSIGKILL=いいえ 
  23.  
  24. [インストール]
  25. WantedBy =マルチユーザー.ターゲット

minio 環境ファイル /etc/default/minio を作成します。

  1. # Minio サーバー使用するボリューム
  2. MINIO_VOLUMES = "/データ"  
  3.  
  4. #カスタム ポートMinio を実行する場合に使用します。
  5. MINIO_OPTS= "--アドレス:9000"  
  6.  
  7. # アクセスキー サーバー
  8. MINIO_ACCESS_KEY=ミニオ
  9.  
  10. # 秘密 サーバー
  11. MINIO_SECRET_KEY=minio123

MINIO_ACCESS_KEY は少なくとも 3 文字の長さのアクセス キーであり、MINIO_SECRET_KEY は少なくとも 8 文字の長さのキーです。 systemd をリロードし、 minio サービスを開始します。

  1. ➜ ~ sudo systemctl デーモンリロード
  2. ➜ ~ sudo systemctl start minio

minio の詳細については、公式ドキュメント https://docs.min.io/ を参照してください。

veleroサーバーをインストールする

velero クライアントを使用してサーバーをインストールすることも、Helm Chart を使用してインストールすることもできます。たとえば、ここではクライアントを使用してインストールします。 velero コマンドは、デフォルトで kubectl によって構成されたクラスター コンテキストを読み取るため、前提として、velero クライアントが配置されているノードには、クラスターにアクセスできる kubeconfig 構成があります。

まず、キー ファイルを準備し、現在のディレクトリに次の内容の空のテキスト ファイルを作成します。

  1. [デフォルト]
  2. aws_access_key_id=<アクセスキーID>
  3. aws_secret_access_key=<シークレットアクセスキー>

前の手順で minio の対応するアクセス キー ID とシークレット アクセス キーに置き換えます。 minio が Kubernetes クラスターにインストールされている場合は、次のように velero サーバーをインストールします。

  1. ➜ ~ velero インストール \
  2. --provider aws \  
  3. --バケットベレロ\  
  4. --image velero/velero:v1.6.3 \  
  5. --plugins velero/velero-plugin-for-aws:v1.2.1 \  
  6. --namespace velero \  
  7. --secret-file ./credentials-velero \  
  8. --use-volume-snapshots=false \  
  9. --use-restic \  
  10. --backup-location-config リージョン = minio、s3ForcePathStyle = "true"、s3Url = http://minio.velero.svc:9000  
  11. ......
  12. DaemonSet/restic: 作成されました
  13. Veleroインストールされました! ⛵ 「kubectl logsdeployment/velero -n velero」を使用します。   ステータスを表示します
  14. ➜ ~ kubectl ポッドを取得 -n velero
  15. 名前準備完了 ステータス 再起動 年齢
  16. minio-5b96ffddf8-x8s7p 1/1 実行中 0 4分1秒
  17. minio-setup-rhc4d 0/1 完了 1 4分1秒
  18. retic-2qn94 1/1 ランニング 0 22 秒
  19. velero-664598d6cc-dpvxn 1/1 実行中 0 22 秒

minio をオブジェクト ストレージとして使用するため、minio は S3 と互換性があり、ここで構成するプロバイダー (使用する Velero プラグインの種類を宣言) は aws です。--secret-file は minio にアクセスするためのキーを提供するために使用され、--use-restic はオープン ソースの無料バックアップ ツール restic を使用して永続ボリューム データをバックアップおよび復元することを意味します。このパラメータを有効にすると、restic という名前の DaemonSet オブジェクトがデプロイされ、--plugins は velero プラグインを使用します。 AWS S3互換プラグインを使用します。

インストールが完了すると、velero サーバーが正常にデプロイされます。

テスト

たとえば、MySQL アプリケーションをデプロイする場合、リソース リスト ファイルは次のようになります。

  1. #mysql-デプロイメント.yaml
  2. APIバージョン: v1
  3. 種類: PersistentVolumeClaim
  4. メタデータ:
  5. 名前: mysql-pv-claim
  6. ラベル:
  7. アプリ:mysql
  8. 仕様:
  9. アクセスモード:
  10. -一度だけ読み書き可能
  11. リソース:
  12. リクエスト:
  13. ストレージ: 20Gi
  14. ---  
  15. APIバージョン: アプリ/v1
  16. 種類: デプロイメント
  17. メタデータ:
  18. 名前: mysql
  19. ラベル:
  20. アプリ:mysql
  21. 仕様:
  22. セレクタ:
  23. 一致ラベル:
  24. アプリ:mysql
  25. テンプレート:
  26. メタデータ:
  27. ラベル:
  28. アプリ:mysql
  29. 仕様:
  30. コンテナ:
  31. - イメージ:mysql:5.6
  32. 名前: mysql
  33. 環境:
  34. -名前: MYSQL_ROOT_PASSWORD
  35. 値:
  36. シークレットキーリファレンス:
  37. 名前: mysql-pass
  38. キー:パスワード 
  39. ライブネスプローブ:
  40. tcpソケット:
  41. ポート: 3306
  42. ポート:
  43. - コンテナポート: 3306
  44. 名前: mysql
  45. ボリュームマウント:
  46. -名前: mysql-persistent-storage
  47. マウントパス: /var/lib/mysql
  48. ボリューム:
  49. -名前: mysql-persistent-storage
  50. 永続ボリュームクレーム:
  51. クレーム名: mysql-pv-claim

上記のアプリケーションを直接デプロイします。

  1. ➜ ~ kubectl名前空間 kube-demoを作成します
  2. ➜ ~ kubectlシークレットジェネリック mysql-pass --from-literal=password=password321 -n kube-demoを作成します 
  3. ➜ ~ kubectl apply -f mysql-deployment.yaml -n kube-demo
  4. ➜ ~ kubectl ポッドを取得 -n kube-demo
  5. 名前準備完了 ステータス 再起動 年齢
  6. mysql-c57f676dd-gw5pf 1/1 実行中 0 51秒

たとえば、新しいデータベース velero を作成します。

  1. ➜ ~ kubectl exec -it -n kube-demo mysql-c57f676dd-gw5pf -- /bin/bash  
  2. mysql-c57f676dd-gw5pf:/# mysql -uroot -p
  3. パスワードを入力してください:
  4. MySQL モニターようこそ。コマンド終了 ;または\g。
  5. MySQL接続IDは7です
  6. サーバーバージョン: 5.6.51 MySQL コミュニティサーバー (GPL)
  7.  
  8. Copyright (c) 2000、2021、Oracleおよび/またはその関連会社。無断転載を禁じます。
  9.  
  10. OracleはOracle Corporationおよび/またはその関連会社登録商標です
  11. 関連会社。その他の名称は、それぞれの商標である可能性があります。
  12. 所有者。
  13.  
  14. 「help;」と入力します または  '\h'  助けを求めて '\c'と入力 現在の入力ステートメントをクリアします
  15.  
  16. mysql> データベースを表示します。
  17. + --------------------+  
  18. |データベース|
  19. + --------------------+  
  20. |情報スキーマ |
  21. |mysql |
  22. |パフォーマンススキーマ |
  23. + --------------------+  
  24. 3  設定(0.00 秒)
  25.  
  26. mysql>作成 データベースvelero;
  27. クエリは正常、1 行が影響を受けました (0.00 秒)
  28.  
  29. mysql> データベースを表示します。
  30. + --------------------+  
  31. |データベース|
  32. + --------------------+  
  33. |情報スキーマ |
  34. |mysql |
  35. |パフォーマンススキーマ |
  36. |ベレロ
  37. + --------------------+  
  38. 4  設定(0.00 秒)
  39.  
  40. マイSQL>

それではバックアップを実行しましょう:

  1. ➜ ~ velero バックアップを作成します。mysql -backup --include-namespaces kube-demo --default-volumes-to-restic  
  2. バックアップ要求「mysql-backup」が正常に送信されました。
  3. 詳細については、`velero backup describe mysql-backup`または`velero backup logs mysql-backup`を実行してください。

指定した --default-volumes-to-restic パラメータは、永続ボリュームを minio にバックアップするために restic が使用されることを示します。 --include-namespaces は、クラスター リソースを除く、名前空間の下にあるすべてのリソースをバックアップするために使用されます。さらに、--include-resources を使用してバックアップするリソース タイプを指定し、--include-cluster-resources を使用してクラスター リソースをバックアップするかどうかを指定できます。

このコマンドは、プロジェクト (名前空間) のバックアップの作成を要求します。バックアップ要求が送信された後、コマンドを使用してバックアップのステータスを表示できます。 STATUS 列が Completed に変わると、バックアップは完了です。

  1. ➜ ~ velero バックアップを取得
  2. 名前ステータス エラー 警告 作成日 有効期限 保存場所 セレクター
  3. mysql-backup 完了 0 0 2021-09-16 16:58:51 +0800 CST 29dデフォルト<なし>
  4. ➜ ~ velero バックアップ mysql-backup について説明する
  5. 名前: mysql-backup
  6. 名前空間: velero
  7. ラベル: velero.io/storage-location= default  
  8. 注釈: velero.io/source-cluster-k8s-gitversion=v1.18.4-tke.6
  9. velero.io/source-cluster-k8s-major-version=1
  10. velero.io/source-cluster-k8s-minor-version=18+
  11.  
  12. フェーズ: 完了
  13.  
  14. エラー: 0
  15. 警告: 0
  16.  
  17. 名前空間:
  18. 含まれるもの: kube-demo
  19. 除外: <なし>
  20.  
  21. リソース:
  22. 含まれるもの: *
  23. 除外: <なし>
  24. クラスタースコープ: 自動
  25.  
  26. ラベルセレクター: <なし>
  27.  
  28. 保存場所:デフォルト 
  29.  
  30. Velero ネイティブ スナップショット PV: 自動
  31.  
  32. TTL: 720h0m0s
  33.  
  34. フック: <なし>
  35.  
  36. バックアップフォーマットバージョン: 1.1.0
  37.  
  38. 開始: 2021-09-16 16:58:51 +0800 CST
  39. 完了: 2021-09-16 16:59:08 +0800 CST
  40.  
  41. 有効期限: 2021-10-16 16:58:51 +0800 CST
  42.  
  43. バックアップするアイテムの合計数: 30
  44. バックアップされたアイテム: 30
  45.  
  46. Velero ネイティブ スナップショット: <含まれないもの>
  47.  
  48. Restic バックアップ (詳細については --details を指定してください):  
  49. 完了: 1

バックアップが完了したら、minio バケットに移動して、対応するバックアップ データがあるかどうかを確認できます。

ここで、アプリケーションが配置されている名前空間を削除して、運用環境での災害や運用および保守エラーによってアプリケーションが失敗するシナリオをシミュレートします。

  1. ➜ ~ kubectl名前空間の削除kube-demo

現時点では、MySQL データベースにアクセスすることはできません。現時点では、velero を使用して、1 つのコマンドで minio からアプリケーションとデータを復元できます。

  1. ➜ ~ velero 復元作成  --from-backup mysql-バックアップ 
  2. 復元リクエスト「mysql-backup-20210916172100」が正常に送信されました。
  3. 詳細については、 「velero restore describe mysql-backup-20210916172100」または「velero restore logs mysql-backup-20210916172100」を実行してください。

velero restore get を使用して復元の進行状況を表示することもできます。 STATUS 列が Completed に変わると、復元は完了です。

  1. ➜ ~ velero 復元 取得
  2. 名前バックアップ ステータス 開始 完了 エラー 警告 作成 セレクタ
  3. mysql-backup-20210916172100 mysql-backup 完了 2021-09-16 17:21:00 +0800 CST 2021-09-16 17:21:22 +0800 CST 0 0 2021-09-16 17:21:00 +0800 CST <なし>
  4. ➜ ~ velero 復元は mysql-backup-20210916172100 を記述します
  5. 名前: mysql-backup-20210916172100
  6. 名前空間: velero
  7. ラベル: <なし>
  8. 注釈: <なし>
  9.  
  10. フェーズ: 完了
  11. 復元するアイテムの合計数: 10
  12. 復元されたアイテム: 10
  13.  
  14. 開始: 2021-09-16 17:21:00 +0800 CST
  15. 完了: 2021-09-16 17:21:22 +0800 CST
  16.  
  17. バックアップ: mysql-backup
  18.  
  19. 名前空間:
  20. 含まれるもの:バックアップ見つかったすべての名前空間
  21. 除外: <なし>
  22.  
  23. リソース:
  24. 含まれるもの: *
  25. 除外: ノード、イベント、events.events.k8s.io、backups.velero.io、restores.velero.io、resticrepositories.velero.io
  26. クラスタースコープ: 自動
  27.  
  28. 名前空間マッピング: <なし>
  29.  
  30. ラベルセレクター: <なし>
  31.  
  32. PVの復元: 自動
  33.  
  34. Restic 復元 (詳細については --details を指定してください):  
  35. 完了: 1
  36.  
  37. サービス NodePorts を保持: 自動

復元が完了したら、kube-demo 名前空間のアプリケーション データが正しいかどうかを確認します。

  1. ➜ ~ kubectl get ns kube-demo
  2. 名前ステータス 年齢
  3. kube-demo アクティブ 3分29秒
  4. ➜ ~ kubectl ポッドを取得 -n kube-demo
  5. 名前準備完了 ステータス 再起動 年齢
  6. mysql-c57f676dd-gw5pf 1/1 実行中 0 6分28秒
  7. ➜ ~ kubectl exec -it -n kube-demo mysql-c57f676dd-gw5pf -- /bin/bash  
  8. ルート@mysql-c57f676dd-gw5pf:/# mysql -uroot -p
  9. パスワードを入力してください:
  10. MySQL モニターようこそ。コマンド終了 ;または\g。
  11. MySQL接続ID42です
  12. サーバーバージョン: 5.6.51 MySQL コミュニティサーバー (GPL)
  13.  
  14. Copyright (c) 2000、2021、Oracleおよび/またはその関連会社。無断転載を禁じます。
  15.  
  16. OracleはOracle Corporationおよび/またはその関連会社登録商標です
  17. 関連会社。その他の名称は、それぞれの商標である可能性があります。
  18. 所有者。
  19.  
  20. 「help;」と入力します または  '\h'  助けを求めて '\c'と入力 現在の入力ステートメントをクリアします
  21.  
  22. mysql> データベースを表示します。
  23. + ---------------------+  
  24. |データベース|
  25. + ---------------------+  
  26. |情報スキーマ |
  27. | #mysql50#紛失+発見 |
  28. |mysql |
  29. |パフォーマンススキーマ |
  30. |ベレロ |
  31. + ---------------------+  
  32. 5  設定(0.00 秒)
  33.  
  34. マイSQL>

作成した velero データベースがまだ存在しており、完全に復元されたことがわかります。

各 Velero インスタンスが同じオブジェクト ストレージを指している限り、Velero は 1 つのクラスターから別のクラスターにリソースを移行できます。さらに、スケジュールされたバックアップ、バックアップ フックのトリガー、その他の操作もサポートします。詳細については、公式ドキュメントを参照してください: https://velero.io/docs/

<<:  Alibaba Cloud、統合データ分析機能を実現する初のワンストップアジャイルデータウェアハウスソリューションをリリース

>>:  LaaS、PaaS、Caas、Iaas、Faas、SaaSについて理解する必要があること

推薦する

SEO担当者が見逃せない特別なトラフィックとチャンス

このタイトルを見ると、特別トラフィックとは何なのか少し混乱するかもしれません。特別トラフィックとは、...

ポルノおよび違法出版物対策国家事務所は、違法および不法なウェブサイトのリストを公開した。

中国国際放送、北京4月6日。記者が国家ポルノ違法出版取り締まり弁公室から得た情報によると、3月5日に...

httpzoom-7 USD/KVM/2 コア/512M メモリ/1T ハードディスク/6T トラフィック

httpzoom はユタ州で新製品を発表しました。これは、8 コア 16 スレッドの Xeon CP...

namecheap: 「Web セキュリティ セール」割引プロモーション、各種 SSL\商用 DNS\検証\VPS など。

Namecheap のネットワーク セキュリティ プロモーションが開始されました。主に、Essent...

Ucomm のマーケティングの約束は真実でしょうか、それとも嘘でしょうか?

2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っています現在、多く...

仮想マシンに Windows 11 をインストールするにはどうすればいいですか?

[[418362]] [51CTO.com クイック翻訳]ほとんどの人にとって、通常の PC に W...

lisahost: US cn2 gia VPS、ネイティブIP、トライアル2元、追加料金で200Gの高防御を追加可能

lisahost は、米国ロサンゼルスのデータセンターにネイティブ IP 付きの cn2 gia v...

画像読影時代の画像最適化手法

現在、ウェブマスターの 95% は、画像検索を無視して、通常の検索を通じてウェブサイトにもたらされる...

ビジネスをクラウド情報管理に移行する方法

組織の最も重要なデータの管理がこれまでになく容易になりました。このタスクは、組織内の機能の数が増え続...

投資ウェブサイト「Antai Excellence」が突然停止、投資家はパニックに

「安泰精品」という投資サイトが12月17日から開かなくなった。サイトで投資した人々はパニックに陥った...

より多くの人に WeChat コンテンツをクリックしてもらうにはどうすればよいでしょうか?

初めて WeChat の公開アカウントをフォローしたときの興奮を今でも覚えています。毎日好きな記事が...

過去6年間のライブストリーミングeコマースの簡単な歴史

1か月前、シドニーが脱税で6555万3100元の罰金を科されたとき、自称メディアパーソンの倪おじさん...

Canalys:世界のクラウドインフラサービス支出は2023年に2,904億ドルに達する見込み

Canalysは最近、2023年第4四半期の世界のクラウドインフラサービス支出データを発表しました。...

企業のWeChatマーケティングにおける3つの重要な考慮事項

WeChat マーケティングは儲かるのでしょうか? 多くのビジネス オーナーは、WeChat マーケ...

効果的な外部リンクを作成する方法

効果的な外部リンクは、Google と Baidu にとって非常に重要です。また、一定の重みがありま...