Tanzu Mission ControlのData Protection機能を試す

Tanzu Mission ControlにはData Protectionという機能がある。これを使うと、クラスタに勝手にVeleroをインストールしてくれて、バックアップもWebUIからポチポチ押すだけで取れてしまう。
Veleroはとかくインストールが面倒だったり、バックアップの設定もコマンドで実行しなくてはならずユーザフレンドリーとは疎遠のツールなので、Kubernetesのバックアップの敷居を下げたい人には有効な機能といえる。
これを利用した時のメモ。公式ドキュメントは[こちら](https://docs.vmware.com/en/VMware-Tanzu-Mission-Control/services/tanzumc-concepts/GUID-C16557BC-EB1B-4414-8E63-28AD92E0CAE5.html)。
## 前提条件
S3互換ストレージを用意しておく。ここではMinIOを利用する。
MinIOの構築方法については以前[こちら](https://qiita.com/ipppppei/items/ad0b01498e62c2e55256)の記事に書いている。
また、MinIOのテナント上にバケットも作成しておくこと。

## Data Protection機能の有効化
機能を有効化する前にバックアップの保存先となるターゲットの場所と認証情報を作成する。

今回は以前作成したMinIOにバックアップを取得する。作成するCredentialとして`AWS S3 or S3-compatible`を選択し、Access key idとSecret access keyにMinIOのテナントのものを入力する。

![1672885242513.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547981/c65e37f5-360e-2aa4-15bb-7ff38e4accbd.png)

次に、`Administration`から`Target locations`を選択し、`AWS S3 or S3-compatible`を選択する。

![1672891404867.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547981/b5b286d1-cd29-d890-0fb5-ffd2c242a4e6.png)

すると、Credential, Configure, Assign Clusters, Name and createについて設定が促されるので、以下のように設定していく。
- Credential
  - `Account credential`：先程作成したMinIOのCredentialを選択
- Configure
  - `AWS S3 or S3-compatible URL`：MinIOのテナントのURL
  - `Bucket`：MinIOのテナント内に作成しているBucket名
  - `Region`：`minio`
- Assign Clusters
  - バケットを利用したいクラスタ or クラスタグループを選択
- Name and create
  - `Name`：最大63文字で小文字、数字、ハイフンからなり、始まりと終わりは小文字と数字のいずれか

Target Locationの作成が終わったらData Protectionを有効化する。
`Clusters`からData Protectionを有効にしたいクラスタを選択し、`Overview`の右下にある`Data protection`の`ENABLE DATA PROTECTION`のリンクをクリックする。
すると、Veleroをインストールする旨が表示されるので`ENABLE`をクリックする。

![1672891298601.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547981/6d23783d-4b30-430c-566d-ccdf9204190d.png)

有効化が完了すると、Veleroがresticプラグインとともにインストールされている状態となる。
```
$ kubectl get pod -n velero
NAME                      READY   STATUS    RESTARTS   AGE
restic-8ghkj              1/1     Running   0          124m
restic-wvd8x              1/1     Running   0          124m
velero-7fdc5bff66-drf5r   1/1     Running   0          125m
```

余談だが、vSphere環境でもvShere pluginがインストールされないのは、マルチクラウドを意識してのことだと考えられる（resticならどこのクラウドでもリストアできるため）。


## バックアップの取得
次にバックアップを取得する。
Data Protectionを有効化したクラスタを選択し、`Data protection`から`CREATE BACKUP`を選択する。

![1672892538303.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547981/f8153a2b-bd5d-1592-ee50-efdcf143d7a0.png)

すると、What to backup、Where to store the backup、When to backup、Back up retention、Name and createについて入力を促される

#### What to backup
バックアップ対象を聞かれる。選択肢は、
  - `Back up the entire cluster, <クラスタ名>`：クラスタ全体
  - `Back up selected namespaces`：チェックボックスで選択したNamespace
  - `Back up resource using a label selector`：ラベルが一致したリソース

となっている。ここではクラスタ全体をバックアップする。
また、Advanced Optionでは以下が選択できる。
 - `Exclude resources (optional)`：除外するリソース
 - `Exclude namespaces (optional)`：除外するNamespace
 - `Include cluster-scoped resources`：クラスタスコープのリソースを含むかどうか\
※クラスタスコープのリソース：`kubectl api-resources`でNAMESPACEDがFalseのリソース

今回は特に変更せずに進める。

#### Where to store the backup
バックアップ先を指定する。`All locations`と`Currently available location`があるが、前者は全てのTarget locationを対象にするのに対して、後者はStatusがAvailableのもののみを対象にする。\
`All location`を選択し、`Target location`では先程作成したLocationを選択する。
なお、選択後に`VIEW DETAILS`をクリックすることで、Availableになっているかも確認できるので、気になるなら確認しておくとよい。

![1672893592435.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547981/abb73223-97d4-9af7-283a-aeaa99b65254.png)

#### When to backup
バックアップを取るタイミングを今、1時間毎、1日毎、1週毎、1月毎、カスタムで選択できる。カスタムの場合はCRON形式で指定する。
ここでは`NOW`を選択する。

#### Back up retention
バックアップの保持期間（自動で削除されるまでの期間）を指定する。デフォルトでは30日となっている。
ここではデフォルトのまま進む。
なお、選択できるのは1日〜365日となっている。Velero CLIで実行する場合は365日以上も指定可能なので、無制限に保持したい、もしくは手動でのみ削除したい人はVelero CLIを使った方が良さそう。

#### Name and create
バックアップ名を指定する。リストアの時に名前を指定して利用する。

全て入力してCREATEを選択するとバックアップが始まり、しばらくすると以下のようにCompletedが表示される。

![1672894092703.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547981/f18ce10d-5937-579a-aee6-fd92a2419ad8.png)

バックアップ名をクリックするとバックアップした対象の情報が一部表示される。デフォルトでは以下のNamespaceは自動で除外される模様。
- kube-system
- tanzu-system
- tkg-system
- velero
- vmware-system-csi
- vmware-system-tmc

なお、バックアップしたものの詳細はWebUIからは確認できないため、取得したものの詳細が見たい場合はVelero CLIから確認するとよい。以下のような感じでリソースの一覧も確認できる。
```
$ velero describe backup <バックアップ名> --details
：（省略）
Total items to be backed up:  851
Items backed up:              851

Resource List:
  admissionregistration.k8s.io/v1/MutatingWebhookConfiguration:
    - cert-manager-webhook
    - crdmutator.antrea.io
    - crdmutator.antrea.tanzu.vmware.com
：（省略）
```