K8s: Velero を使用したクラスターのバックアップとリカバリ

Velero の簡単な紹介
Velero は、k8s の安全なバックアップとリカバリ、災害復旧の実行、Kubernetes クラスタ リソースと永続ボリュームの移行に使用される vmware オープン ソース ツールです。

ここに画像の説明を挿入します
ここに画像の説明を挿入します

ヴェレロにできること:

クラスターをバックアップし、紛失した場合には復元します。
クラスターのリソースを他のクラスターに移行します。
実稼働クラスターを開発クラスターとテストクラスターにコピーします。
Velero は 2 つの部分で構成されます。

クラスター上で実行されているサーバー (Velero サーバー)
ローカルで実行されているコマンド ライン クライアント (velero cli)
etcd の組み込みバックアップ/復元の代わりに Velero を使用するのが適切なのはどのような場合ですか?
Velero と etcd の間でスナップショット バックアップを選択するにはどうすればよいですか?

個人的には、
etcd スナップショット バックアップは、より深刻なクラスター災害に適していると考えています。たとえば、すべての etcd クラスター内のすべてのノードがダウンし、スナップショット ファイルが失われたり破損したりします。k8s クラスターがハングアップした場合、etcd バックアップとリカバリーは迅速かつ成功するリカバリー方法です。Velero のリカバリーでは、他のコンポーネントに依存し、クラスターが稼働していることを確認する必要があります。
Velero は、クラスターの移行や、名前空間ベースのバックアップなどの k8s サブセットのバックアップとリカバリに適しています。ネームスペースが誤って削除され、YAML ファイルがバックアップされていない場合は、Velero を使用してすぐに復元できます。複数の API リソース オブジェクトを含むシステム アップグレードは、アップグレード前にバックアップでき、アップグレードが失敗した場合は、Velero を使用して迅速に復元できます。
上記の Velero github からの回答:
Etcd のバックアップ/復元ツールは、単一の etcd クラスター内のデータ損失から回復するのに最適です。たとえば、etcd istelf をアップグレードする前に etcd をバックアップすることをお勧めします。より複雑な Kubernetes クラスターのバックアップとリカバリの管理には、一般に Velero の方が優れたアプローチであると考えられます。これにより、不安定なクラスターを破棄し、Kubernetes リソースとデータを新しいクラスターに復元できます。これは、etcd をバックアップして復元するだけでは簡単に実現できません。

Velero に役立つケースの例:

etcd へのアクセス権がない(たとえば、GKE 上で実行している)
Kubernetes リソースと永続ボリュームの状態をバックアップする
クラスターの移行
Kubernetes リソースのサブセットをバックアップ
する 複数の etcd クラスターに保存されている Kubernetes リソースをバックアップする(たとえば、カスタム apiserver)
ディザスター リカバリーとリカバリーの原則の簡単な紹介。
この部分については、公式 Web サイトで学習することをお勧めします。ここでは簡単に説明します。

すべての Velero 操作 (オンデマンド バックアップ、スケジュールされたバックアップ、復元) はカスタム リソースであり、Kubernetes カスタム リソース定義 (CRD) を使用して定義され、etcd に保存されます。Velero には、バックアップ、復元、およびすべての関連操作を実行するためのカスタム リソースを処理するコントローラーも含まれています。

バックアップ ワークフロー
velero Backup create test-backup を実行すると、
Velero クライアントは Kubernetes API サーバーを呼び出してバックアップ オブジェクトを作成します。
BackupController は新しいオブジェクト Backup を通知し、検証を実行します。
BackupController はバックアップ プロセスを開始します。API サーバーのリソースにクエリを実行して、バックアップするデータを収集します。
オブジェクト ストレージ サービス (AWS S3 などの BackupController) を呼び出して、バックアップ ファイルをアップロードします。
デフォルトでは、velero Backup create は永続ボリュームのディスク スナップショットを取得します。追加のフラグを指定してスナップショットを調整できます。velero Backup create --help を実行して、使用可能なフラグを確認します。スナップショットは、オプション --snapshot-volumes=false を使用して無効にできます。
ここに画像の説明を挿入します

ここに画像の説明を挿入します

リカバリ ワークフロー
velero リストア作成を実行すると、次のようになります。
Velero クライアントは、Kubernetes API サーバーを呼び出して Restore オブジェクトを作成します。
RestoreController は、新しい Restore オブジェクトを通知し、検証を実行します。
オブジェクトストレージサービスのRestoreControllerからバックアップ情報を取得します。次に、バックアップされたリソースに対して前処理を実行して、新しいクラスターで実行できることを確認します。たとえば、バックアップされた API バージョンを使用して、復元されたリソースがターゲット クラスター上で実行できることを確認します。
RestoreController は復元プロセスを開始し、対象となる各リソースを一度に復元します。
デフォルトでは、Velero は非破壊リカバリを実行します。つまり、ターゲット クラスタ上のデータは削除されません。バックアップ内のリソースがターゲット クラスターにすでに存在する場合、Velero はそのリソースをスキップします。–existing-resource-policy 回復フラグを使用する代わりに、更新ポリシーを使用するように Velero を構成できます
このフラグが更新に設定されている場合、Velero はターゲット クラスター内の既存のリソースをバックアップ内のリソースと一致するように更新しようとします。

インストールとダウンロード
クラスターの互換性の問題を確認します。

https://github.com/vmware-tanzu/velero#velero-compatibility-matrix

現在のクラスター環境

┌──[[email protected]]-[~]
└─$kubectl version --output=json
{
“clientVersion”: {
“major”: “1”,
“minor”: “25”,
“gitVersion”: “v1.25.1”,
“gitCommit”: “e4d4e1ab7cf1bf15273ef97303551b279f0920a9”,
“gitTreeState”: “clean”,
“buildDate”: “2022-09-14T19:49:27Z”,
“goVersion”: “go1.19.1”,
“compiler”: “gc”,
“platform”: “linux/amd64”
},
“kustomizeVersion”: “v4.5.7”,
“serverVersion”: {
“major”: “1”,
“minor”: “25”,
“gitVersion”: “v1.25.1”,
“gitCommit”: “e4d4e1ab7cf1bf15273ef97303551b279f0920a9”,
“gitTreeState”: “clean”,
“buildDate”: “2022-09-14T19:42:30Z”,
“goVersion”: “go1.19.1”,
“compiler”: “gc”,
“platform”: “linux/amd64”
}
}
インストール ファイルのダウンロード:

https://github.com/vmware-tanzu/velero/releases/tag/v1.10.1-rc.1

https://github.com/vmware-tanzu/velero/releases/download/v1.10.1-rc.1/velero-v1.10.1-rc.1-linux-amd64.tar.gz

クライアント
クライアントのインストール:

┌──[[email protected]]-[~/ansible/velero]
└─ wget − − no − check −certificatehttps : / / github . com / vmware − Tanzu / velero / releases / download / v 1.10.1 − rc 。1 / ヴェレロ − v 1.10.1 − rc 。1 − Linux − amd 64.tar 。gz ┌ ── [root @ vms 100.liruilongs . ギットハブ 。io ] − [ / ansible / velero ] └ ─ wget --no-check-certificate https://github.com/vmware-tanzu/velero/releases/download/v1.10.1-rc.1/velero-v1.10.1 -rc.1-linux-amd64.tar.gz ┌──[[email protected]]-[~/ansible/velero] └─わかりまし_いいえ_チェックする_ _証明HTTPS _ _ _ _ _ _ _ _ _:// g i th u b . _ com / vmware _ _ _ _ _タンズ/ヴェレロ/リリース/ダウンロード/ v 1.10.1 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _rc .1 /ヴェレロ_ _v 1.10.1rc.1 _私はuxam d 64. t a r . g z ── [ root @ v m s 100. l i r u i l o n g s . _ g i th u b . _ いお] _[ / ansible / velero ]   ls
velero-v1.10.1-rc.1-linux- amd64.tar.gz ┌─ [ [email protected] ]
- ~[
└─tar − zxvfvelero − v 1.10.1 − rc 。1 − Linux − amd 64.tar 。gzvelero − v 1.10.1 − rc 。1 − linux − amd 64 / ライセンス velero − v 1.10.1 − rc 。1 − Linux − amd 64 / 例 / 。DSS トレベレロ - v 1.10.1 - rc 。1 − linux − amd 64 / 例 / README 。mdvelero − v 1.10.1 − rc 。1 − linux − amd 64 / 例 / miniovelero − v 1.10.1 − rc 。1 − linux − amd 64/examples/minio/00 − minio − デプロイメント。yamlvelero − v 1.10.1 − rc 。1 − linux − amd 64 / 例 / nginx − appvelero − v 1.10.1 − rc 。1 − linux − amd 64 / 例 / nginx − app / README 。mdvelero − v 1.10.1 − rc 。1 − linux − amd 64/examples/nginx − app /base 。yamlvelero − v 1.10.1 − rc 。1 − linux − amd 64 / 例 / nginx − app / with − pv 。yamlvelero − v 1.10.1 − rc 。1 − linux − amd 64 / velero ┌ ── [root @ vms 100.liruilongs . ギットハブ 。io ] − [ / ansible / velero ] lux ─ tar -zxvf velero-v1.10.1-rc.1-linux-amd64.tar.gz velero-v1.10.1-rc.1-linux-amd64/LICENSE velero-v1。 10.1-rc.1-linux-amd64/examples/.DS_Store velero-v1.10.1-rc.1-linux-amd64/examples/README.md velero-v1.10.1-rc.1-linux-amd64/examples/minio velero-v1.10.1-rc.1-linux-amd64/examples/minio/00-minio-deployment.yaml velero-v1.10.1-rc.1-linux-amd64/examples/nginx-app velero-v1.10.1- rc.1-linux-amd64/examples/nginx-app/README.md velero-v1.10.1-rc。ター_ _z xv f ve l ero _v 1.10.1rc.1 _私はuxam d 64. t a r . ジーズヴェレロ_ _ _ _ _v 1.10.1rc.1 _私はuxam d 64 /ライセンスヴェレロ_ _ _ _v 1.10.1rc.1 _私はuxam d 64 /エクスアンプルエス/ D SSトーレヴェレロ_ _ _ _ _v 1.10.1rc.1 _私はuxam d 64 // RE A D ME _ _ _ エム・ディ・ヴェ・レv 1.10.1rc.1 _私はuxam d 64 /エクスサンプル/ミニオリーブレロ_ _ _ _ _v 1.10.1rc.1 _私はuxam d 64 //ミニオ/ 00 _ _ _ミニオー_展開_ _ _ _ _ _ _ あなたレベルエロです_ _v 1.10.1rc.1 _私はuxam d 64 /サンプル/ ng in x _ _ _ _pp私はそこにいました_v 1.10.1rc.1 _私はuxam d 64 /サンプル/ ng in x _ _ _ _pp / RE A D ME _ エム・ディ・ヴェ・レv 1.10.1rc.1 _私はuxam d 64 /サンプル/ ng in x _ _ _ _pp / base _ _ あなたレベルエロです_ _v 1.10.1rc.1 _私はuxam d 64 /サンプル/ ng in x _ _ _ _pp / w i th _ _PV _ あなたレベルエロです_ _v 1.10.1rc.1 _私はuxam d 64 / v e l ero ── [ root @ v m s 100. l i r u i l o n g s . g i th u b . _ いお] _[ / an s ib l e / v e l ero ]   cd velero-v1.10.1-rc.1-linux-amd64/
┌──[[email protected]]-[~/ansible/ velero/velero-v1.10.1-rc.1-linux-amd64]
└─cpvelero / usr / local / bin / ┌ ── [root @ vms 100.liruilongs . ギットハブ 。io ] − [ / ansible / velero / velero − v 1.10.1 − rc 。1 − linux − amd 64 ] └ ─ cp velero /usr/local/bin/ ┌──[[email protected]]-[~/ansible/velero/velero-v1.10.1-rc.1- linux-amd64] └─c p v e l ero / usr / l o c a l / bin / ── [ root @ v m s 100. l i r u i l o n g s . _ g i th u b . _ いお] _[ /アンシブル/ヴェレロ/ヴェレロ_ _ _ _ _ _ _ _ _ _ v 1.10.1rc.1 _私はuxam d 64 ] velero version
クライアント:
バージョン: v1.10.1-rc.1
Git commit: e4d2a83917cd848e5f4e6ebc445fd3d262de10fa
<サーバー バージョンの取得エラー: バージョン "velero.io/v1" の種類 "ServerStatusRequest" に一致しません>構成
コマンドの完了

┌──[[email protected]]-[~/ansible/velero/velero-v1.10.1-rc.1-linux-amd64]
└─ velerocompletionbash > /etc/bashcompletion 。d / velero ┌ ── [root @ vms 100.liruilongs . ギットハブ 。io ] − [ / ansible / velero / velero − v 1.10.1 − rc 。1 − linux − amd 64 ] └ ─ velero 完了 bash >/etc/bash_completion.d/velero ┌──[[email protected]]-[~/ansible/velero/velero-v1.10.1-rc .1-linux-amd64】 └─レベルエロコンプリティオンバス_ _ _ _ _ _ _ _>/ etc / bash _ _ _ _c完全_ _ _ _ _ _ _ d / v e l ero ── [ root @ v m s 100. l i ru i l o n g s . _ _ g i th u b . _ いお] _[ /アンシブル/ヴェレロ/ヴェレロ_ _ _ _ _ _ _ _ _ _ v 1.10.1rc.1 _私はuxam d 64 ] velero client config set colorized=false
サーバーのインストール
サーバーのインストール中に、バックアップ データ ファイルを保存するためにオブジェクト ストレージ システム Minio をインストールする必要があります。

credentials-velero minio に接続するための Velero ディレクトリに Velero 固有の認証情報ファイルを作成します。

┌──[[email protected]]-[~/ansible/velero/velero-v1.10.1-rc.1-linux-amd64]
└─ vimcredentials − velero ┌ ── [ root @ vms 100.リルロング。ギットハブ 。io ] − [ / ansible / velero / velero − v 1.10.1 − rc 。1 − linux − amd 64 ] lux ─ vim credentials-velero ┌──[[email protected]]-[~/ansible/velero/velero-v1.10.1-rc.1-linux-amd64] └ ─v認証情報_ _ _ _ _ _ _v e l ero ── [ root @ v m s 100. l i ru i l o n g s . _ _ g i th u b . _ いお] _[ /アンシブル/ヴェレロ/ヴェレロ_ _ _ _ _ _ _ _ _ _ v 1.10.1rc.1 _私はuxam d 64 ] cat credentials-velero
[デフォルト]
aws_access_key_id = minio
aws_secret_access_key = minio123
サーバーとローカルストレージサービスを開始します。

ローカル ストレージ サービスの展開
次の YAML ファイルは、Velero ディレクトリにあり、上記のクライアント インストール パッケージでは、この YAML ファイルを解凍すると表示されます。

この YAML ファイルは、クラスター内からアクセスできる Minio インスタンスをデプロイするために使用されます。また、Minion でバックアップに必要なバケットを作成するジョブを開始するには、Minion サービスをクラスターの外部に公開する必要があります。ログにアクセスして velero description コマンドを実行するには、外部アクセスが必要です。

yaml ファイルを変更する ここでは主に Service を NodePort に変更します。そして、Minion のコンソール アクセス IP を静的に設定します。

┌─[[email protected]]-[~/ansible/velero/velero-v1.10.1-rc.1-linux-amd64]
└─$catexamples/minio/00-minio-deployment。ヤムル

Copyright 2017 Velero の貢献者。

Apache License バージョン 2.0 (「ライセンス」) に基づいてライセンスされています。

ライセンスに準拠する場合を除き、このファイルを使用することはできません。

ライセンスのコピーは次の場所で入手できます。

http://www.apache.org/licenses/LICENSE-2.0

適用される法律で義務付けられている場合または書面による同意がない限り、ソフトウェア

ライセンスに基づいて配布される場合は、「現状のまま」で配布されます。

明示的か黙示的かを問わず、いかなる種類の保証や条件もありません。

特定の言語を管理する権限については、「ライセンス」を参照してください。

ライセンスに基づく制限。


apiVersion: v1
種類: 名前空間
メタデータ:
名前: velero


apiVersion: apps/v1
種類: デプロイメント
メタデータ:
名前空間: velero
名: minio
ラベル:
コンポーネント: minio仕様
:
戦略:
タイプ: 再作成
セレクター:
matchLabels:
コンポーネント: minio
テンプレート:
メタ
データ: ラベル:
コンポーネント: minio
仕様:
ボリューム:
- 名前: storage
emptyDir: {}
- 名前: config
emptyDir: {}
コンテナ:
- 名前: minio
イメージ: quay.io/minio/minio:
最新の imagePullPolicy: IfNotPresent
引数:
- サーバー
- /storage
- --console-address=:9090
- --config-dir=/config
env:
- 名前: MINIO_ROOT_USER
値: “minio”
- 名前: MINIO_ROOT_PASSWORD
値: “minio123”
ポート:
- コンテナーポート: 9000
- コンテナーポート: 9090
volumeMounts:
- 名前: storage
mountPath: “/storage "
- 名前: config
マウントパス: "/config"


apiVersion: v1
種類: サービス
メタデータ:
名前空間: velero
名: minio
ラベル:
コンポーネント: minio
仕様:

実稼働環境には ClusterIP が推奨されます。

ドキュメントに従って必要に応じて NodePort に変更します。

ただし、Minikube などのテスト/トライアル環境で Minio を実行する場合に限ります。

タイプ: NodePort
ポート:
- ポート: 9000
名前: API
ターゲットポート: 9000
プロトコル: TCP
- ポート: 9099
名前: コンソール
ターゲットポート: 9090
プロトコル: TCP
セレクター:
コンポーネント: minio


apiVersion: バッチ/v1
種類: ジョブ
メタデータ:
名前空間: velero
名前: minio-setup
ラベル:コンポーネント:
minio
仕様
:
テンプレート: メタデータ:
名前: minio-setup
仕様:
restartPolicy: OnFailure
ボリューム:
- 名前: config
emptyDir: {}
コンテナ:
- 名前: mc
イメージ: minio/mc:latest
imagePullPolicy: IfNotPresent
コマンド:
- /bin/sh
- -c
- “mc --config-dir=/config config host add velero http://minio:9000 minio minio123 && mc --config-dir=/config mb -p velero/velero”
volumeMounts:
- name: config
mountPath: “/config”
注: Minio yaml によって提供される例では、「空のディレクトリ」が使用されています。ノードには、バックアップされるデータを保存するのに十分な空き領域に加えて 1GB の空き領域が必要です。ノードに十分なスペースがない場合は、「空のディレクトリ」の代わりに永続ボリュームを使用するようにサンプル yaml を変更できます。
ここに画像の説明を挿入します

ここに画像の説明を挿入します


バケット: minioバックアップ場所の設定で作成したバケット名: xxx.xxx.xxx.xxx を minio サーバーの IP アドレスに変更します。
Velero
デプロイメント コマンドをクラスターにデプロイする

velero install
–provider aws
–plugins velero/velero-plugin-for-aws:v1.2.1
–bucket velero
–secret-file ./credentials-velero
–use-volume-snapshots=false
–backup-location-configregion=minio, s3ForcePathStyle=“true”,s3Url=http://minio.velero.svc:9000
プライベートウェアハウスの場合は、YAML ファイルをエクスポートして、アプリケーション用に調整できます。

┌──[[email protected]]-[~/ansible/velero/velero-v1.10.1-rc.1-linux-amd64]
└─$velero install
–provider aws
–plugins velero/velero-plugin-for-aws:v1.2.1
–bucket velero
–secret-file ./credentials-velero
–use-volume-snapshots=false
–backup-location-config region=minio,s3ForcePathStyle=“true”,s3Url=http://minio.velero.svc:9000
–dry-run -o yaml > velero_deploy.yaml
应用部署

┌──[[email protected]]-[~/ansible/velero/velero-v1.10.1-rc.1-linux-amd64]
└─kubectlapply − fvelerodeploy 。yaml カスタム リソース定義/バックアップ リポジトリ。ヴェレロ 。io: カスタム リソース定義/バックアップ リポジトリを作成しようとしています。ヴェレロ 。io: ceclient を作成しようとしています。バックアップ ストレージの場所 / デフォルト : 作成しようとしています バックアップ ストレージの場所 / デフォルト : 作成しようとしています ceclient バックアップ ストレージの場所 / デフォルト : 作成されました 展開 / velero : 作成しようとしています 展開 / velero : 私たちのクライアントを作成しようとしています 展開 / ベロ: 作成されたベロがインストールされました! ⛵ ステータスを表示するには、「kubectllogsdeployment / velero − nvelero」を使用します。┌ ── [root @ vms 100.liruilongs . ギットハブ 。io ] − [ / ansible / velero / velero − v 1.10.1 − rc 。1 − linux − amd 64 ] └ − kubectl apply -f velero_deploy.yaml CustomResourceDefinition/backuprepositories.velero.io: リソースの作成を試行しています CustomResourceDefinition/backuprepositories.velero.io: リソース クライアントの作成を試行しています ...... BackupStorageLocation/default: リソースを作成しようとしています BackupStorageLocation/default: リソース クライアントを作成しようとしています BackupStorageLocation/default: 作成されました Deployment/velero: リソースを作成しようとしています Deployment/velero: リソース クライアントを作成しようとしています Deployment/velero: 作成されました Velero がインストールされました。⛵ 「kubectl logsdeployment/velero -n velero」を使用してステータスを表示します。┌──[[email protected]]-[~/ansible/velero/velero-v1.10.1-rc.1-linux-amd64] └─リクエスト申請_ _ _ _ _ _f ve l e r od計画を立ててくださいカスタムリソース定義/バックアップポジション使用ます_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ヴェレロ_ _ _ :リソースカスタムリソース定義初期/バックアップポジション作成試みます_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ヴェレロ_ _ _ :テレリソース保護作成しよます.....バックアップステーションロケーション/定義_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _とても_ _:テレソースバックアップ作成です現在場所/デフォルト場所バックアップます_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _:attemptingtocreateresourceclientBackupStorageLocation/default:createdDeployment/velero:地球資源展開/ヴェレロ構築目指します_ _ _ _ _ _ _ _ _ _ _ _:テラリソース保護展開/ベロベロ構築目指します_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _:作成Veleroインストールまし_ _ _ _ _ _ _ 使用する_' kubectllogsdepoyment/velero_______________ないです_ _ _ _toviewthestatus.──[root@vms100.liruilongs.github.io][ /ansible/velero/velerov1.10.1rc.1 _私はuxam d 64 ] └─
デプロイされたジョブにより、バックアップ ファイルのアップロード用に新しいバケットが自動的に作成されます

ここに画像の説明を挿入します

バックアップ
完全バックアップ、部分バックアップ

通常のバックアップ┌──
[[email protected]]-[~/ansible/velero/velero-v1.10.1-rc.1-linux-amd64]
└─velerobackupcreatevel ero-demo バックアップリクエスト「velero-demo」が正常に送信されました。詳細については、「velerobackupdescribev elero −demo」または「velerobackuplogsveler o −demo」を実行してください。┌ ── [root @ vms 100.liruilongs . ギットハブ 。io ] − [ / ansible / velero / velero − v 1.10.1 − rc 。1 − linux − amd 64 ] └ − velero Backup create velero-demo バックアップ要求「velero-demo」が正常に送信されました。詳細については、「velero Backup description velero-demo」または「velero Backup logs velero-demo」を実行してください。┌──[[email protected]]-[~/ansible/velero/velero-v1.10.1-rc.1-linux-amd64] └─ベロベロバックアップ作成ベロエロ_ _ _ _ _ _ _ _ _ _ _ _ _デモバックアップリクエストvelero _ _ _ _ _ _ _ _ _ _ _ _ _ _demo"submittedsuccessfully.Runvelerobackupdescribevelerodemoorvelerobackuplogsvelerodemoformoredetails.──[root@vms100.liruilongs.github.io][ /ansible/velero/velerov1.10.1rc.1 _私はuxam d 64 ] velero get back velero-demo
名前 ステータス エラー 警告 作成済み 有効期限 ストレージの場所 セレクター
velero-demo InProgress 0 0 2023-01-28 22:18:45 +0800 CST 29d デフォルト
┌──[root@vms100. liruilongs.github.io]-[~/ansible/sailboat/sailboat-v1.10.1-rc.1-linux-amd64]
└─$
値の

┌─[[email protected]]-[~/ansible/velero/velero-v1.10.1-rc.1-linux-amd64]
└─$velero get back velero-demo
名前 ステータス エラー 警告 作成されました期限切れのストレージ場所セレクター
velero-demo 完了 0 0 2023-01-28 22:18:45 +0800 CST 29d デフォルト

ここに画像の説明を挿入します

スケジュールされたバックアップ
毎日午前 0 時に 1 回、スケジュールされたバックアップ。

┌──[[email protected]]-[~/ansible/velero/velero-v1.10.1-rc.1-linux-amd64]
└─ veleroschedulecreatek 8 秒 − バックアップ − − スケジュール = " @ daily 「スケジュール「k 8 s - バックアップ」が正常に作成されました。┌ ── [root @ vms 100.liruilongs . ギットハブ 。io ] − [ / ansible / velero / velero − v 1.10.1 − rc 。1 − linux − amd 64 ] lux − velero schedule create k8s-backup --schedule="@daily" スケジュール「k8s-backup」が正常に作成されました。┌──[[email protected]]-[~/ansible/velero/velero-v1.10.1-rc.1-linux-amd64] └─ve l erosch h e d u l ecreate k 8 s _ _ _ _バックアップする_ _ _スケジュール_ _ _ _ _ _=@daily スケジュールk 8s _ _ _ _ _ _ _ _ _ _ _バックアップ"作成完全成功まし── [ root @ vms 100. l i ru i l o n g s . g i th u b . i _ _ _ _ _ _ _ _ _ _ _ _ _][ /アンシブル/ヴェレロ/ヴェレロ_ _ _ _ _ _ _ _ _ _ v 1.10.1rc.1 _私はuxam d 64 ] velero get スケジュール
名前 ステータス 作成されたスケジュール バックアップ TTL 前回のバックアップ セレクター 一時停止
k8s-backup Enabled 2023-01-29 00:11:03 +0800 CST @daily 0s n/a false
恢复
┌──[root@ vms100.liruilongs.github.io]-[~/ansible/velero/velero-v1.10.1-rc.1-linux-amd64]
lux─ v e l e r o r e s t o r e c r e a t e − − f r o m − b a c k u p v e l e r o − d e m o R e s t o r e r e q u e s t " v e l e r o − d e m o − 20230129001615 " s u b m i t t e d s u c c e s s f u l l y . R u n ‘ v e l e r o r e s t o r e d e s c r i b e v e l e r o − d e m o − 20230129001615 ‘ o r ‘ v e l e r o r e s t o r e l o g s v e l e r o − d e m o − 20230129001615 ‘ f o r m o r e d e t a i l s . ┌ ── [ r o o t @ v m s 100. l i r u i l o n g s . g i t h u b . i o ] − [   / a n s i b l e / v e l e r o / v e l e r o − v 1.10.1 − r c . 1 − l i n u x − a m d 64 ] └ ─ velero restore create --from-backup velero-demo Restore request "velero-demo-20230129001615" submitted successfully. Run `velero restore describe velero-demo-20230129001615` or `velero restore logs velero-demo-20230129001615` for more details. ┌──[[email protected]]-[~/ansible/velero/velero-v1.10.1-rc.1-linux-amd64] └─ 発生するエラー_ _ _ _から_ _バックアップエロ_ _ _ _ _ _ _そうなる祈る一番です_ _ _ _デモ_ _ _20230129001615 "完全送信まし。Run've l erorestored descri b e l ero _ _ _ _ _ _ _ _ _ _ _ _ _ _ _デモ_ _ _20230129001615 'または' ve l eroresストアログs ve l ero _ _ _ _デモ_ _ _詳細について20230129001615ご覧ください_ _ _ ── [ root @ vms 100. l iru i l o n g s . _ _ _ _ _ g i th u b . _ いお] _[ /アンシブル/ヴェレロ/ヴェレロ_ _ _ _ _ _ _ _ _ _ v 1.10.1rc.1 _私はuxAM D 64 ] └─VELEROGETRESTORE NAME NAMEバックアップ
ステータス開始エラー開始警告作成セレクターVELERO -
DEMO-20230129001615 VELERO-DEMO INPROGRESS 2023-01-29 00:16:15 +0800 +0800 CST 0 0 2023-01-2900:16 :15 +0800 CST
┌─[[email protected]]-[~/ansible/velero/velero-v1.10.1-rc.1-linux-amd64]
└─velerogetrestore NAMEBACKUPSTATUSSTART EDCOMPLETEDERRORSWARN INGSCREATEDSELECTOR velero − デモ − 20230129001615 velero − デモ完了 2023 − 01 − 2900 : 16 : 15 + 0800 CST 2023 − 01 − 2900 : 17 : 20 + 0800 CST 01352023 − 01 − 2900 : 16 : 15 + 0800 CST <なし> ┌ ── [root @ vms 100.liruilongs . ギットハブ 。io ] − [ / ansible / velero / velero − v 1.10.1 − rc 。1 − linux − amd 64 ] └ ─ velero get list 名前 バックアップ ステータス 開始済み 完了したエラー 警告 作成されたセレクター velero-demo-20230129001615 velero-demo 完了 2023-01-29 00:16:15 +0800 CST 2023-01-29 0 0: 17:20 +0800 CST 0 135 2023-01-29 00:16:15 +0800 CST <なし> ┌──[[email protected]]-[~/ansible/velero/velero-v1.velero取得ストア名前付けます最新状態完了ましエラー警告表示ます。velero選択ます_ _ _ _ _ _ _ _ _ _デモ_ _ _20230129001615ヴェレロ_ _ _demoCompleted2023012900:16:15+0800CST2023012900:17:20+0800CST01352023012900:16:15+0800CST<none>──[root@vms100.liruilongs.github.io][ /アンシブル/ヴェレロ/ヴェレロ_ _ _ _ _ _ _ _ _ _ v 1.10.1rc.1 _私はuxam d 64 ]

ここに画像の説明を挿入します

災害復旧テスト
名前空間の削除テスト

現在のコマンドスペースリソース

┌──[[email protected]]-[~/back]
└─$kubectl-ketall -n cadvisor
W0129 00:34:28.299699 126128 warnings.go:70] kubevirt.io/v1 VirtualMachineInstancePresets is now deprecated and will be removed in v2.
W0129 00:34:28.354853 126128 warnings.go:70] metallb.io v1beta1 AddressPool is deprecated, consider using IPAddressPool
NAME NAMESPACE AGE
configmap/kube-root-ca.crt cadvisor 2d4h
pod/cadvisor-5v7hl cadvisor 2d4h
pod/cadvisor-7dnmk cadvisor 2d4h
pod/cadvisor-7l4zf cadvisor 2d4h
pod/cadvisor-dj6dm cadvisor 2d4h
pod/cadvisor-sjpq8 cadvisor 2d4h
serviceaccount/cadvisor cadvisor 2d4h
serviceaccount/default cadvisor 2d4h
controllerrevision.apps/cadvisor-6cc5c5c9cc cadvisor 2d4h
daemonset.apps/cadvisor cadvisor 2d4h
名前空間の削除

┌──[[email protected]]-[~/back]
└─ kubectldeletenscadvis または名前空間「cadvisor」が削除されました C ┌── [root@vms 100.liruilongs . ギットハブ 。io ] − [ / back ] └ ─ kubectl delete ns cadvisor 名前空間 "cadvisor" が削除されました ^C┌──[[email protected]]-[~/back] └─ku bectl d e l e ten scadvisorスペースcadvisor deleted _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _C──[root@vms100.liruilongs.___ github._ いお]_[ / back ]   kubectl delete ns cadvisor --force警告: 即時削除は、実行中
リソースが終了されたことの確認を待ちません。リソースはクラスター上で無期限に実行され続ける可能性があります。
サーバーからのエラー (NotFound): 名前空間「cadvisor」が見つかりません
查看命名空间资源

┌─[[email protected]]-[~/back]
└─$kubectl-ketall -n cadvisor
W0129 00:35:25.548656 127598 warnings.go:70] kubevirt.io/v1 VirtualMachineInstancePresets は現在非推奨であり、v2 で削除されます。W0129
00:35:25.581030 127598 warnings.go:70] metallb.io v1beta1 AddressPool は
非推奨です。IPAddressPool の使用を検討してください。リソースが見つかりません。
削除したばかりのネームスペースを復元するには、上記のバックアップを使用してください。

┌─[[email protected]]-[~/back]
└─velerorestorecreate - -from -backupvelero -demo Restorerequest「velero -demo -20230129003541」が正常に送信されました。詳細については、「velerorestoredescribe velero −demo − 20230129003541」または「velerorestorelogsvele ro −demo − 20230129003541」を実行してください。┌ ── [root @ vms 100.liruilongs . ギットハブ 。io ] − [ / back ] └ ─ velero stop create --from-backup velero-demo 復元リクエスト「velero-demo-20230129003541」が正常に送信されました。詳細については、「velerorestredescribevelero-demo-20230129003541」または「velerorestorelogsvelero-demo-20230129003541」を実行してください。┌─[[email protected]]-[~/back] └─発生するエラー_ _ _ _から_ _バックアップエロ_ _ _ _ _ _ _そうなる祈る一番です_ _ _ _デモ_ _ _20230129003541 "完全送信まし。Run've l erorestored descri b e l ero _ _ _ _ _ _ _ _ _ _ _ _ _ _ _デモ_ _ _20230129003541 'または' ve l eroresストアログs ve l ero _ _ _ _デモ_ _ _詳細について20230129003541ご覧ください_ _ _ ── [ root @ vms 100. l iru i l o n g s . _ _ _ _ _ g i th u b . _ いお] _[ / back ]   velero getリストア
名前 バックアップステータス 開始済み 完了したエラー 警告 作成されたセレクターvelero -demo -
20230129001615 velero-demo Completed 2023-01-29 00:16:15 +0800 CST 2023-01-29 00:17 :20 +0800 CST 0 135 2023-01-29 00:16:15 +0800 CST
velero-demo-20230129003541 velero-demo 進行中 2023-01-29 00:35:41 +0800 CST 0 0 2023-01-29 00 :35:41 +0800 CST
┌──[[email protected]]-[~/back]
└─$velero get 復元
名前 バックアップ ステータス 開始済み 完了したエラー 警告 作成されたセレクター
velero-demo-20230129001615 velero-demo完了 2023-01-29 00:16:15 +0800 CST 2023-01-29 00:17:20 +0800 CST 0 135 2023-01-29 00:16:15 +0800 CST
velero-demo-20230129003541 velero-demo 完了 2023-01-29 00:35:41 +0800 CST 2023-01-29 00:36:46 +0800 CST 0 135 2023-01-29 00:35:41 +0800 CST
名前空間リソースの回復を決定する

┌─[[email protected]]-[~/back]
└─kubectl − ketall − ncadvisor W 012900 : 37 : 29.787766130766 警告。行く:70]クベバート。io/v 1 仮想マシン インスタンス リセットは現在非推奨になっており、削除される予定です。 2. W 012900:37:29.819111130766 の警告。ゴー:70]メタルポンド。iov 1 beta 1 アドレス プールは非推奨です。IPA アドレス プール NAMENAMESPACEAGE configmap /kube − root − ca の使用を検討してください。crtcadvisor 94 spod / cadvisor − 5 v 7 hlcadvisor 87 spod / cadvisor − 7 dnmkcadvisor 87 spod / cadvisor − 7 l 4 zfcadvisor 87 spod / cadvisor − dj 6 dmcadvisor 87 spod / cadvisor − sjpq 8 cadvisor 87 sserviceaccount / cadvisorcadvisor 88 sサービスアカウント/デフォルトカドバイザー94 sコントローラーリビジョン。apps/cadvisor − 6 cc 5 c 5 c 9 cccadvisor 63 sdaemonset 。apps / cadvisorcadvisor 63 s ┌ ── [root @ vms 100.liruilongs . ギットハブ 。io ] − [ / back ] └ ─ kubectl-ketall -n cadvisor W0129 00:37:29.787766 130766 warnings.go:70] kubevirt。io/v1 VirtualMachineInstancePresets は非推奨となり、v2 では削除される予定です。W0129 00:37:29.819111 130766 warnings.go:70] metallb.io v1beta1 AddressPool は非推奨です。IPAddressPool の使用を検討してください。 NAME NAMESPACE AGE configmap/kube-root-ca.crt cadvisor 94s pod/cadvisor-5v7hl cadvisor 87s pod/cadvisor-7dnmk cadvisor 87s pod/cadvisor-7l4zf cadvisor 87s pod/cadvisor-dj6dm cadvisor 87s pod/cadvisor-sjpq8 cadvisor 87s serviceaccount/cadvisor cadvisor 88s serviceaccount/default cadvisor 94s controlrevision.apps/cadvisor-6cc5c5c9cc cadvisor 63s daemonset.apps/cadvisorアドバイザー63s ┌ ──[[email protected]]-[~/back] └─キューブ_大丈夫_ _ _ _NコンデンサーW 012900 _ _ _ _ _:37:29.787766130766警告_ _ _ _ _ ゴオー_:70 ]キュベヴィルト_ _ _ _ _ _ i o / v 1仮想マシンインストールプリセット現在廃止おり削除れる予定です_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _dinv2.W012900:37:29.819111130766warnings.go:70]metallb.iov1beta1AddressPoolisdeprecated,IPアドレスプールスペースエイジ構成マップ/キューブ使用検討ます_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ルート_c a cr t cad visor 94スポッド/ cad visor _ _ _ _ _ _ _ _ _ _ _5 v 7 h lコンデンサー87スポッド/コンデンサー_ _ _ _ _ _ _ _ _ _ _ _ _7 d nmk CADバイザー87スポッド/ CADバイザー_ _ _ _ _ _ _ _ _ _ _7 l 4 z fコンデンサー87スポッド/コンデンサー_ _ _ _ _ _ _ _ _ _ _ _ _d j 6 d m CADバイザー87スポッド/ CADバイザー_ _ _ _ _ _ _ _ _ _ _s j pq 8 c ad vi sor 87 sサービスアカウント/ cad vi sorcアドバイザー88 sサービスアカウント/デフォルトc _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _アドバイザー94スコント_ _ _ _ _ _ロールエラー_ _ _ _ _ _ _ pps / cアドバイザー_ _ _ _ _ _6 cc 5 c 5 c 9 cccアドバイザー63デーモンセット_ _ _ _ _ _ _ _ _ _ a pp s / c a d i sorc ad vi sor 63 s ── [ root @ v m s 100. l i r u i l o n g _ _ _ _s.github.io][ /back]
┌──[[email protected]]-[~/back]
└─$kubectl get all -n cadvisor
Warning: kubevirt.io/v1 VirtualMachineInstancePresets is now deprecated and will be removed in v2.
NAME READY STATUS RESTARTS AGE
pod/cadvisor-5v7hl 1/1 Running 0 2m50s
pod/cadvisor-7dnmk 1/1 Running 0 2m50s
pod/cadvisor-7l4zf 1/1 Running 0 2m50s
pod/cadvisor-dj6dm 1/1 Running 0 2m50s
pod/cadvisor-sjpq8 1/1 Running 0 2m50s

名前 希望する現在 準備完了 最新の利用可能なノード セレクターの経過時間
daemonset.apps/cadvisor 5 5 5 5 5 2m26s
┌─[[email protected]]-[~/back]
└─$
復元失敗状況分析
ここで注意すべき点は、コマンド スペースが現在削除されているが、次のように中断した場合、kubevirt はコマンド ラインを通じてコマンド スペースを削除しますが、その削除は完了していないことです。または、他の操作を実行しました。作成した API リソースの削除を繰り返すと問題が発生する可能性があるため、操作前のクラスタ状態に戻したい。

┌─[[email protected]]-[~/ansible/kubevirt]
lux─$kubectl get ns
名前 ステータス 年齢
cadvisor アクティブ 39 時間
デフォルト アクティブ 3d20h
ingress-nginx アクティブ 3d20h
kube-node-lease アクティブ 3d20h
kube -public Active 3d20h
kube-system Active 3d20h
kubevirt Termination 3d20h
local-path-storage Active 3d20h
metallb-system Active 3d20h
velero Active 40h
このとき、velero を使用すると、バックアップと復元の操作が発生します。次の 2 つの状態でスタックする場合があります: InProgress または New

┌─[[email protected]]-[~/ansible/kubevirt]
lux─ velerogetrestore NAMEBACKUPSTATUSSTART EDCOMPLETEDERRORSWARN INGSCREATEDSELECTOR velero − デモ − 20230130105328 velero − デモ進行中 2023 − 01 − 3010:53:28+ 0800 CST < nil > 002023 − 01 − 3010 : 53 : 28 + 0800 CST < none > ┌ ── [ root @ vms 100. liruilongs . ギットハブ 。io ] − [ / ansible / kubevirt ] └ ─ velero get list 名前 バックアップ ステータス 開始済み 完了したエラー 警告 作成されたセレクター velero-demo-20230130105328 velero-demo InProgress 2023-01-30 10:53:28 +0800 CST <nil> 0 0 2023-01-30 10:53:28 +0800 CST <なし> ┌──[[email protected]]-[~/ansible/kubevirt] └─velero取得ストア名前付けます最新状態完了ましエラー警告表示ます。velero選択ます_ _ _ _ _ _ _ _ _ _デモ_ _ _20230130105328ヴェレロ_ _ _デモインプログレス2023 _ _ _ _ _ _ _ _013010:53:28+08:00 CST<いいえ_>002023013010:53:28+08:00 CST<ない>── [ root @ vms 100. l iru i l o n g s . _ _ _ _ _ g i th u b . _ いお] _[ / an sible / k u b e v i r t ] lux   velero get returns名前バックアップステータス 開始済み 完了エラー
警告 作成済み セレクター
velero-demo-20230130161258 velero-demo 新しい 0 0 2023-01-30 16:12 :58 +0800 CST が
長期間変更されていない場合は、スクリプトを使用して名前空間を完全に削除する必要があります。その後、復元作業を正常に続行できます。

┌──[[email protected]]-[~/ansible/kubevirt]
└─velerogetrestores NAMEBACKUPSTATUSSTART EDCOMPLETEDERRORSWARN INGSCREATEDSELECTOR 。velero − デモ − 20230130161258 velero − デモ完了 2023 − 01 − 3020 : 53 : 58 + 0800 CST 2023 − 01 − 3020 : 55 : 20 + 0800 CST 01642023 − 01 − 3 016 : 12 : 58 + 0800 CST < なし > ┌ ── [root @ vms 100.liruilongs . ギットハブ 。io ] − [ / ansible / kubevirt ] lux ─ velero get returns NAME BACKUP STATUS STARTED COMPLETED ERRORS WARNINGS CREATED SELECTOR .................. velero-demo-20230130161258 velero-demo 完了 2023-01-30 20:53:58 +0800 CST 2023-01-30 20:55:20 +0800 CST 0 164 2023-01-30 16:12:58 +0800 CST <なし> ┌──[[email protected]] .io]-[~/ansible/kubevirt] └─velerogerestores名前名前バックアップアップスタット完了エラー警告作成選択...... _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .. ....ヴェレロ_ _デモ_ _ _20230130161258ヴェレロ_ _ _demoCompleted2023013020:53:58+0800CST2023013020:55:20+0800CST01642023013016:12:58+0800CST<none>──[root@vms100.liruilongs.github.io][ / an s ib l e / k u b e v i r t ]  日付
2023 年 1 月 30 日月曜日 21:02:49 CST
┌──[[email protected]]-[ ~/ ansible/kubevirt]
└─$
┌─[[email protected]]-[~/ansible/k8s_shell_secript]
└─$cat delete_namespace.sh
#!/bin/bash

coproc kubectl プロキシ --port=30990 &

if [ $# -eq 0 ] ; then
echo "削除する ns を追加します。"
exit 1
fi

kubectl 名前空間1 を取得します - ojson > ロギング 。jsonsed − i ' / "ファイナライザー" / n ; d' ロギング。jsoncurl − k − H " コンテンツ − タイプ : application / json " − XPUT − − データ − バイナリ @ ロギング 。jsonhttp : / / 127.0.0.1 : 30990 / api / v 1 / namespaces / 1 -o json >logging.json sed -i '/"finalizers"/{n;d}'logging.jsoncurl -k -H "Content -タイプ: application/json" -X PUT --data-binary @logging.json http://127.0.0.1:30990/api/v1/namespaces/1ああそうね_>ログインます_ _ jソンd _' /"ファイナルライザー"/n;_dロッグイング____ jsoncurlkH 内容_ _ _ _ _タイプ_ _ _:a pplic a t i o n / j so n " _ _XP U Tデータ_ _ _バイナリ@ l o gg in g _ jだからnh ttp://127.0.0.1:30990 / a p i / v 1/名前空間/ {1} / finalize

kill %1
┌─[[email protected]]-[~/ansible/k8s_shell_secript]
└─ shdeletenamespace 。shkubevirt ┌ ── [root @ vms 100.liruilongs . ギットハブ 。io ] − [ / ansible / k 8 sshellsecript ] └ ─ sh delete_namespace.sh kubevirt ┌──[[email protected]]-[~/ansible/k8s_shell_secript] └─削除する_ _ _ _ _ _アムエススペースs hk u b e v i r t ── [ root @ v m s 100. l i r u i l o n g s . _ g i th u b . _ いお] _[ / ansible / k8s _ _ _ _ _ _ s地獄_ _ _secr i pt ] ls
delete_namespace.shlogging.json

おすすめ

転載: blog.csdn.net/xiuqingzhouyang/article/details/129444866