Kubernetes クラスター バックアップ ツール velero 使用ガイド

Kubernetes クラスター バックアップ ツール velero 使用ガイド

オープンソースの詳細については、以下をご覧ください。

51CTO オープンソース基本ソフトウェアコミュニティ

​​https://ost..com​​

導入

Velero は、Kubernetes クラスター リソースと永続ボリュームを安全にバックアップ、復元、移行できるバックアップおよびリカバリ ソフトウェアです。

Velero の Kubernetes リソース バックアップ機能を使用すると、Kubernetes クラスター データのバックアップとリカバリを簡単に実現したり、Kubernetes クラスター リソースを他の Kubernetes クラスターにコピーしたり、実稼働環境をテスト環境にすばやくコピーしたりできます。このタイプのバックアップは、リソースの yaml ファイル全体をバックアップするのと似ており、リソースの整合性が確保されます。

Velero はストレージのサポートが優れており、AWS S3、Azure Blob、Google Cloud Storage、Alibaba Cloud OSS、Swift、MinIO など、さまざまな種類のストレージ リソースをサポートできます。

ストレージサポート。

フローチャート

注: このドキュメントでは、バックエンド ストレージとして MinIO を使用します。

DockerでMinIOをデプロイする

クラスターに問題が発生した場合にバックアップが影響を受けないように、ストレージとクラスターの分離を確保する必要があるため、MinIO は他のサーバーにデプロイされ、Kubernetes 環境から分離されます。予期しない状況によりシステムがダウンした場合のさらなる影響を回避します。

 mkdir -pv /data/{minio,config}
docker pull minio/minio
docker pull minio/mc:最新

docker run -d -p 9000 :9000 -p 9090 :9090 --name = minio --restart = always -e "MINIO_ROOT_USER=admin" -e "MINIO_ROOT_PASSWORD=admin123456" -v /data/minio:/data -v /data/config:/root/.minio minio/minio server /data --console -address ":9090" --address ":9000"

# minio を承認する
docker run -it --entrypoint = /bin/sh -v /data/config:/root/.minio minio/mc

mc config ホスト velero を追加します http://127.0.0.1:9000 管理者 admin123456 --api S3v4
mc mb -pベレロ/ベレロ

mc はコンソール インターフェイス ポートではなく API ポートを使用するため、認証時に mc は API ポートを使用する必要があることに注意してください。


その後、ブラウザは設定されたアカウントとパスワードを使用してログインできます。

k8sマスターにveleroをインストールする

velero をダウンロード:

https://github.com/vmware-tanzu/velero/releases/download/v1.9.0/velero-v1.9.0-linux-amd64.tar.gz。

1. キーを作成し、veleroをインストールする

 cat > 資格情報-velero <<EOF
[デフォルト]
aws_access_key_id = 管理者
aws_secret_access_key = admin123456
終了
# velero をインストールして自動補完を設定する
cp velero /usr/local/bin/
echo 'source <(velero 補完 bash)' >> /etc/profile && source /etc/profile

2. K8s クラスターに velero をインストールする

 # 事前に velero/velero-plugin-for-aws:v1.2.1 と velero/velero:v1.9.0 のイメージをダウンロードする必要があります
velero インストール \
--provider aws \
--plugins velero/velero-plugin-for-aws:v1.2.1 \
--バケットベレロ\
--secret -file ./credentials-velero \
--use -volume -snapshots = false \
--backup -location -config リージョン= minio 、s3ForcePathStyle = "true" 、s3Url = http://10.0.2.196:9000

インストール中に生成されたログ。

 CustomResourceDefinition/backups.velero.io: リソースを作成しようとしています
CustomResourceDefinition/backups.velero.io: リソースクライアントを作成しようとしています
CustomResourceDefinition/backups.velero.io: 作成されました
CustomResourceDefinition/backupstoragelocations.velero.io: リソースを作成しようとしています
CustomResourceDefinition/backupstoragelocations.velero.io: リソースクライアントを作成しようとしています
CustomResourceDefinition/backupstoragelocations.velero.io: 作成されました
CustomResourceDefinition/deletebackuprequests.velero.io: リソースを作成しようとしています
CustomResourceDefinition/deletebackuprequests.velero.io: リソースクライアントを作成しようとしています
CustomResourceDefinition/deletebackuprequests.velero.io: 作成されました
CustomResourceDefinition/downloadrequests.velero.io: リソースを作成しようとしています
CustomResourceDefinition/downloadrequests.velero.io: リソースクライアントを作成しようとしています
CustomResourceDefinition/downloadrequests.velero.io: 作成されました
CustomResourceDefinition/podvolumebackups.velero.io: リソースを作成しようとしています
CustomResourceDefinition/podvolumebackups.velero.io: リソースクライアントを作成しようとしています
CustomResourceDefinition/podvolumebackups.velero.io: 作成されました
CustomResourceDefinition/podvolumerestores.velero.io: リソースを作成しようとしています
CustomResourceDefinition/podvolumerestores.velero.io: リソースクライアントを作成しようとしています
CustomResourceDefinition/podvolumerestores.velero.io: 作成されました
CustomResourceDefinition/resticrepositories.velero.io: リソースを作成しようとしています
CustomResourceDefinition/resticrepositories.velero.io: リソースクライアントを作成しようとしています
CustomResourceDefinition/resticrepositories.velero.io: 作成されました
CustomResourceDefinition/restores.velero.io: リソースを作成しようとしています
CustomResourceDefinition/restores.velero.io: リソースクライアントを作成しようとしています
CustomResourceDefinition/restores.velero.io: 作成されました
CustomResourceDefinition/schedules.velero.io: リソースを作成しようとしています
CustomResourceDefinition/schedules.velero.io: リソースクライアントを作成しようとしています
CustomResourceDefinition/schedules.velero.io: 作成されました
CustomResourceDefinition/serverstatusrequests.velero.io: リソースを作成しようとしています
CustomResourceDefinition/serverstatusrequests.velero.io: リソースクライアントを作成しようとしています
CustomResourceDefinition/serverstatusrequests.velero.io: 作成されました
CustomResourceDefinition/volumesnapshotlocations.velero.io: リソースを作成しようとしています
CustomResourceDefinition/volumesnapshotlocations.velero.io: リソースクライアントを作成しようとしています
CustomResourceDefinition/volumesnapshotlocations.velero.io: 作成されました
クラスター内のリソースの準備が整うの待っています...
名前空間/velero: リソースを作成しようとしています
名前空間/velero: リソースクライアントを作成しようとしています
名前空間/velero: 作成
ClusterRoleBinding/velero: リソースを作成しようとしています
ClusterRoleBinding/velero: リソース クライアントを作成しようとしています
ClusterRoleBinding/velero: 作成されました
ServiceAccount/velero: リソースを作成しようとしています
ServiceAccount/velero: リソースクライアントを作成しようとしています
ServiceAccount/velero: 作成されました
シークレット/クラウド認証情報: リソースを作成しようとしています
シークレット/クラウド認証情報: リソースクライアントを作成しようとしています
シークレット/クラウド認証情報: 作成済み
BackupStorageLocation/default: リソースを作成しようとしています
BackupStorageLocation/default: リソースクライアントを作成しようとしています
BackupStorageLocation/default: 作成済み
デプロイメント/velero: リソースを作成しようとしています
デプロイメント/velero: リソースクライアントを作成しようとしています
デプロイメント/velero: 作成
Veleroがインストールされました! ⛵ ステータスを表示するには、 「kubectl logs deployment/velero -n velero」を使用します。

インストールが完了したことを確認します。

 [root@master ~] # kubectl get pod -n velero
名前 準備完了 ステータス 再起動 年齢
velero-cf79784ff-zdfp9 1 /1 実行中0 47秒
[root@master ~] # kubectl api-versions | grep velero
velero.io/v1

3. velero コマンド

 velero バックアップ NAME [フラグ] を作成
# 名前空間を削除する
--exclude -namespaces stringArray バックアップから除外する名前空間
# リソースタイプを削除する
--exclude -resources stringArray バックアップから除外するリソース。resource.group の形式で指定します (例: storageclasses.storage.k8s.io)
# クラスターリソースタイプが含まれています
--include -cluster -resourcesオプションのBool[ = true ] バックアップクラスタースコープのリソースを含める
# 名前空間を含める
--include -namespaces stringArray バックアップ含める名前空間 (すべての名前空間には'*'を使用) (デフォルトは *)
# 名前空間リソースタイプを含める
--include -resources stringArray バックアップ含めるリソース。resource.group 形式で指定します (例: storageclasses.storage.k8s.io) (すべてのリソースには'*'を使用します)
# このバックアップにラベルを追加する
--labels mapStringString バックアップに適用するラベル
-o , --output string 出力表示形式。作成コマンドの場合、オブジェクトを表示しますが、サーバーに送信しません。有効な形式は'table''json' 、および'yaml'です。 'table' はインストール コマンドでは無効です。
# 指定されたタグを持つリソースをバックアップする
-l , --selector labelSelector このラベルセレクターに一致するリソースのみをバックアップします (デフォルトは <なし>)
# PVのスナップショットを作成する
--snapshot -volumesオプションのBool[ = true ] バックアップの一部としてPersistentVolumeのスナップショットを取得します
# バックアップ場所を指定する
--storage -location string バックアップを保存する場所
# バックアップデータを削除するにはどのくらい時間がかかりますか?
--ttl期間 バックアップがガベージコレクションされるまでの時間 (デフォルト 720h0m0s)
# スナップショットの場所、つまりどのパブリッククラウドドライバかを指定します
--volume -snapshot -locations文字列 ボリュームスナップショットを保存する場所のリスト(プロバイダーごとに最大 1 つ)

4. テスト

Velero にはインストール パッケージにテスト デモが含まれており、テスト デモを使用してテスト検証を実行できます。

 [root@master ~] # cd velero-v1.9.0-linux-amd64/examples/nginx-app/
[root@master nginx-app] # ls
base.yaml README.md with-pv.yaml
# with-pv でストレージクラスを変更する際の注意
ストレージクラス名: longhorn
# svcタイプをClusterIPに変更する
タイプ: ClusterIP
[root@master nginx-app] # kubectl apply -f with-pv.yaml
名前空間/nginx-example が作成されました
persistentvolumeclaim/nginx-logs が作成されました
デプロイメント.apps/nginx-deployment が作成されました
サービス/my-nginx が作成されました
[root@master nginx-app] # kubectl get svc
名前 タイプ クラスター IP 外部 IP ポート 年齢
my-nginx ClusterIP 10 .108.189.178 <なし> 80 /TCP 79s
[root@master nginx-app] # kubectl get all -n nginx-example
名前 準備完了 ステータス 再起動 年齢
pod/nginx-deployment-6779884c68-4nv2s 2 /2 実行中0 2分16秒

名前 タイプ クラスター IP 外部 IP ポート 年齢
サービス/my-nginx ClusterIP 10 .108.189.178 <なし> 80 /TCP 2分16秒

名前 準備完了 最新 利用可能 年齢
デプロイメント.apps/nginx-デプロイメント1 /1 1 1 2分16秒

名前 希望 現在の年齢
レプリカセット.apps/nginx-deployment-6779884c68 1 1 1 2分16秒

5. バックアップ

 [root@master nginx-app] # velero バックアップを作成します。nginx-backup --include-namespaces nginx-example
バックアップ要求「nginx-backup」が正常に送信されました。
詳細については、`velero backup describe nginx-backup`または`velero backup logs nginx-backup`を実行してください。
 [root@master nginx-app] # velero バックアップは nginx-backup を記述します
名前: nginx-backup
名前空間: velero
ラベル: velero.io /storage-location = default
注釈: velero.io /source-cluster-k8s-gitversion = v1.23.5
velero.io/source-cluster-k8s-major-version=1
velero.io/source-cluster-k8s-minor-version=23
フェーズ: 失敗 (詳細については`velero backup logs nginx-backup`を実行してください)
エラー: 0
警告: 0
名前空間:
含まれるもの: nginx-example
除外: <なし>
リソース:
含まれるもの: *
除外: <なし>
クラスタースコープ: 自動
ラベルセレクター: <なし>
保存場所: デフォルト
Velero ネイティブ スナップショット PV: 自動
TTL: 720h0m0s
フック: <なし>
バックアップフォーマットバージョン: 1.1.0
開始日時: 2022-06-30 17:44:49 + 0800 CST
完了: 2022-06-30 17:44:49 + 0800 CST
有効期限: 2022-07-30 17:44:49 + 0800 CST
Velero ネイティブ スナップショット: <含まれないもの>
[root@master nginx-app] # velero バックアップログ nginx-backup
エラーが発生しました: gzip: 無効なヘッダー

バックアップ レコードを表示するには、minio にログインします。

6. 回復テスト

nginx-appを削除します:

 [root@master velero-v1.9.0-linux-amd64] # kubectl delete -f examples/nginx-app/base.yaml

nginxを復元します:

 [root@master velero-v1.9.0-linux-amd64]# velero 復元作成 --from-backup nginx-backup --wait
復元リクエスト「nginx-backup-20220630192521」が正常に送信されました。
復元が完了するのを待っています。待機を停止するには、Ctrl + C を安全に押してください。復元はバックグラウンドで続行されます。

復元が完了しました。ステータス: 完了。 `velero restore describe nginx-backup-20220630192521` コマンドと `velero restore logs nginx-backup-20220630192521` コマンドを使用して、詳細情報を確認できます。
 [root@master velero-v1.9.0-linux-amd64] # kubectl get pods -n nginx-example
名前 準備完了 ステータス 再起動 年齢
nginx-deployment-6779884c68-4nv2s 2 /2 実行中0 27秒

復元すると新しい復元が作成されます。

目次 注: velero restore は既存のリソースを上書きせず、現在のクラスターに存在しないリソースのみを復元します。既存のリソースは以前のバージョンにロールバックされません。ロールバックが必要な場合は、復元する前に既存のリソースを事前に削除する必要があります。

すべての名前空間をバックアップします。

 velero バックアップ ログ k8s-all 

7. スケジュールバックアップ

常に完全かつ最新のバックアップ状態を確保するために、スケジュールされた完全バックアップを実行することをお勧めします。

 # 1日1回12時にバックアップ
velero はスケジュール k8s-all を作成します--schedule = "0 0 * * *"

バックアップを表示:

 velero バックアップを取得 #バックアップビュー
velero get schedule #スケジュールされたバックアップを表示
velero get restore #既存の復元を表示
velero プラグインを取得 #プラグインを表示

オープンソースの詳細については、以下をご覧ください。

51CTO オープンソース基本ソフトウェアコミュニティ

​​https://ost..com​​.

<<:  産業分野におけるエッジコンピューティングの 4 つのユースケース

>>:  Kafka がバッファプールのメカニズムを設計するのはなぜですか?最初は戸惑いましたが、理解した後はひざまずきました。

推薦する

Baidu の発表に疑問:Baidu が公開したアルゴリズムはどの程度真実なのか?

みなさんこんにちは。私はMuzi Chengzhouです。 SEO を行う際、SEO をうまく行うに...

#黒5# hosteons: すべての VPS が 30% オフ、200Mbps 無制限、Windows が無料

Hosteons のブラックフライデー プロモーションが開始され、すべての VPS が 30% オフ...

Baidu スナップショット停滞が SEO に与える影響とその解決策

検索エンジンのスナップショットが停滞しているということは、検索エンジンがそのウェブサイトを信頼してい...

locvps: 香港 VPS 30% オフ、荃湾/大埔/雲地など、25.9 元/1G メモリ/1 コア/30gSSD/400g トラフィック/50M 帯域幅

現在、定評のある中国の VPS 販売業者 locvps (~) は、香港の複数のデータセンターの V...

Mahua Cloud: ダブル11、クラウドで楽しもう、無料の香港クラウドサーバーをゲット

Mahua Cloudは、ダブル11プロモーションで、(1)香港クラウドホスティングの30日間無料、...

時間を旅するエンジン: Kafka メッセージのタイミングの謎を解明

1. 要約1. Kafka メッセージの遅延とタイミングの概要Kafka メッセージのレイテンシとタ...

ブルーリバー:ユーザーエクスペリエンスは地域社会の勝利の秘訣

あらゆるローカル Web サイトの開発の歴史は、紆余曲折があり感動的な闘いの歴史です。 19階、煙台...

AsiaInfo SecurityとLenovoが協力し、5Gエッジコンピューティングのセキュリティネットワークエコシステムを模索

今年5月にAsiaInfo SecurityとLenovoが統合セキュリティソリューションに関する戦...

ウェブサイトの最適化とマーケティングプロモーションの実施方法

ウェブサイトの最適化とマーケティングプロモーションを行うにはどうすればいいですか?すべてのウェブマス...

モバイル インターネット チームはどのようにして独自のブランドを構築できるでしょうか?

前回の記事は「モバイルインターネットアプリプロモーションの最高レベル」と題し、主にアプリのブランドと...

SEOキーワード競争の難しさの判断アイデア

キーワード競争の難易度を判断することは、SEO 担当者が習得しなければならないスキルです。ランク付け...

A5 マーケティング: 単一製品のオンライン マーケティングを行うにはどうすればよいでしょうか?

企業の資金が限られており、販売する製品を複数開発できず、オフラインでの販売が制限され、倉庫に類似製品...

ニュース: Hostodo の VPS が移転され、IP アドレスが変更されます

hostodo からメールを受け取りました: 今日から、hostodo のすべての VPS がオンラ...

Google Cloud Platform で仮想マシンを作成する方法は?

[51CTO.com クイック翻訳] クラウドベース コンピューティングの重要な部分は仮想マシンです...