Azure Elastic SAN で Azure Container Storage (プレビュー) を使用する
Azure Container Storage は、コンテナー用にネイティブに構築されたクラウドベースのボリューム管理、デプロイ、オーケストレーション サービスです。 この記事では、Kubernetes ワークロードのバックエンド ストレージとして Azure Elastic SAN を使用するように Azure Container Storage を構成する方法について説明します。 最後に、Elastic SAN をストレージとして使用するポッドが得られます。
前提条件
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
コマンドを実行してローカルにインストールできます。
Azure Container Storage をまだインストールしていない場合は、Azure Container Storage のインストールについての手順を実行します。
サブスクリプションに Azure ロールベースのアクセス制御 (Azure RBAC) 所有者ロールがあることを確認します。 Azure Container Storage が Elastic SAN の API と正常に通信するには、所有者ロールが付与する特別なアクセス許可が必要です。
Note
Azure Elastic SAN で Azure Container Storage を使うには、汎用 VM を少なくとも 3 つ (クラスター ノード用に standard_d4s_v5 など) 用意し、それぞれに仮想 CPU (vCPU) を 4 つ以上を割り当てたノード プールを AKS クラスターに用意する必要があります。
制限事項
Azure Container Storage を使用して Elastic SAN をデプロイおよび調整する場合、次の機能は現在サポートされていません。
- ボリューム スナップショット
- ストレージ プールの拡張
リージョン別の提供状況
Azure Container Storage は、次の Azure リージョンのサブセットでのみ使用できます。
- (アフリカ) 南アフリカ北部
- (アジア太平洋) オーストラリア東部
- (アジア太平洋) 東アジア
- (アジア太平洋) 東日本
- (アジア太平洋) 韓国中部
- (アジア太平洋) 東南アジア
- (アジア太平洋) インド中部
- (ヨーロッパ) フランス中部
- (ヨーロッパ) 北ヨーロッパ
- (ヨーロッパ) 西ヨーロッパ
- (ヨーロッパ) 英国南部
- (ヨーロッパ) スウェーデン中部
- (ヨーロッパ) スイス北部
- (中東) アラブ首長国連邦北部
- (北米) 米国東部
- (北米)米国東部 2
- (北米) 米国西部
- (北米)米国西部 2
- (北米) 米国西部 3
- (北米) 米国中部
- (北米) 米国中北部
- (北米) 米国中南部
- (北米) 米国中西部
- (北米) カナダ中部
- (北米) カナダ東部
- (南アメリカ) ブラジル南部
記憶域プールを作成する
まず、YAML マニフェスト ファイルで定義することによって、Kubernetes クラスターのストレージの論理グループであるストレージ プールを作成します。
az aks create
または az aks update
コマンドを使って Azure Container Storage を有効にした場合は、記憶域プールが既に存在している可能性があります。 kubectl get sp -n acstor
を使って記憶域プールの一覧を取得します。 使いたい記憶域プールが既に使用可能な場合は、このセクションをスキップして、「使用可能なストレージ クラスを表示する」に進むことができます。
Azure Elastic SAN を使用してストレージ プールを作成するには、次の手順に従います。
任意のテキスト エディターを使用して、
code acstor-storagepool.yaml
などの YAML マニフェスト ファイルを作成します。次のコードを貼り付けます。 ストレージ プールの name の値は何でもかまいません。 Gi または Ti で必要なストレージ容量を反映するようストレージを調整し、ファイルを保存します。 Azure Elastic SAN では現在、ストレージ プールのサイズ変更はサポートされていません。
apiVersion: containerstorage.azure.com/v1 kind: StoragePool metadata: name: managed namespace: acstor spec: poolType: elasticSan: {} resources: requests: {"storage": 1Ti}
YAML マニフェスト ファイルを適用してストレージ プールを作成します。
kubectl apply -f acstor-storagepool.yaml
ストレージ プールの作成が完了すると、次のようなメッセージが表示されます。
storagepool.containerstorage.azure.com/managed created
このコマンドを実行して、ストレージ プールの状態を確認することもできます。
<storage-pool-name>
はストレージ プールの name の値に置き換えます。 この例では、値は managed.になります。kubectl describe sp <storage-pool-name> -n acstor
ストレージ プールが作成されると、Azure Container Storage により、名前付け規則 acstor-<storage-pool-name>
を使用してストレージ クラスが自動的に作成されます。 また、Azure Elastic SAN リソースも作成されます。
Azure Elastic SAN サブスクリプションで AKS マネージド ID に共同作成者ロールを割り当てる
次に、Azure Elastic SAN サブスクリプションで AKS マネージド ID に共同作成者の Azure RBAC 組み込みロールを割り当てる必要があります。 これを行うには、Azure サブスクリプションの [所有者] ロールが必要です。 十分なアクセス許可がない場合は、管理者にこれらの手順を実行するよう依頼してください。
Azure portal にサインインします。
[サブスクリプション] を選択し、Azure Container Storage が自動的に作成した Azure Elastic SAN リソースに関連付けられているサブスクリプションを見つけて選択します。 これは、Azure Container Storage がインストールされている AKS クラスターと同じサブスクリプションである可能性があります。 それを確認するには、AKS によって作成されたリソース グループで Elastic SAN リソースを見つけます (
MC_YourResourceGroup_YourAKSClusterName_Region
)。左ペインから [アクセス制御 (IAM)] を選択します。
[追加] > [ロールの割り当ての追加] の順に選択します。
[割り当ての種類] で、[特権管理者ロール] を選び、それから [共同作成者]、それから [次へ] を選びます。 サブスクリプションに [所有者] ロールがない場合は、[共同作成者] ロールを追加できません。
[アクセスの割り当て先] で [マネージド ID] を選択します。
[メンバー] で、[+ メンバーの選択] をクリックします。 [マネージド ID の選択] メニューが表示されます。
[マネージド ID] で、[ユーザー割り当てマネージド ID] を選択します。
[選択] で、クラスター名に
-agentpool
が追加されたマネージド ID を探して選択します。[選択]、それから [確認と割り当て] をクリックします。
使用可能なストレージ クラスを表示する
ストレージ プールを使用する準備ができたら、ストレージ クラスを選択して、永続ボリューム要求の作成時と永続ボリュームのデプロイ時にストレージが動的に作成される方式を定義する必要があります。
kubectl get sc
を実行して、使用可能なストレージ クラスを表示します。 acstor-<storage-pool-name>
というストレージ クラスがあることを確認します。
重要
internal が付いているストレージ クラスは使用しないでください。 これは、Azure Container Storage の動作に必要な内部ストレージ クラスです。
永続ボリューム要求の作成
永続ボリューム要求 (PVC) を使用して、ストレージ クラスに基づいてストレージを自動的にプロビジョニングします。 新しいストレージ クラスを使用して PVC を作成するには、次の手順に従います。
任意のテキスト エディターを使用して、
code acstor-pvc.yaml
などの YAML マニフェスト ファイルを作成します。次のコードを貼り付けて、ファイルを保存します。 PVC
name
の値はどのような値にもすることができます。apiVersion: v1 kind: PersistentVolumeClaim metadata: name: managedpvc spec: accessModes: - ReadWriteOnce storageClassName: acstor-managed # replace with the name of your storage class if different resources: requests: storage: 100Gi
YAML マニフェスト ファイルを適用して PVC を作成します。
kubectl apply -f acstor-pvc.yaml
次のような出力が表示されます。
persistentvolumeclaim/managedpvc created
次のコマンドを実行して、PVC の状態を確認できます。
kubectl describe pvc managedpvc
PVC が作成されると、ポッドで使用できるようになります。
ポッドをデプロイして永続ボリュームをアタッチする
Fio (フレキシブル I/O テスター) を使用してベンチマークおよびワークロード シミュレーション用にポッドを作成し、永続ボリュームのマウント パスを指定します。 claimName には、永続ボリューム要求の作成時に使用した name の値を使用します。
任意のテキスト エディターを使用して、
code acstor-pod.yaml
などの YAML マニフェスト ファイルを作成します。次のコードを貼り付けて、ファイルを保存します。
kind: Pod apiVersion: v1 metadata: name: fiopod spec: nodeSelector: acstor.azure.com/io-engine: acstor volumes: - name: managedpv persistentVolumeClaim: claimName: managedpvc containers: - name: fio image: nixery.dev/shell/fio args: - sleep - "1000000" volumeMounts: - mountPath: "/volume" name: managedpv
YAML マニフェスト ファイルを適用してポッドをデプロイします。
kubectl apply -f acstor-pod.yaml
次のような出力が表示されます。
pod/fiopod created
ポッドが実行されていること、および永続ボリューム要求がポッドに正常にバインドされていることを確認します。
kubectl describe pod fiopod kubectl describe pvc managedpvc
fio テストをチェックして、その現在の状態を確認します。
kubectl exec -it fiopod -- fio --name=benchtest --size=800m --filename=/volume/test --direct=1 --rw=randrw --ioengine=libaio --bs=4k --iodepth=16 --numjobs=8 --time_based --runtime=60
Elastic SAN をストレージとして使用するポッドをデプロイし、Kubernetes ワークロードに使用できるようになりました。
永続ボリュームをデタッチして再アタッチする
永続ボリュームをデタッチするには、永続ボリュームがアタッチされているポッドを削除します。 <pod-name>
はポッドの名前 (fiopod など) に置き換えます。
kubectl delete pods <pod-name>
永続ボリュームを再アタッチするには、「ポッドをデプロイして永続ボリュームをアタッチする」の説明に従って、YAML マニフェスト ファイル内の永続ボリューム要求名を参照するだけです。
永続ボリューム要求がバインドされている永続ボリュームを確認するには、kubectl get pvc <persistent-volume-claim-name>
を実行します。
ストレージ プールを削除する
ストレージ プールを削除する場合は、次のコマンドを実行します。 <storage-pool-name>
はストレージ プール名に置き換えます。
kubectl delete sp -n acstor <storage-pool-name>