チュートリアル: Azure Kubernetes Service で使うために Azure Container Storage プレビューをインストールする
Azure Container Storage は、コンテナー用にネイティブに構築されたクラウドベースのボリューム管理、デプロイ、オーケストレーション サービスです。 このチュートリアルでは、Azure Kubernetes Service (AKS) クラスターを作成し、クラスターに Azure Container Storage をインストールします。 また、このチュートリアルの手動での方法ではなく、クイックスタートを使用して Azure Container Storage をインストールする方法もあります。
Azure サブスクリプションをお持ちでない場合は、開始する前に 無料アカウント を作成してください。
- リソース グループを作成する
- データ ストレージ オプションと VM の種類を選ぶ
- AKS クラスターを作成する
- クラスターに接続する
- ノード プールにラベルを付ける
- 共同作成者ロールを AKS マネージド ID に割り当てる
- Azure Container Storage 拡張機能のインストール
前提条件
Azure サブスクリプションをお持ちでない場合は、開始する前に無料アカウントを作成してください。
この記事では、最新バージョン (2.35.0 以降) の Azure CLI が必要です。 「Azure CLI のインストール方法」を参照してください。 Azure Cloud Shell の Bash 環境を使用している場合は、最新バージョンが既にインストールされています。 Azure Cloud Shell ではなくローカルでコマンドを実行する場合は、必ず管理特権で実行してください。 詳細については、「Azure Cloud Shell の概要」を参照してください。
Kubernetes コマンド ライン クライアント
kubectl
が必要です。 Azure Cloud Shell を使用している場合は既にインストールされています。または、az aks install-cli
コマンドを実行してローカルにインストールできます。
Note
AKS クラスターが既にデプロイされている場合は、クラスターへの接続に進みます。
作業の開始
自分の Azure サブスクリプション ID をメモしておきます。 Azure ディスクまたはエフェメラル ディスクをデータ ストレージとして使用する場合は、Kubernetes 共同作成者ロールを持つサブスクリプションを使用することをお勧めします。 Azure Elastic SAN をデータ ストレージとして使用する場合は、Azure サブスクリプションの所有者ロールが必要です。
Azure Cloud Shell を起動するか、ローカル インストールを使用している場合は、az login コマンドを使用して Azure CLI にサインインします。
Azure Cloud Shell を使用している場合、ストレージをマウントするように求められることがあります。 ストレージ アカウントを作成する Azure サブスクリプションを選択し、[作成] を選択します。
サブスクリプションのコンテキストを設定する
az account set
コマンドを使用して Azure サブスクリプションのコンテキストを設定します。 az account list --output table
コマンドを実行すると、アクセス権を持つすべてのサブスクリプションのサブスクリプション ID を表示できます。 <subscription-id>
は、実際のサブスクリプション ID で置き換えてください。
az account set --subscription <subscription-id>
リソース プロバイダーを登録する
Microsoft.ContainerService
および Microsoft.KubernetesConfiguration
のリソース プロバイダーを、Azure サブスクリプションに登録する必要があります。 これらのプロバイダーを登録するには、次のコマンドを実行します。
az provider register --namespace Microsoft.ContainerService --wait
az provider register --namespace Microsoft.KubernetesConfiguration --wait
これらのプロバイダーが正常に登録されたかどうかを確認するには、次のコマンドを実行します。
az provider list --query "[?namespace=='Microsoft.ContainerService'].registrationState"
az provider list --query "[?namespace=='Microsoft.KubernetesConfiguration'].registrationState"
リソース グループの作成
Azure リソース グループは、グループとして管理する Azure リソースを保持する論理グループです。 リソース グループを作成する際は、場所の指定を求めるプロンプトが表示されます。 この場所は次のとおりです。
- リソース グループ メタデータのストレージの場所。
- リソースの作成時に別のリージョンを指定しない場合に、Azure でリソースが実行される場所です。
az group create
コマンドを使用して、リソース グループを作成します。 <resource-group-name>
は作成するリソース グループの名前に置き替え、<location>
は eastus、westus2、westus3、または westeurope などの Azure リージョンに置き替えます。
az group create --name <resource-group-name> --location <location>
リソース グループが正常に作成された場合は、次のような出力が表示されます。
{
"id": "/subscriptions/<guid>/resourceGroups/myContainerStorageRG",
"location": "eastus",
"managedBy": null,
"name": "myContainerStorageRG",
"properties": {
"provisioningState": "Succeeded"
},
"tags": null
}
データ ストレージ オプションと仮想マシンの種類を選択する
クラスターを作成する前に、最終的にどのバックエンド ストレージ オプションを選択してストレージ プールを作成するのかを理解しておく必要があります。 なぜなら、クラスター ノードとして最も相性が良い仮想マシン (VM) の種類はストレージ サービスごとに異なり、ストレージ プールを作成する前にクラスターをデプロイするからです。
データ ストレージ オプション
Azure Elastic SAN: Azure Elastic SAN は、汎用データベース、ストリーミングとメッセージング サービス、CD/CI 環境、その他のレベル 1/レベル 2 ワークロードに適しています。 ストレージは、作成されたボリュームおよびボリューム スナップショットごとにオンデマンドでプロビジョニングされます。 複数のクラスターが 1 つの SAN に同時にアクセスできますが、永続ボリュームには一度に 1 つのコンシューマーのみがアタッチできます。
Azure ディスク: Azure ディスクは、MySQL、MongoDB、PostgreSQL などのデータベースに適しています。 ストレージは、ターゲット コンテナーのストレージ プール サイズと最大ボリューム サイズに従ってプロビジョニングされます。
エフェメラル ディスク: このオプションは、AKS ノード上のローカル NVMe または一時 SSD ドライブを使用し、(ミリ秒未満のわずかな待機時間であっても) 非常に待機時間の影響を受けやすいため、データ持続性の要件がないアプリケーションや、Cassandra などの組み込みデータ レプリケーション サポートを備えたアプリケーションに最適です。 AKS は、AKS ノード上の使用可能なエフェメラル ストレージを検出し、ボリューム デプロイ用のドライブを取得します。
VM の種類
Azure Container Storage を使用するには、少なくとも 3 つの Linux VM のノード プールが必要です。 各 VM には、少なくとも 4 つの仮想 CPU (vCPU) が必要です。 Azure Container Storage は、拡張機能がデプロイされるすべての VM で I/O 処理に 1 つのコアを使用します。
Azure Container Storage で Azure Elastic SAN または Azure Disks を使用する場合は、クラスター ノードに対して standard_d4s_v5 などの汎用 VM の種類を選択する必要があります。
エフェメラル ディスクを使用する場合は、standard_l8s_v3 などの、ストレージ最適化 VM の種類を選択します。
重要
Azure Premium Storage をサポートする VM の種類を選ぶ必要があります。
AKS クラスターの作成
次のコマンドを実行して、Linux ベースの AKS クラスターを作成し、システム割り当てマネージド ID を有効にします。 既にある AKS クラスターを使用する場合は、このステップをスキップできます。
<resource-group>
は作成したリソース グループの名前に、<cluster-name>
は作成するクラスターの名前に、<vm-type>
は前の手順で選択した VM の種類に置き換えます。 この例では、3 つのノードがあるクラスターを作成します。 より大きなクラスターが必要な場合は、--node-count
を大きくします。
az aks create -g <resource-group> -n <cluster-name> --node-count 3 -s <vm-type> --generate-ssh-keys
デプロイが完了するまで数分かかります。
注意
AKS クラスターを作成すると、AKS リソースを保存するための 2 つ目のリソース グループが自動的に作成されます。 この 2 番目のリソース グループは、名前付け規則 MC_YourResourceGroup_YourAKSClusterName_Region
に従います。 詳細については、「AKS と一緒にリソース グループが 2 つ作成されるのはなぜでしょうか?」を参照してください。
クラスターに接続する
クラスターに接続するには、Kubernetes コマンド ライン クライアント kubectl
を使用します。 Azure Cloud Shell を使用している場合は既にインストールされています。または、az aks install-cli
コマンドを実行してローカルにインストールできます。
az aks get-credentials
コマンドを使用して、クラスターに接続するようにkubectl
を構成します。 次のコマンドで、以下を行います。- 資格情報をダウンロードし、それを使用するように Kubernetes CLI を構成します。
~/.kube/config
(Kubernetes 構成ファイルの既定の場所) を使用します。 --file 引数を使用して、Kubernetes 構成ファイルの別の場所を指定できます。
az aks get-credentials --resource-group <resource-group> --name <cluster-name>
kubectl get
コマンドを使用して、ご利用のクラスターへの接続を確認します。 このコマンドでは、クラスター ノードの一覧が返されます。kubectl get nodes
次の出力例は、クラスター内のノードを示しています。 すべてのノードの状態が [準備完了] と表示されていることを確認します。
NAME STATUS ROLES AGE VERSION aks-nodepool1-34832848-vmss000000 Ready agent 80m v1.25.6 aks-nodepool1-34832848-vmss000001 Ready agent 80m v1.25.6 aks-nodepool1-34832848-vmss000002 Ready agent 80m v1.25.6
ノード プールの名前を書き留めます。 この例では、nodepool1 です。
ノード プールにラベルを付ける
次に、ノード プールのラベルを更新して、ノード プールを Azure Container Storage 用の正しい IO エンジンに関連付ける必要があります。
重要
Azure portal を使用して AKS クラスターを作成した場合: クラスター内にユーザー ノード プールとシステム/エージェント ノード プールを設置する可能性が大きいと考えられます。 Azure Container Storage をインストールする前に、このセクションの説明に従ってユーザー ノード プールのラベルを更新する必要があります。 ただし、クラスターがシステム ノード プールのみで構成されている場合は (Azure portal で作成したテスト/開発クラスターはこれに該当します)、まず新しいユーザー ノード プールを追加し、その後にラベルを付ける必要があります。 これは、Azure portal で AKS クラスターを作成する際に、エージェント/システム ノード プールに CriticalAddOnsOnly
テイントが付加され、システム ノード プールへの Azure Container Storage のインストールが抑止されるためです。 Azure CLI を使用して AKS クラスターを作成する場合には、このテイントは追加されません。
ノード プールのラベルを変更するには、次のコマンドを実行します。 ただし、<resource-group>
と <cluster-name>
は実際の値に置き換え、<nodepool-name>
はノード プールの名前に置き換えてください。
az aks nodepool update --resource-group <resource-group> --cluster-name <cluster-name> --name <nodepool-name> --labels acstor.azure.com/io-engine=acstor
ノード プールに正しいラベルが付けられていることを確認するには、Azure portal にサインインし、AKS クラスターに移動します。 [設定]>[ノード プール] に移動し、ノード プールを選択して、[テイントとラベル] に Labels: acstor.azure.com/io-engine:acstor
と表示されていることを確認します。
共同作成者ロールを AKS マネージド ID に割り当てる
Azure Container Service は AKS とは別のサービスであるため、Azure Container Storage がクラスターのストレージをプロビジョニングできるようにアクセス許可を付与する必要があります。 具体的には、[共同作成者] の Azure RBAC 組み込みロールを AKS マネージド ID に割り当てる必要があります。 これを行うには、Azure portal または Azure CLI を使用します。 これを行うには、Azure サブスクリプションの [所有者] ロールが必要です。 十分なアクセス許可がない場合は、管理者にこれらの手順を実行するよう依頼してください。
Azure portal にサインインし、Kubernetes サービスを検索して選択します。
AKS クラスターを見つけて選択します。 左側のナビゲーションから [設定]>[プロパティ] を選択します。
[インフラストラクチャ リソース グループ] に、クラスターの作成時に AKS によって作成されたリソース グループへのリンクが表示されます。 それを選択します。
左ペインから [アクセス制御 (IAM)] を選択します。
[追加] > [ロールの割り当ての追加] の順に選択します。
[割り当ての種類] で、[特権管理者ロール] を選び、それから [共同作成者]、それから [次へ] を選びます。 サブスクリプションに [所有者] ロールがない場合は、[共同作成者] ロールを追加できません。
[アクセスの割り当て先] で [マネージド ID] を選択します。
[メンバー] で、[+ メンバーの選択] をクリックします。 [マネージド ID の選択] メニューが表示されます。
[マネージド ID] で、[ユーザー割り当てマネージド ID] を選択します。
[選択] で、クラスター名に
-agentpool
が追加されたマネージド ID を探して選択します。[選択]、それから [確認と割り当て] をクリックします。
Azure Container Storage のインストール
初回インストールでは、Azure Arc CLI コマンドを使用して新しい拡張機能をダウンロードします。 <cluster-name>
と <resource-group>
を独自の値に置き換えます。 <extension-name>
の値は何でもかまいません。これは、インストールする拡張機能の単なるラベルです。
インストール中に、k8s-extension
をインストールするように求められる場合があります。 Y を選択します。
az k8s-extension create --cluster-type managedClusters --cluster-name <cluster-name> --resource-group <resource-group> --name <extension-name> --extension-type microsoft.azurecontainerstorage --scope cluster --release-train stable --release-namespace acstor
インストールが完了するまでに 10 ~ 15 分かかります。 インストールが正しく完了したかどうかを確認するには、次のコマンドを実行し、provisioningState
に [成功] と表示されていることを確認します。
az k8s-extension list --cluster-name <cluster-name> --resource-group <resource-group> --cluster-type managedClusters
これで、Azure Container Storage が正常にインストールされました。 Kubernetes ワークロードに使用できる新しいストレージ クラスが作成されました。
次のステップ
ストレージ プールと永続ボリューム要求を作成し、ポッドをデプロイして永続ボリュームをアタッチできるようになりました。 操作方法に関する適切な記事の手順に従います。