次の方法で共有


Azure Container Storage でマルチゾーン ストレージの冗長性を有効にする

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 リージョンの一覧を使用して、ボリュームのリージョンサポートと冗長性モデルを確認します。

関連項目