Azure Container Storage は、コンテナー用にネイティブに構築されたクラウドベースのボリューム管理、デプロイ、オーケストレーション サービスです。 Azure Elastic SAN は、SAN のデプロイ、スケーリング、管理、構成を簡略化する完全に統合されたソリューションであり、高可用性などの組み込みのクラウド機能も提供します。
プレビュー機能として、Azure コンテナー ストレージで Azure Elastic SAN を使用することを構成できます。 この記事では、その構成を行う方法について説明します。 この記事の最後で、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 Kubernetes Service での Azure Container Storage の使用に関する記事の手順に従ってください。
ターゲット リージョンが Azure Container Storage リージョンでサポート対象になっているかどうかを確認します。
Azure Container Storage 所有者ロールまたは Azure Container Storage 共同作成者ロールのいずれかがあることを確認します。 Azure Container Storage 共同作成者ロールは、Azure Arc 拡張機能アクションの実行とリソースへの書き込みと削除に必要なアクセス許可を付与します。 Azure Container Storage 所有者ロールにより、同じアクセス許可が付与され、クラスターの外部で Elastic SAN ボリュームを管理できます。 この変更を行うには、Azure portal のサブスクリプション ページに移動します。 [アクセス制御 (IAM)] > [ロール割り当ての追加] を選択し、[ジョブ関数ロール] タブで「Azure Container Storage 所有者」または「Azure Container Storage 共同作成者」を検索します。[表示] > [割り当て] > [追加] の順に選択し、アカウントを追加します。
Azure Elastic SAN (プレビュー) を含む Azure コンテナー ストレージを使うには、AKS クラスターに、それぞれが 4 つ以上の仮想 CPU (vCPU) を備えたクラスター ノード用の汎用 VM (standard_d4s_v5 など) を少なくとも 3 つ含むノード プールが必要です。
制限事項
Azure Container Storage を使用して Elastic SAN をデプロイおよび調整する場合、次の機能は現在サポートされていません。
- ボリューム スナップショット
- ストレージ プールの拡張
リージョン別の提供状況
Azure Container Storage は、次の Azure リージョンのサブセットでのみ使用できます。
- (アフリカ) 南アフリカ北部
- (アジア太平洋) オーストラリア東部
- (アジア太平洋) 東アジア
- (アジア太平洋) 東日本
- (アジア太平洋) 韓国中部
- (アジア太平洋) 東南アジア
- (アジア太平洋) インド中部
- (ヨーロッパ) フランス中部
- (ヨーロッパ) ドイツ中西部
- (ヨーロッパ) 北ヨーロッパ
- (ヨーロッパ) 西ヨーロッパ
- (ヨーロッパ) 英国南部
- (ヨーロッパ) スウェーデン中部
- (ヨーロッパ) スイス北部
- (中東) アラブ首長国連邦北部
- (北米) 米国東部
- (北米)米国東部 2
- (北米) 米国西部
- (北米)米国西部 2
- (北米) 米国西部 3
- (北米) 米国中部
- (北米) 米国中北部
- (北米) 米国中南部
- (北米) 米国中西部
- (北米) カナダ中部
- (北米) カナダ東部
- (南アメリカ) ブラジル南部
永続ボリュームを作成してアタッチする
次の手順に従って永続ボリュームを作成してアタッチします。
1.ストレージ プールを作成する
まず、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>
をストレージプールの名前の値に置き換えてください。 この例では、値は managed.になります。kubectl describe sp <storage-pool-name> -n acstor
ストレージ プールが作成されると、Azure Container Storage により、名前付け規則 acstor-<storage-pool-name>
を使用してストレージ クラスが自動的に作成されます。 また、Azure Elastic SAN リソースも作成されます。
2.使用可能なストレージ クラスを表示する
ストレージ プールを使用する準備ができたら、ストレージ クラスを選択して、永続ボリューム要求の作成時と永続ボリュームのデプロイ時にストレージが動的に作成される方式を定義する必要があります。
kubectl get sc
を実行して、使用可能なストレージ クラスを表示します。
acstor-<storage-pool-name>
というストレージ クラスがあることを確認します。
重要
internal が付いているストレージ クラスは使用しないでください。 これは、Azure Container Storage の動作に必要な内部ストレージ クラスです。
3.永続ボリューム要求の作成
永続ボリューム要求 (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 が作成されると、ポッドで使用できるようになります。
4.ポッドをデプロイして永続ボリュームをアタッチする
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>