2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

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

Last updated at Posted at 2021-07-08

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

はじめに

前回の記事では、NetAppが提供するAstraの概要や特徴について記載しました。
続けて実際にAstraがどのようなものか解説していこうと思いますが、まずは利用するために必要な事項を以下に記載していきます。

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

関連投稿一覧

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

1. Azure サブスクリプションの作成

Azureのサブスクリプションをお持ちでない場合は、作成します。
作成方法は、こちらを参照ください。

2. NetAppが提供するストレージサービスの用意

2-1. Azure NetApp Files の利用申請

=> 2021/10/6 よりこのプロセスは不要となりました
Astra Control Serviceは、永続ボリュームのバックエンドストレージとして「Azure NetApp Files」を使用します。
Azure NetApp Filesにアクセスするためのリクエストフォームに必要事項を記入し、申請します。

Screen Shot 2021-06-29 at 15.20.02.png
Screen Shot 2021-06-29 at 15.20.12.png
「Submit」ボタンで申請すると、以下のようなメッセージが表示されます。
image.png

NetAppにてサービスのアクセス許可が完了すると、入力したメールアドレスあてにメールが送信され、Azure NetApp Filesが利用できるようになります。
続けて、Azure NetApp Filesでボリュームの作成を行うために、ポータルでNetAppリソースプロバイダやNetAppアカウント、キャパシティプールを作成していきます。Azure NetApp Filesのリソースは以下のような関連付けになっています。

Screen Shot 2021-08-07 at 23.38.09.png

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

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

{"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

  • 複数のサブスクリプションを持っている場合は、以下のコマンドで使用するサブスクリプションを設定します。
$ az account set --subscription [サブスクリプションID]
  • リソースプロバイダの一覧を表示するコマンドを実行します。
$ az feature list | grep ANFGA
  • レスポンスに、以下が含まれることを確認します。
"id": "/subscriptions/[サブスクリプションID]/providers/Microsoft.Features/providers/Microsoft.NetApp/features/ANFGA",
"name": "Microsoft.NetApp/ANFGA",
  • NetAppリソースプロバイダ を登録します。
    登録処理は完了するまでに時間がかかることがありますので、「--wait」パラメータを付与し登録が完了するまで待ちます。
$ az provider register --namespace Microsoft.NetApp --wait
  • Resource Provider が登録されたことを確認します。
$ 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

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

「Create」をクリックして、「New NetApp account」ウィンドウに以下の情報を入力し、「Create」ボタンで作成します。
image.png
新規にリソースグループを作成したい場合は、以下から作成できます。
image.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のサービスレベルの詳細については、こちらをご覧ください。

作成したNetAppアカウントの画面で「Capacity Pools」をクリックします。
Screen Shot 2021-07-01 at 16.11.29.png

「+ Add pool」をクリックして、新しいキャパシティプールを作成します。
Screen Shot 2021-07-01 at 16.13.09.png
Screen Shot 2021-07-01 at 20.44.18.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

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

Azure NetApp Filesを使用する仮想ネットワークを作成していない場合は、こちらの手順に従い作成します。

Azureポータルの「Virtual Networks」に移動し、Azure NetApp Filesに使用する仮想ネットワークを選択します。
Screen Shot 2021-07-01 at 22.06.40.png
Screen Shot 2021-07-01 at 23.05.42.png

「Subnets」を選択し、「+ Subnet」をクリックしてAzure NetApp Files用のサブネットを作成します。
Screen Shot 2021-07-01 at 23.07.31.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

作成の際には、以下に注意してください。

  • 仮想ネットワークでは、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を使用してサービスプリンシパルを作成します。

  • Astra Control Serviceで管理するAKSクラスタを作成予定のサブスクリプションを確認します。
$ az configure --list-defaults
[]

$ az account list --output table
Name        CloudName    SubscriptionId                        State    IsDefault
----------  -----------  ------------------------------------  -------  -----------
XXXXXXXXXX  AzureCloud   [サブスクリプションID]                   Enabled  True
  • サービスプリンシパルを作成し、「Contributor」ロールを割り当てます。スコープはサブスクリプション全体に有効となるようにします。
    「displayName」は任意の名前でOKです。
$ 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ファイルとして保存します。
{
  "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を自動的に入力するようにできます。
{
  "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"
}
  • サービスプリンシパルが正しく作成されたかを確認します。
作成したサービスプリンシパルでログインし、結果が返ってくることを確認します
$ 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 がサポートされているリージョンで実行されている必要があります。
サブスクリプション クラスタは、Azure NetApp Filesが有効になっているサブスクリプションに存在する必要があります。Azure NetApp Filesに登録するときに、サブスクリプションを選択します。
ネットワーク Kubernetesクラスタは、Azure NetApp Filesに委任したサブネットに直接アクセスできる仮想ネットワークに存在する必要があります。Kubernetesクラスタが、Azure NetApp Filesに委任したサブネットが含まれる仮想ネットワークとは別の仮想ネットワークに存在する場合は、ピアリング接続の両側がオンラインである必要があります。Azure NetApp Filesで使用できるIPの数のデフォルトは仮想ネットワークにつき1,000であることに注意してください。上限に近づいている場合は、上限引き上げの申請を行うか、新しいAKSクラスタを作成します。新しいAKSクラスタを作成するときは、クラスタに新しい仮想ネットワークを作成します。作成した仮想ネットワークに新しいサブネットを作成し、そのサブネットをAzure NetApp Filesに委任します。
プライベートネットワーキング プライベートネットワークをクラスタで有効にしないでください
外部ボリュームスナップショットコントローラ クラスタには、CSIボリュームスナップショットコントローラがインストールされている必要があります。このコントローラーは、K8sバージョン1.21以降はデフォルトでインストールされますが、バージョン1.17、1.18、1.19、または1.20を実行しているクラスタでは確認が必要です。

AKSクラスタを作成していない場合は、Azureポータルから作成します。
image.png

「+ Create」ボタンをクリックし、「+ Create a Kubernetes cluster」を選択します。
Screen Shot 2021-07-02 at 14.13.04.png

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

  • 「Basic」タブ
    Screen Shot 2021-07-02 at 14.39.57.png

  • 「Networking」タブ
    Screen Shot 2021-07-02 at 14.43.00.png
    「Review + create」をクリックして、クラスタを作成します。

クラスタの作成が完了すると、以下のようなメッセージが表示されます。
image.png

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

credentialのダウンロード
$ az aks get-credentials --resource-group [リソースグループ名] --name [Kubernetesクラスタ名]

クラスタに接続できることを確認します。

$ 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をインストールします。
$ 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を使用するようになっていますので、適用する前にファイルをダウンロードして編集します。
$ 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をインストールします。
$ 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を使用するようになっていますので、適用する前にファイルをダウンロードして編集します。
$ 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の操作編 に続きます。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?