Azure Container Storage では、ゾーン冗長ストレージ (ZRS) またはローカル冗長ストレージ (LRS) を使用して、ステートフル アプリケーションの可用性を向上させることができます。 回復性とパフォーマンスのニーズに基づいて、3 つの可用性ゾーン間で同期レプリケーションを行う場合は、明示的なゾーン配置を使用する LRS または ZRS を選択します。
冗長性モデルを選択する
ローカル冗長ストレージ (LRS):LRS を使用すると、Azure は各 Elastic SAN の 3 つのコピーを 1 つのデータセンターに格納します。 この冗長性により、障害が発生したディスクなどのハードウェア障害から保護されます。 そのデータセンターで障害が発生した場合、すべてのレプリカが失われたり使用できなくなったりする可能性があります。
ゾーン冗長ストレージ (ZRS): ZRS を使用すると、Azure は、同じリージョン内の 3 つの異なる可用性ゾーンにわたって、各 Elastic SAN の 3 つのコピーを格納します。 書き込みは同期的です。 書き込みが完了するのは、3 つのレプリカがすべて更新された後だけです。
前提条件
Azure サブスクリプションをお持ちでない場合は、開始する前に 無料アカウント を作成してください。
この記事では、Azure CLI バージョン v2.83.0 以降が必要です。 詳細については、Azure CLIのインストール方法に関するページを参照してください。 問題が発生した場合は、
aks-previewなどの拡張機能を無効にします。 必要に応じて拡張機能をインストールまたは更新します。az extension add --upgrade --name k8s-extension-
az extension add --upgrade --name elastic-san(Elastic SAN のみ)
Kubernetes コマンド ライン クライアント (
kubectl) が必要です。 Azure Cloud Shell を使用している場合は、既にインストールされています。az aks install-cliコマンドを実行して、ローカルにインストールできます。ターゲット リージョンが Azure Container Storage リージョンでサポート対象になっているかどうかを確認します。
サブスクリプションで初めて Elastic SAN を使用する場合は、次の 1 回限りの登録コマンドを実行します。
az provider register --namespace Microsoft.ElasticSanリージョンで ZRS が新しく有効になっている場合は、Azure Container Storage で SAN ターゲットをデプロイできるように、サブスクリプション レベルの機能フラグを登録することが必要になる場合があります。
az feature register \ --namespace Microsoft.ElasticSan \ --name EnableElasticSANTargetDeployment選択した冗長性オプションがリージョンでサポートされていることを確認します。 現在の Elastic SAN リージョンの可用性を参照してください。
ローカル冗長ストレージを使用して StorageClass を作成する
ゾーンを指定せずに LRS SKU を使用する
リージョンがゾーンをサポートしていて、StorageClass でゾーンを指定しない場合、Azure Container Storage は既定でゾーン 1 になります。
storageclass.yamlなどの YAML マニフェスト ファイルを作成し、次の仕様を使用します。
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: esan-lrs-default
provisioner: san.csi.azure.com
parameters:
skuName: Premium_LRS
reclaimPolicy: Delete
allowVolumeExpansion: true
volumeBindingMode: WaitForFirstConsumer
LRS SKU を使用してゾーンを指定する
可用性ゾーンをサポートするリージョンで LRS Elastic SAN を作成するときは、1 つのゾーンを使用します。 ゾーンのないリージョンでは、検証エラーを回避するために、 zones パラメーターを省略します。
ゾーン固定を使用する LRS の場合、スケジューラはポッドを指定されたゾーン内のノードに配置し、永続ボリューム (PV) は対応するゾーンの SAN にバインドします。 LRS ボリュームには任意のゾーンからアクセスできるため、Azure Container Storage ではゾーン間の添付ファイルは制限されません。
allowedTopologiesセクションでは、PV が LRS SAN と同じゾーン内のノードにバインドされていることを確認します。
storageclass.yamlなどの YAML マニフェスト ファイルを作成し、次の仕様を使用します。
# LRS with a zone (2)
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: esan-lrs-zone2
provisioner: san.csi.azure.com
parameters:
skuName: Premium_LRS
zones: "2"
reclaimPolicy: Delete
allowVolumeExpansion: true
volumeBindingMode: WaitForFirstConsumer
# Optional:
allowedTopologies:
- matchLabelExpressions:
- key: topology.kubernetes.io/zone
values:
- canadacentral-2
ゾーン冗長ストレージを使用して StorageClass を作成する
Azure Container Storage は既定で 3 つのゾーンすべてに設定されるため、ゾーンを指定する必要はありません。
zonesフィールドを設定した場合は、3 つのゾーンすべてを "1,2,3" として一覧表示します。
storageclass.yamlなどの YAML マニフェスト ファイルを作成し、次の仕様を使用します。
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: esan-zrs-zones
provisioner: san.csi.azure.com
parameters:
skuName: Premium_ZRS
zones: "1,2,3" # optional
reclaimPolicy: Delete
allowVolumeExpansion: true
volumeBindingMode: WaitForFirstConsumer
StorageClass を作成する
kubectl apply -f storageclass.yaml
StorageClass が作成されていることを確認します。
kubectl get storageclass <storage-class-name>
次のような出力が表示されます。
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
esan-zrs-zones san.csi.azure.com Delete WaitForFirstConsumer true 10s
永続ボリューム要求の作成
acstor-pvc.yamlなどの YAML マニフェスト ファイルを作成します。 PVC name 値には任意の値を指定できます。 前の手順で作成した StorageClass 名を使用します。
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: managedpvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: esan-zrs-zones # or esan-lrs-zone2, esan-lrs-default
マニフェストを適用して PVC を作成します。
kubectl apply -f acstor-pvc.yaml
次のような出力が表示されます。
persistentvolumeclaim/managedpvc created
ポッドを配置して永続ボリュームを接続する
acstor-pod.yamlなどの YAML マニフェスト ファイルを作成します。
apiVersion: v1
kind: Pod
metadata:
name: esan-app
spec:
containers:
- name: app
image: mcr.microsoft.com/oss/nginx/nginx:1.25.2
volumeMounts:
- name: data
mountPath: /data
volumes:
- name: data
persistentVolumeClaim:
claimName: managedpvc
マニフェストを適用してポッドを作成します。
kubectl apply -f acstor-pod.yaml
次のような出力が表示されます。
pod/esan-app created
PV と StorageClass を確認します。
kubectl get pv
kubectl describe sc esan-zrs-zones
kubectl describe sc esan-lrs-zone2
Elastic SAN リージョンの一覧を使用して、ボリュームのリージョンサポートと冗長性モデルを確認します。