すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:リージョン ESSD を使用したクロスゾーンディザスタリカバリ

最終更新日:Sep 27, 2025

リージョン企業向け SSD (ESSD) は、同一リージョン内の複数のゾーンにまたがってデータを自動的かつ同期的に複製する新しいタイプの ESSD です。各ゾーンは、独立した電源、冷却、ネットワークを備えた物理的に隔離された場所です。リージョン ESSD を使用してステートフルアプリケーションをデプロイすることで、コードを変更することなく、単一ゾーンのアプリケーションをマルチゾーンのディザスタリカバリ機能を備えたアプリケーションにアップグレードできます。ノードまたはゾーン全体に障害が発生した場合、またはゾーン内のリソースが不足している場合、Kubernetes はアプリケーションのポッドを別のゾーンに自動的に再スケジュールできます。ポッドは同じストレージボリュームを再マウントできるため、複雑なデータ同期と検証の必要がなくなり、高可用性アーキテクチャが簡素化されます。

開始する前に

リージョン ESSD をよりよく理解するために、次のトピックを読むことをお勧めします:

  • リージョン ESSD の概要については、「ディスクの概要」をご参照ください。

  • サポートされているリージョンとその他の制限事項のリストについては、「制限事項」をご参照ください。

  • リージョン ESSD はディスク容量に基づいて課金され、Kubernetes ボリュームとして使用される場合は従量課金モデルのみをサポートします。詳細については、「Elastic Block Storage の課金」をご参照ください。

前提条件

手順

  1. クラスターにリージョン ESSD をサポートするノードがあることを確認します。

    kubectl get node -lnode.csi.alibabacloud.com/disktype.cloud_regional_disk_auto=available

    このコマンドは、クラスター内でリージョン ESSD をマウントできるすべてのノードを返します。クロスゾーン移行機能を検証するには、異なるゾーンに少なくとも 2 つのサポートされているノードが必要です。このトピックでは、例として cn-beijing-icn-beijing-l を使用します。

  2. StorageClass を作成します。

    1. 次の内容で sc-regional.yaml という名前のファイルを作成します。

      type パラメーターは cloud_regional_disk_auto に設定されています。

      apiVersion: storage.k8s.io/v1
      kind: StorageClass
      metadata:
        name: alibabacloud-disk-regional
      parameters:
        type: cloud_regional_disk_auto
      provisioner: diskplugin.csi.alibabacloud.com
      reclaimPolicy: Delete
      volumeBindingMode: WaitForFirstConsumer
      allowVolumeExpansion: true
    2. マニフェストを適用して StorageClass を作成します。

      kubectl apply -f sc-regional.yaml
  3. サンプルのステートフルアプリケーションをデプロイします。

    1. disk-test.yaml という名前のファイルを作成して、新しい StorageClass を使用する StatefulSet を定義します。

      apiVersion: apps/v1
      kind: StatefulSet
      metadata:
        name: disk-test
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: nginx
        template:
          metadata:
            labels:
              app: nginx
          spec:
            containers:
            - name: nginx
              image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
              ports:
              - containerPort: 80
              volumeMounts:
              - name: pvc-disk
                mountPath: /data
        volumeClaimTemplates:
        - metadata:
            name: pvc-disk
          spec:
            accessModes: [ "ReadWriteOnce" ]
            storageClassName: alibabacloud-disk-regional
            resources:
              requests:
                storage: 20Gi
    2. アプリケーションをデプロイします。これにより、必要なディスクの動的プロビジョニングがトリガーされます。

      kubectl apply -f disk-test.yaml
  4. アプリケーションが実行中であることを確認し、現在のゾーンを確認します。

    1. Persistent Volume Claim (PVC) とポッドのステータスを確認します。

      kubectl get pvc pvc-disk-disk-test-0
      kubectl get pod disk-test-0

      予想される出力:

      NAME                   STATUS   VOLUME                   CAPACITY   ACCESS MODES   STORAGECLASS                 VOLUMEATTRIBUTESCLASS   AGE
      pvc-disk-disk-test-0   Bound    d-2ze5xxxxxxxxxxxxxxxx   20Gi       RWO            alibabacloud-disk-regional   <unset>                 14m
      NAME          READY   STATUS    RESTARTS   AGE
      disk-test-0   1/1     Running   0          14m

      この出力は、リージョン ESSD が正常にリクエストされ、ポッドがディスクをマウントし、期待どおりに実行されていることを示しています。

    2. ポッドが現在実行されているノードとゾーンを特定します。

      kubectl get node $(kubectl get pod disk-test-0 -ojsonpath='{.spec.nodeName}') -Ltopology.kubernetes.io/zone

      予想される出力:

      NAME                       STATUS   ROLES    AGE     VERSION            ZONE
      cn-beijing.172.25.xxx.xx   Ready    <none>   6m32s   v1.32.1-aliyun.1   cn-beijing-i

      この出力は、ポッドが cn-beijing-i ゾーンにスケジュールされていることを示しています。

  5. ポッドの現在のゾーン内のすべてのノードに taint を追加してスケジュール不可にし、ゾーン障害をシミュレートします。次に、ポッドとそのディスクが別のゾーンで正常に再作成されることを確認します。

    警告

    この操作は、ターゲットゾーンで実行されているすべてのポッドに影響します。本番環境ではこの操作を実行しないでください。

    1. ポッドの現在のゾーン内のすべてのノードに taint を適用します。

      kubectl taint node -ltopology.kubernetes.io/zone=cn-beijing-i testing=regional:NoExecute
    2. Kubernetes Controller Manager (KCM) は、taint が適用されたノードからポッドを退去させ、別のゾーンに再スケジュールします。ポッドのステータスを監視し、新しいノードの場所を確認します。

      kubectl get pod disk-test-0
      kubectl get node $(kubectl get pod disk-test-0 -ojsonpath='{.spec.nodeName}') -Ltopology.kubernetes.io/zone

      予想される出力:

      NAME          READY   STATUS    RESTARTS   AGE
      disk-test-0   1/1     Running   0          20s
      NAME                       STATUS   ROLES    AGE   VERSION            ZONE
      cn-beijing.172.26.xxx.xx   Ready    <none>   32m   v1.32.1-aliyun.1   cn-beijing-l

      この出力は、ポッドが cn-beijing-l ゾーンの新しいノードに正常に再作成され、クロスゾーンフェールオーバーが成功したことを示しています。ディスク上のデータは新しいゾーンでもアクセス可能なままです。

  6. taint を削除し、テストリソースを削除します。

    kubectl taint node -ltopology.kubernetes.io/zone=cn-beijing-i testing-
    kubectl delete sts disk-test
    kubectl delete pvc pvc-disk-disk-test-0