NetApp Astra Service を使ってみる ①GKE事前準備編

初版: 2021/6/25
2021/10/3, 2022/2/2 新しい記事のリンクを追加

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

本投稿は、Google Kubernetes Engine(GKE)を使用した手順をご紹介しています。

#### 関連投稿一覧
* [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 を使ってみる ①UIの操作編](https://qiita.com/star76/items/a746fdb78d07c32ef1bc)
* [NetApp Astra Data Store とは](https://qiita.com/star76/items/ef8e809d9cad24d51e8e) 


### GKEでNetApp Astraを使用するためには、以下の準備が必要です。
# 1. NetAppが提供するストレージサービスの用意

Astra Control Serviceは、永続ボリュームのバックエンドストレージとしてGoogleCloud用のCloud Volumes Serviceを使用します。
Google Cloudのマーケットプレイスから[「NetApp Cloud Volume Service」](https://console.cloud.google.com/marketplace/product/endpoints/cloudvolumesgcp-api.netapp.com)を登録します。
![Screen Shot 2021-06-11 at 20.42.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449507/1a04cc05-9e1c-9bcb-3683-476065637cd5.png)

利用規約などにチェックを入れ、再度「登録」ボタンを押してサービスの利用を開始します。
![Screen Shot 2021-06-25 at 22.20.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449507/179115e9-6f78-0f0c-983e-2414e21ea308.png)
「プロダクトページに移動」ボタンをクリックします。
<img width="500" alt="Screen Shot 2021-06-25 at 22.22.01.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449507/b6aa094b-4e7c-6cb2-382e-f8ce6713f2af.png">

Cloud Volumes ServiceのAPIを有効にします。「有効にする」ボタンをクリックします。
![Screen Shot 2021-06-25 at 22.32.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449507/78cf44a3-23eb-d616-cd11-4f94a16fef6a.png)

「同意する」をクリックして進めます。
![Screen Shot 2021-06-25 at 22.36.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449507/52ded768-67b5-8e60-57a0-1ff21da113dc.png)

Cloud Volumes Serviceは、以下の2つのサービスタイプがあります。
[NetApp Cloud Centralのグローバルリージョンマップ](https://cloud.netapp.com/cloud-volumes-global-regions#cvsGcp)を参照し、展開するリージョンと使用するサービスタイプをを決めておきます。

| サービスタイプ | 内容 |
|:--|:--|
|CVS|Google Cloud Consoleからボリュームを作成するときのサービスのデフォルトのサービスタイプです。軽〜中程度のパフォーマンス(最大100MiB/s)を必要とする汎用のLinuxおよびWindowsワークロード向けに設計されています。ストレージボリュームに2つのサービスレベル(シングルゾーンとマルチゾーンの高可用性)を提供し、リージョン内でのボリュームの可用性を保証します。|
|CVS-Performance|高スループット、低遅延を求めるLinuxおよびWindowsワークロードを対象とした高性能のサービスタイプです。Cloud Volumes Service APIからボリュームを作成するときは、こちらがデフォルトのサービスタイプとなります。3つのサービスレベルが利用でき、サービスレベルを動的に調整して、パフォーマンスをワークロードに合わせることができるため、アプリケーションのワークロードに必要なパフォーマンスに合わせてコストを最適化できます。|


# 2. 必要なAPIを有効にする
Google Cloud console、または gcloud CLIを使って以下のAPIを有効にします。
APIを有効にする方法の詳細は、[こちら](https://docs.netapp.com/us-en/astra/media/get-started/video-enable-gcp-apis.mp4)のビデオを参照ください。

* Kubernetes Engine API
![Screen Shot 2021-06-17 at 1.06.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449507/ffc7710b-34da-bf30-5bb0-42bdbf219085.png)

* Cloud Storage API
![Screen Shot 2021-06-21 at 16.13.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449507/20e041fd-1374-85f0-423a-9c71a7dbca51.png)

* Google Cloud Storage JSON API
![Screen Shot 2021-06-17 at 1.08.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449507/7a179f8e-b3ad-d10b-d835-2c188ff6b2fa.png)

* Service Usage API
![Screen Shot 2021-06-17 at 1.10.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449507/00c37d3b-d695-8b15-50c8-8e923a61067b.png)

* Cloud Resource Manager API
![Screen Shot 2021-06-17 at 14.03.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449507/97499aee-f0f8-f4e4-9483-73963bed12a0.png)

* Service Consumer Management API
![Screen Shot 2021-06-17 at 14.05.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449507/d8d5726a-3f22-d468-b374-af5fdbf81c02.png)

* Service Networking API
![Screen Shot 2021-06-17 at 14.06.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449507/c6fb7a1c-e223-d640-d263-fd8c77921513.png)

* Service Management API
![Screen Shot 2021-06-17 at 14.06.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449507/1b4f3ea2-35f1-7721-feaa-0d151b6e4b74.png)


# 3. サービスアカウントの作成
AstraがKubernetesクラスタにアクセスするための専用のアカウントを作成します。

* [Google Cloud SDK (gcloudコマンド)](https://cloud.google.com/sdk/install) がインストールされている環境で実施します。
* サービスアカウントを作成するプロジェクトが指定されていることを確認します。

```bash
$ gcloud config list
[core]
account = [メールアドレス]
disable_usage_reporting = False
project = [プロジェクト名]

Your active configuration is: [default]
```

* 作成するサービスアカウントの名前を変数に設定します
サービスアカウント名は、6～30文字で、小文字で始まる、小文字の英数字である必要があります。(ハイフンは利用可)

```bash
$ SA=[サービスアカウント名］
例
$ SA=netapp-astra
$ echo $SA
```

* プロジェクトを変数に設定します

```bash
$ PROJECT_ID=`gcloud config list --format="text(core.project)" | awk '{print $NF}'`
$ echo $PROJECT_ID
```

* サービスアカウントを作成します

```bash
$ gcloud iam service-accounts create ${SA}
Created service account [netapp-astra].
```

* 作成したサービスアカウントに必要な権限を追加します

```bash
Compute Network Viewer ロールの追加
$ gcloud projects add-iam-policy-binding ${PROJECT_ID} --member=serviceAccount:${SA}@${PROJECT_ID}.iam.gserviceaccount.com --role=roles/compute.networkViewer --condition=None

Kubernetes Engine Admin ロールの追加
$ gcloud projects add-iam-policy-binding ${PROJECT_ID} --member=serviceAccount:${SA}@${PROJECT_ID}.iam.gserviceaccount.com --role=roles/container.admin --condition=None

Cloud Volumes Admin ロールの追加
$ gcloud projects add-iam-policy-binding ${PROJECT_ID} --member=serviceAccount:${SA}@${PROJECT_ID}.iam.gserviceaccount.com --role=roles/netappcloudvolumes.admin --condition=None

Service Usage Viewer ロールの追加
$ gcloud projects add-iam-policy-binding ${PROJECT_ID} --member=serviceAccount:${SA}@${PROJECT_ID}.iam.gserviceaccount.com --role=roles/serviceusage.serviceUsageViewer --condition=None

Storage Admin ロールの追加
$ gcloud projects add-iam-policy-binding ${PROJECT_ID} --member=serviceAccount:${SA}@${PROJECT_ID}.iam.gserviceaccount.com --role=roles/storage.admin --condition=None
```

* 上記のロールが追加されたことを確認します。

```bash
$ gcloud projects get-iam-policy ${PROJECT_ID} --flatten="bindings[].members" --format="table(bindings.role)" --filter=bindings.members:${SA}@${PROJECT_ID}.iam.gserviceaccount.com
```

```
ROLE
roles/compute.networkViewer
roles/container.admin
roles/netappcloudvolumes.admin
roles/serviceusage.serviceUsageViewer
roles/storage.admin
```

Google Cloud Console からの追加する場合は、[こちら](https://docs.netapp.com/us-en/astra/media/get-started/video-create-gcp-service-account.mp4)のビデオを参照ください。


# 4. サービスアカウントキーの作成
Google Cloud Consoleの「IAMと管理」にて「サービスアカウント」で、先程作成したサービスアカウントをクリックし、「キー」のタブから鍵を作成します。
「鍵を追加」をプルダウンして「新しい鍵を作成」をクリックします。
![Screen Shot 2021-06-21 at 16.38.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449507/e3ab9f26-0b85-57fa-b16b-800aa59a7bd9.png)

キーのタイプは「JSON」を選択します。「作成」ボタンをクリックすると、鍵がダウンロードされます。
![Screen Shot 2021-06-21 at 16.42.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449507/20d84fdd-e4dd-918f-db20-c2925fcd9b16.png)

鍵の作成方法の詳細については、[こちら](https://docs.netapp.com/us-en/astra/media/get-started/video-create-gcp-service-account-key.mp4)を参照ください。


# 5. VPCのネットワークピアリングを設定

[Google CloudPlatformのCloudVolumes](https://console.cloud.google.com/netapp/cloud-volumes/volumes)の「管理」のボタンをクリックし、「ボリューム」の「Create」ボタンをクリックしボリューム作成画面を表示します。
実際にはボリュームは作成しませんが、ボリューム作成の途中で表示されるコマンドを使用してVPCネットワークピアリングを設定します。

![Screen Shot 2021-06-17 at 15.37.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449507/91605a73-f01d-1bc4-0fdf-2da92df6c260.png)

「Service Type」は、リージョンに適したサービスタイプを選択します。
「Region」で、該当のリージョンを選択します。
「Network Details」で、該当のVPCを選択します。VPCを作成していない場合は「VPCネットワーク」にて作成します。

VPCネットワークピアリングを設定していない場合は、次の通知が表示されます。

![Screen Shot 2021-06-17 at 15.44.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449507/a9ce5a56-b70e-b0f2-5fb8-f43f68701827.png)
「VIEW COMMANDS HOW TO SET UP NETWORK REERING」ボタンをクリックします。

表示されたコマンドを実行してVPCネットワークピアリング用のグローバルIPを払い出し、VPCネットワークピアリングを作成します。
ネットワークピアリングの作成が完了したら「CANCEL」ボタンをクリックして画面を閉じます。
![Screen Shot 2021-06-25 at 23.26.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449507/15b0531e-dcca-e9e9-2d05-dad7f8b32540.png)


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

| 項目 | 要件 |
|:--|:--|
|サポートされるK8sバージョン|v1.17-1.20|
|workerノードのイメージ|Ubuntu またはContainer-Optimized OS をサポートします|
|K8sクラスタの状態|Online状態のworkerノードが最低1台必要です|
|Google Cloudのリージョン|K8sクラスタは、[NetApp Cloud Volumes Service がサポートされているリージョン](https://cloud.netapp.com/cloud-volumes-global-regions#cvsGc)で実行されている必要があります。Astra Control Serviceは、CVSとCVS-Performanceの両方のサービスタイプをサポートしています。|
|ネットワーク|K8sクラスタは、Cloud Volumes Service とピアリングされているVPCに存在する必要があります|
|プライベートクラスタ|クラスタがプライベートの場合、以下のAstra Control ServiceのIPアドレスを許可するようネットワークを設定する必要があります。|
|GKEクラスターの動作モード|Standardモードを使用する必要があります。現時点では、Autopilotモードはテストされていません。|

```
Astra Control ServiceのIPアドレス
54.164.233.140/32
3.218.120.204/32
34.193.99.138/32
```

GKEクラスタを作成していない場合は、Google Cloud Consoleから作成します。
![Screen Shot 2021-06-17 at 16.43.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449507/8e5cdd50-a4c0-5add-f643-a90ed672cc2d.png)

使用するクラスタモードは、「標準」または「Autopilot」から選択します。
AutopilotはGKEの新しいモードで、Googleがworkerノードの基本的な管理を実施してくれます。(AutopilotモードはAstraではテストされておりません)
ここでは「標準」を選択します。
![Screen Shot 2021-06-17 at 16.42.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449507/3f433034-b675-9290-475a-0a3f4da957e0.png)

「クラスタの基本」タブで、クラスタの名前やゾーンなどを選択します。
![Screen Shot 2021-06-17 at 16.47.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449507/7cac64ce-c4d9-90f7-7fdb-335173c86a7b.png)

「ネットワーキング」タブで該当のVPCを選択します。
![Screen Shot 2021-06-17 at 16.55.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449507/a608bf63-9722-b63f-0650-0d6b39ce4a55.png)

「作成」ボタンを押してクラスタを作成します。

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