NetApp Astra Service を使ってみる ②AKS事前準備編

初版: 2021/7/8
2021/10/3, 2022/2/2 新しい記事のリンクを追加
2021/10/8 Azure NetApp Filesの利用申請フローを更新

# はじめに

[前回の記事](https://qiita.com/star76/items/86c1df804fc762b22d8e)では、NetAppが提供するAstraの概要や特徴について記載しました。
続けて実際にAstraがどのようなものか解説していこうと思いますが、まずは利用するために必要な事項を以下に記載していきます。

本投稿は、Azure Kubernetes Service(AKS)を使用した手順をご紹介しています。

#### 関連投稿一覧
* [NetApp Tridentとは](https://qiita.com/star76/items/fa88d715192f565e5832) 
* [NetApp Astra とは](https://qiita.com/star76/items/86c1df804fc762b22d8e) 
* [NetApp Astra Service を使ってみる ①GKE事前準備編](https://qiita.com/star76/items/4ec78181db97d0f52eb8)
* [NetApp Astra Service を使ってみる ②AKS事前準備編](https://qiita.com/star76/items/4a2999590fd657082254) 【本投稿】 
* [NetApp Astra Service を使ってみる ③Astra UI操作編](https://qiita.com/star76/items/1bb428404b6eb4337dd4)
* [NetApp Astra Control のインストール](https://qiita.com/star76/items/84b1d0732e8ce2dbf4cc)
* [NetApp Astra Control を使ってみる](https://qiita.com/star76/items/a746fdb78d07c32ef1bc) 
* [NetApp Astra Data Store とは](https://qiita.com/star76/items/ef8e809d9cad24d51e8e) 


### AKSでNetApp Astraを使用するためには、以下の準備が必要です。

# 1. Azure サブスクリプションの作成
Azureのサブスクリプションをお持ちでない場合は、作成します。
作成方法は、[こちら](https://docs.microsoft.com/ja-jp/azure/cost-management-billing/manage/create-subscription)を参照ください。


# 2. NetAppが提供するストレージサービスの用意
### 2-1. Azure NetApp Files の利用申請  
=> 2021/10/6 よりこのプロセスは[不要となりました](https://azure.microsoft.com/ja-jp/blog/the-wait-list-is-over-azure-netapp-files-is-enterpriseready-in-your-azure-portal/)
~~Astra Control Serviceは、永続ボリュームのバックエンドストレージとして「Azure NetApp Files」を使用します。
Azure NetApp Filesにアクセスするための[リクエストフォーム](https://aka.ms/azurenetappfiles)に必要事項を記入し、申請します。~~
![Screen Shot 2021-06-29 at 15.20.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449507/3b0fb8dd-1512-637d-5ad0-ae52e47e0a2a.png)
![Screen Shot 2021-06-29 at 15.20.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449507/5a48dd54-2974-c6a3-b977-19ff4cba485e.png)
~~「Submit」ボタンで申請すると、以下のようなメッセージが表示されます。~~
<img width="450" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449507/8ca36ea7-48e1-c2c8-f7cd-b131b786b3c6.png">

~~NetAppにてサービスのアクセス許可が完了すると、入力したメールアドレスあてにメールが送信され、Azure NetApp Filesが利用できるようになります。
続けて、Azure NetApp Filesでボリュームの作成を行うために、ポータルでNetAppリソースプロバイダやNetAppアカウント、キャパシティプールを作成していきます。Azure NetApp Filesのリソースは以下のような関連付けになっています。~~
![Screen Shot 2021-08-07 at 23.38.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449507/c016cd75-c262-ea5f-ba3c-3007c80bc0c2.png)


### 2-2. NetAppリソースプロバイダ の登録

NetAppのストレージサービスを利用するためには、「Microsoft.NetApp」というリソースプロバイダを登録する必要があります。
NetAppリソースプロバイダの登録は、上記 2-1.のAzure NetApp Filesへのアクセスが許可されていない場合でも、正常に行うことができます。
ただし、アクセス権限がない場合、Azure NetApp Filesリソースを作成する際に、次のメッセージが表示されエラーとなります。

```bash
{"code":"DeploymentFailed","message":"At least one resource deployment operation failed. Please list deployment operations for details. Please see https://aka.ms/arm-debug for usage details.","details":[{"code":"NotFound","message":"{\r\n \"error\": {\r\n \"code\": \"InvalidResourceType\",\r\n \"message\": \"The resource type could not be found in the namespace 'Microsoft.NetApp' for api version '2017-08-15'.\"\r\n }\r\n}"}]}
```

Azureポータルで、右上の「Cloud Shell」アイコンをクリック、またはazコマンドが実行できる環境から以下を実施します。
![Screen Shot 2021-06-29 at 15.31.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449507/677c334f-20d7-86d5-b8d9-255b4ff7bf92.png)

* 複数のサブスクリプションを持っている場合は、以下のコマンドで使用するサブスクリプションを設定します。

```bash
$ az account set --subscription [サブスクリプションID]
```

* リソースプロバイダの一覧を表示するコマンドを実行します。

```bash
$ az feature list | grep ANFGA
```

* レスポンスに、以下が含まれることを確認します。

```
"id": "/subscriptions/[サブスクリプションID]/providers/Microsoft.Features/providers/Microsoft.NetApp/features/ANFGA",
"name": "Microsoft.NetApp/ANFGA",
```

* NetAppリソースプロバイダ を登録します。
登録処理は完了するまでに時間がかかることがありますので、「--wait」パラメータを付与し登録が完了するまで待ちます。

```bash
$ az provider register --namespace Microsoft.NetApp --wait
```

* Resource Provider が登録されたことを確認します。

```bash
$ az provider show --namespace Microsoft.NetApp
```

* レスポンスに、以下が含まれることを確認します。
正常に登録された場合は、"registrationState"の値が "Registered" となります。

```
  "id": "/subscriptions/[サブスクリプションID]/providers/Microsoft.NetApp",
  "namespace": "Microsoft.NetApp",
  "registrationPolicy": "RegistrationRequired",
  "registrationState": "Registered",
```

Azureポータルの「Subscription」から、「Resource Providers」を選択し、Providerに「Microsoft.NetApp」が表示されStatusが「Registered」となっていることを確認します。
![Screen Shot 2021-06-29 at 16.29.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449507/d60ebc00-a34a-3e02-7edc-f34fbf19198a.png)


### 2-3. NetAppアカウントの作成
Astra Control Serviceが永続ボリュームをプロビジョニングするためには、事前に「キャパシティプール」を作成しておく必要があります。
キャパシティプールを作成するためにはNetAppアカウントを作成する必要があります。

NetAppのアカウントは、1つのリージョンにのみ関連付けすることができます。
(1つのリージョン内に複数のNetAppアカウントを関連付けすることは可能です)

NetAppアカウントを作成する前に、NetAppにて上記の 2-1.Azure NetApp Filesの利用申請 および 2-2. NetAppリソースプロバイダの登録 が完了している必要があります。

Azureポータルの検索ボックスで「Azure NetApp Files」を検索します。
![Screen Shot 2021-06-29 at 16.43.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449507/1b875295-6538-a47a-2a72-77e8f7893a0f.png)

「Create」をクリックして、「New NetApp account」ウィンドウに以下の情報を入力し、「Create」ボタンで作成します。
<img width="650" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449507/8645a88b-fa27-8e20-b19b-894e35bceadd.png">
新規にリソースグループを作成したい場合は、以下から作成できます。
<img width="400" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449507/d4866c9a-b488-3b18-e509-1ed758dc03c6.png">


### 2-4. キャパシティプールの作成

上記で作成したNetAppアカウントに、キャパシティプールを作成します。
キャパシティプールは、1つのNetAppアカウントに属することができます。
(1つのNetAppアカウントに複数のキャパシティプールを作成することは可能です)

キャパシティプールは、Ultra、Premium、Standardの3つのサービスレベルから選択でき、Astra Control Serviceは、この3つすべてをサポートしています。

| サービスレベル | 1TiB(プロビジョニング容量)あたりの最大スループット |
|:--|:--|
|Ultra|128MiB|
|Premium|64MiB|
|Standard|16MiB|

Azure NetApp Filesのサービスレベルの詳細については、[こちら](https://docs.netapp.com/us-en/astra/learn/azure-storage.html)をご覧ください。

作成したNetAppアカウントの画面で「Capacity Pools」をクリックします。
![Screen Shot 2021-07-01 at 16.11.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449507/f9daa532-ff1b-3d02-48a1-1b4de228d52d.png)

「+ Add pool」をクリックして、新しいキャパシティプールを作成します。
![Screen Shot 2021-07-01 at 16.13.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449507/684b9688-b64d-29ba-3398-2b3364657cb2.png)
![Screen Shot 2021-07-01 at 20.44.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449507/1383b43f-a2d7-1caa-5d94-bcb75d16c1fe.png)

NetApp Azure FilesのQoSには2つのタイプがあり、それぞれ以下のようになっています。

| QoSタイプ | 説明 |
|:--|:--|
|Auto|デフォルトのQoSタイプ。スループットは、ボリュームに割り当てられたサイズクォータに比例して、プール内のボリュームに自動的に割り当てられます。ボリュームに割り当てられる最大スループットは、容量プールのサービスレベルとボリュームのサイズクォータによって異なります。|
|Manual|ボリュームの容量とスループットを個別に割り当てることができます。手動のQoS容量プールで作成されたすべてのボリュームの合計スループットは、プールの合計スループットによって制限されます。プール合計のスループットは、プールサイズとサービスレベルのスループットの組み合わせによって決定されます。|

例えば、上の図のようにサービスレベルが「Standard」、サイズが4TiB、自動QoSタイプのキャパシティプールには、64MiB/sのスループット※ をキャパシティプール内のボリュームで使用することが可能です。
※ 4TiB(サイズ) * 16MiB(「Standard」の1TiBあたりの最大スループット)

Astra Control Service は、**「自動」のQoSタイプのみをサポート** しています。
「手動」のQoSタイプはサポートされていませんのでご注意ください。

キャパシティプールの作成が完了すると、以下のように一覧に表示されます。
![Screen Shot 2021-07-01 at 20.52.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449507/072fe166-f8f6-c184-748e-b5236571b1ac.png)


# 3. Azure NetApp Files用のサブネットの作成

Azure NetApp Filesを使用する仮想ネットワークを作成していない場合は、[こちら](https://docs.microsoft.com/ja-jp/azure/virtual-network/quick-create-portal)の手順に従い作成します。

Azureポータルの「Virtual Networks」に移動し、Azure NetApp Filesに使用する仮想ネットワークを選択します。
![Screen Shot 2021-07-01 at 22.06.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449507/f48c8771-3618-3ee6-f3b4-fb67a85a4f7e.png)
![Screen Shot 2021-07-01 at 23.05.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449507/5f3af8ba-d1da-bf2d-4049-e7157d3103fa.png)

「Subnets」を選択し、「+ Subnet」をクリックしてAzure NetApp Files用のサブネットを作成します。
![Screen Shot 2021-07-01 at 23.07.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449507/72b99b80-5f44-d6b4-5c2b-b756e73c9e7c.png)

「Add Subnet」で必要な情報を入力し、「Save」をクリックします。
「Delegate subnet to a service」で、「Microsoft.NetApp/volumes」を選択します。
これは、このサブネットをAzure NetApp Filesに委任することで、Astra Control Serviceが該当のサブネットに永続ボリュームを作成できるようにするためです。

![Screen Shot 2021-07-01 at 23.31.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449507/e68ab2ba-ad1a-f2ed-66ef-4fc848eb9e5a.png)

作成の際には、以下に注意してください。
* 仮想ネットワークでは、1つのサブネットのみをAzure NetApp Filesに委任することができます。
* Azure NetApp Filesに委任されたサブネットで「Route table」を指定することはできません。
* Azure NetApp Filesに委任されたサブネットで「Network security group」を指定することはできません。
* Azure NetApp Filesに委任されたサブネットで「SERVICE ENDPOINTS」を指定することはできません。
* グローバルにピアリングされた仮想ネットワークからのボリュームへのアクセスは、現在サポートされていません。
* Kubernetesクラスタが存在するVNetと、Azure NetApp Filesが委任されたサブネットを持つVNetがピアリングされている場合は、ピアリング接続の両側がオンラインである必要があります。

Azure NetApp Filesは、委任されたサブネットへのシステムルートを作成します。
トラブルシューティングなどでこのルートの情報が必要な場合は、仮想マシンの「Effective routes」から確認することができます。


# 4. Azureサービスプリンシパル の作成

Astra Control Serviceは、Azureサービスプリンシパルを使用してKubernetesクラスタを管理します。

以下の手順に従い、[Azure CLI](https://docs.microsoft.com/ja-jp/cli/azure/install-azure-cli)を使用してサービスプリンシパルを作成します。

* Astra Control Serviceで管理するAKSクラスタを作成予定のサブスクリプションを確認します。

```bash
$ az configure --list-defaults
[]

$ az account list --output table
Name        CloudName    SubscriptionId                        State    IsDefault
----------  -----------  ------------------------------------  -------  -----------
XXXXXXXXXX  AzureCloud   [サブスクリプションID]                   Enabled  True
```

* サービスプリンシパルを作成し、「Contributor」ロールを割り当てます。スコープはサブスクリプション全体に有効となるようにします。
「displayName」は任意の名前でOKです。

```bash
$ az ad sp create-for-rbac --name http://sp-astra-service-principal --role contributor --scopes /subscriptions/[サブスクリプションID]

Creating 'contributor' role assignment under scope '/subscriptions/[サブスクリプションID]'
The output includes credentials that you must protect. Be sure that you do not include these credentials in your code or check the credentials into your source control. For more information, see https://aka.ms/azadsp-cli
'name' property in the output is deprecated and will be removed in the future. Use 'appId' instead.
{
  "appId": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
  "displayName": "http://sp-astra-service-principal",
  "name": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
  "password": "XXXXXXXX-XXXXXXXXXXXXXXXXXXXXXXXXX",
  "tenant": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
}
```

* 上記の結果をJSONファイルとして保存します。

```json
{
  "appId": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
  "displayName": "http://sp-astra-service-principal",
  "name": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
  "password": "XXXXXXXX-XXXXXXXXXXXXXXXXXXXXXXXXX",
  "tenant": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
}
```

* 保存したJSONファイルに、サブスクリプションIDを追加します。サブスクリプションIDを追加しておくことで、Astra ControlServiceがサブスクリプションIDを自動的に入力するようにできます。


```json
{
  "appId": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
  "displayName": "sp-astra-service-principal",
  "name": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
  "password": "XXXXXXXX-XXXXXXXXXXXXXXXXXXXXXXXXX",
  "tenant": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
  "subscriptionId": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
}
```

* サービスプリンシパルが正しく作成されたかを確認します。

```bash
作成したサービスプリンシパルでログインし、結果が返ってくることを確認します
$ az login --service-principal --username [上記のappId] --password [上記のpassword] --tenant [上記のtenant]

[
  {
    "cloudName": "AzureCloud",
    "homeTenantId": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
    "id": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
    "isDefault": true,
    "managedByTenants": [],
    "name": "XXXXXXXXXX",
    "state": "Disabled",
    "tenantId": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
    "user": {
      "name": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
      "type": "servicePrincipal"
    }
  }
]
```


# 5. Kubernetesクラスタの作成

Astra Control ServiceからKubernetesクラスタを管理できるよう、以下の要件を満たしている必要があります。

| 項目 | 要件 |
|:--|:--|
|Kubernetesバージョン|バージョン1.17以降である必要があります|
|workerノードのイメージ|すべてのノードプールのイメージタイプはLinuxである必要があります|
|K8sクラスタの状態|オンライン状態のworkerノードが最低1台必要です|
|Azureのリージョン|Kubernetesクラスタは、[Azure NetApp Files がサポートされているリージョン](https://azure.microsoft.com/en-us/global-infrastructure/services/?products=netapp)で実行されている必要があります。|
|サブスクリプション|クラスタは、Azure NetApp Filesが有効になっているサブスクリプションに存在する必要があります。Azure NetApp Filesに登録するときに、サブスクリプションを選択します。
|ネットワーク|Kubernetesクラスタは、Azure NetApp Filesに委任したサブネットに直接アクセスできる仮想ネットワークに存在する必要があります。Kubernetesクラスタが、Azure NetApp Filesに委任したサブネットが含まれる仮想ネットワークとは別の仮想ネットワークに存在する場合は、ピアリング接続の両側がオンラインである必要があります。[Azure NetApp Filesで使用できるIPの数のデフォルト](https://docs.microsoft.com/en-us/azure/azure-netapp-files/azure-netapp-files-resource-limits)は仮想ネットワークにつき1,000であることに注意してください。上限に近づいている場合は、[上限引き上げの申請を行う](https://docs.microsoft.com/en-us/azure/azure-netapp-files/azure-netapp-files-resource-limits#request-limit-increase-)か、新しいAKSクラスタを作成します。新しいAKSクラスタを作成するときは、クラスタに新しい仮想ネットワークを作成します。作成した仮想ネットワークに新しいサブネットを作成し、そのサブネットをAzure NetApp Filesに委任します。|
|プライベートネットワーキング|プライベートネットワークをクラスタで有効にしないでください|
|外部ボリュームスナップショットコントローラ|クラスタには、CSIボリュームスナップショットコントローラがインストールされている必要があります。このコントローラーは、K8sバージョン1.21以降はデフォルトでインストールされますが、バージョン1.17、1.18、1.19、または1.20を実行しているクラスタでは[確認](オンデマンドボリュームスナップショット用の外部スナップショットコントローラーの詳細をご覧くださいhttps://netapp-trident.readthedocs.io/en/latest/kubernetes/operations/tasks/volumes/snapshots.html)が必要です。|

AKSクラスタを作成していない場合は、Azureポータルから作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449507/1f3fcd10-f090-f70f-86e2-da1cfd85f081.png)

「+ Create」ボタンをクリックし、「+ Create a Kubernetes cluster」を選択します。
![Screen Shot 2021-07-02 at 14.13.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449507/02a5d947-45e1-8ac8-0af0-863f4032deea.png)

「Create Kubernetes Cluster」の画面で、必要な情報を入力します。

* 「Basic」タブ
![Screen Shot 2021-07-02 at 14.39.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449507/73b88ea9-7511-e127-a7af-e7ee0675c6de.png)

* 「Networking」タブ
![Screen Shot 2021-07-02 at 14.43.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449507/fe660b97-b975-6280-2fa0-6631d7e66378.png)
「Review + create」をクリックして、クラスタを作成します。

クラスタの作成が完了すると、以下のようなメッセージが表示されます。
<img width="500" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449507/67b2adc2-2086-6be4-4ebb-73db7e128f5d.png">

Azurポータルの上部にある「>_ 」ボタンをクリックしCloud Shellからクラスタに接続、または、以下のコマンドでクラスタに接続します。

```bash
credentialのダウンロード
$ az aks get-credentials --resource-group [リソースグループ名] --name [Kubernetesクラスタ名]
```
クラスタに接続できることを確認します。

```bash
$ kubectl get nodes
NAME                                STATUS   ROLES   AGE     VERSION
aks-agentpool-27601746-vmss000000   Ready    agent   9m26s   v1.19.11
```


# 6. CSIボリュームスナップショットコントローラのインストール

次の手順に従って、作成したKubernetesクラスタにボリュームスナップショットコントローラをインストールします。

#### Kubernetesバージョン1.17、1.18、1.19の手順
* ボリュームスナップショットのCRDをインストールします。

```bash
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-3.0/client/config/crd/snapshot.storage.k8s.io_volumesnapshotclasses.yaml
customresourcedefinition.apiextensions.k8s.io/volumesnapshotclasses.snapshot.storage.k8s.io created

$ kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-3.0/client/config/crd/snapshot.storage.k8s.io_volumesnapshotcontents.yaml
customresourcedefinition.apiextensions.k8s.io/volumesnapshotcontents.snapshot.storage.k8s.io created

$ kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-3.0/client/config/crd/snapshot.storage.k8s.io_volumesnapshots.yaml
customresourcedefinition.apiextensions.k8s.io/volumesnapshots.snapshot.storage.k8s.io created
```
* スナップショットコントローラーを作成します。
NameSpaceは、デフォルトでDefault NameSpaceを使用するようになっていますので、適用する前にファイルをダウンロードして編集します。

```bash
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-3.0/deploy/kubernetes/snapshot-controller/rbac-snapshot-controller.yaml
serviceaccount/snapshot-controller created
clusterrole.rbac.authorization.k8s.io/snapshot-controller-runner created
clusterrolebinding.rbac.authorization.k8s.io/snapshot-controller-role created
role.rbac.authorization.k8s.io/snapshot-controller-leaderelection created
rolebinding.rbac.authorization.k8s.io/snapshot-controller-leaderelection created

$ kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-3.0/deploy/kubernetes/snapshot-controller/setup-snapshot-controller.yaml
statefulset.apps/snapshot-controller created
```

#### Kubernetesバージョン1.20の手順
* ボリュームスナップショットのCRDをインストールします。

```bash
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/v4.0.0/client/config/crd/snapshot.storage.k8s.io_volumesnapshotclasses.yaml
customresourcedefinition.apiextensions.k8s.io/volumesnapshotclasses.snapshot.storage.k8s.io created

$ kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/v4.0.0/client/config/crd/snapshot.storage.k8s.io_volumesnapshotcontents.yaml
customresourcedefinition.apiextensions.k8s.io/volumesnapshotcontents.snapshot.storage.k8s.io created

$ kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/v4.0.0/client/config/crd/snapshot.storage.k8s.io_volumesnapshots.yaml
customresourcedefinition.apiextensions.k8s.io/volumesnapshots.snapshot.storage.k8s.io created
```
* スナップショットコントローラーを作成します。
NameSpaceは、デフォルトでDefault NameSpaceを使用するようになっていますので、適用する前にファイルをダウンロードして編集します。

```bash
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/v4.0.0/deploy/kubernetes/snapshot-controller/rbac-snapshot-controller.yaml
serviceaccount/snapshot-controller created
clusterrole.rbac.authorization.k8s.io/snapshot-controller-runner created
clusterrolebinding.rbac.authorization.k8s.io/snapshot-controller-role created
role.rbac.authorization.k8s.io/snapshot-controller-leaderelection created
rolebinding.rbac.authorization.k8s.io/snapshot-controller-leaderelection created

$ kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/v4.0.0/deploy/kubernetes/snapshot-controller/setup-snapshot-controller.yaml
statefulset.apps/snapshot-controller created
```

ここまで完了したら、次は登録したクラスタ上のアプリケーションのデータ保護をAstraのUI上で操作してみたいと思います。
[NetApp Astra Service を使ってみる ③UIの操作編](https://qiita.com/star76/items/1bb428404b6eb4337dd4) に続きます。