リージョン企業向け SSD (ESSD) は、同一リージョン内の複数のゾーンにまたがってデータを自動的かつ同期的に複製する新しいタイプの ESSD です。各ゾーンは、独立した電源、冷却、ネットワークを備えた物理的に隔離された場所です。リージョン ESSD を使用してステートフルアプリケーションをデプロイすることで、コードを変更することなく、単一ゾーンのアプリケーションをマルチゾーンのディザスタリカバリ機能を備えたアプリケーションにアップグレードできます。ノードまたはゾーン全体に障害が発生した場合、またはゾーン内のリソースが不足している場合、Kubernetes はアプリケーションのポッドを別のゾーンに自動的に再スケジュールできます。ポッドは同じストレージボリュームを再マウントできるため、複雑なデータ同期と検証の必要がなくなり、高可用性アーキテクチャが簡素化されます。
開始する前に
リージョン ESSD をよりよく理解するために、次のトピックを読むことをお勧めします:
リージョン ESSD の概要については、「ディスクの概要」をご参照ください。
サポートされているリージョンとその他の制限事項のリストについては、「制限事項」をご参照ください。
リージョン ESSD はディスク容量に基づいて課金され、Kubernetes ボリュームとして使用される場合は従量課金モデルのみをサポートします。詳細については、「Elastic Block Storage の課金」をご参照ください。
前提条件
ACK マネージドクラスターがあり、Kubernetes バージョン 1.26 以降を実行していること。
クラスター内の csi-plugin および csi-provisioner コンポーネントがバージョン 1.33.4 以降であること。
手順
クラスターにリージョン ESSD をサポートするノードがあることを確認します。
kubectl get node -lnode.csi.alibabacloud.com/disktype.cloud_regional_disk_auto=availableこのコマンドは、クラスター内でリージョン ESSD をマウントできるすべてのノードを返します。クロスゾーン移行機能を検証するには、異なるゾーンに少なくとも 2 つのサポートされているノードが必要です。このトピックでは、例として
cn-beijing-iとcn-beijing-lを使用します。StorageClass を作成します。
次の内容で
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マニフェストを適用して StorageClass を作成します。
kubectl apply -f sc-regional.yaml
サンプルのステートフルアプリケーションをデプロイします。
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アプリケーションをデプロイします。これにより、必要なディスクの動的プロビジョニングがトリガーされます。
kubectl apply -f disk-test.yaml
アプリケーションが実行中であることを確認し、現在のゾーンを確認します。
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 が正常にリクエストされ、ポッドがディスクをマウントし、期待どおりに実行されていることを示しています。
ポッドが現在実行されているノードとゾーンを特定します。
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ゾーンにスケジュールされていることを示しています。
ポッドの現在のゾーン内のすべてのノードに taint を追加してスケジュール不可にし、ゾーン障害をシミュレートします。次に、ポッドとそのディスクが別のゾーンで正常に再作成されることを確認します。
警告この操作は、ターゲットゾーンで実行されているすべてのポッドに影響します。本番環境ではこの操作を実行しないでください。
ポッドの現在のゾーン内のすべてのノードに taint を適用します。
kubectl taint node -ltopology.kubernetes.io/zone=cn-beijing-i testing=regional:NoExecuteKubernetes 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ゾーンの新しいノードに正常に再作成され、クロスゾーンフェールオーバーが成功したことを示しています。ディスク上のデータは新しいゾーンでもアクセス可能なままです。
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