ESSD同城冗餘雲端硬碟是一種全新的ESSD雲端硬碟,寫入該雲端硬碟的資料會自動存放在多個可用性區域,可用性區域的IDC、機櫃、電源等均實現物理隔離。基於ESSD同城冗餘部署應用,有狀態的應用可以零改造成本,從單可用性區域應用升級為具有跨可用性區域級容災能力的應用,當節點或可用性區域發生故障,或單可用性區域資源不足時,均可將該容器遷移到其他可用性區域,無需進行複雜的資料同步和資料校正,幫您實現更加簡化的資料高可用架構。
閱讀前提示
為了使您更好地瞭解ESSD同城冗餘雲端硬碟,建議您在閱讀本文之前,瞭解以下內容:
ESSD同城冗餘雲端硬碟簡介,請參見雲端硬碟簡介。
ESSD同城冗餘雲端硬碟僅支援部分地區。更多使用限制,請參見使用限制。
ESSD同城冗餘雲端硬碟收取雲端硬碟容量費,在容器中掛載使用時,僅支援隨用隨付。具體計費規則請參見Block Storage計費。
前提條件
已建立ACK託管叢集,且叢集為1.26及以上版本。叢集中csi-plugin和csi-provisioner組件版本為1.33.4及以上,請參見csi-plugin、csi-provisioner。
使用方法
確認叢集中有支援ESSD同城冗餘雲端硬碟的節點。
kubectl get node -lnode.csi.alibabacloud.com/disktype.cloud_regional_disk_auto=available該命令將返回叢集中所有支援掛載同城冗餘雲端硬碟的節點。如需驗證跨可用性區域遷移能力,則至少需要準備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檔案。
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
確認應用正常運行,並確認當前可用性區域。
執行以下命令查看PVC和Pod狀態:
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可見同城冗餘雲端硬碟已申請成功,Pod已掛載雲端硬碟並正常運行。
執行以下命令查看它調度到的Node:
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說明該Pod調度到了cn-beijing-i可用性區域。
為節點添加汙點,類比可用性區域故障。觀察Pod可以帶著雲端硬碟在另一可用性區域成功拉起。
警告這會影響該可用性區域中所有正在啟動並執行Pod,請勿在生產環境操作。
執行以下命令,為Pod當前啟動並執行可用性區域的所有節點添加汙點:
kubectl taint node -ltopology.kubernetes.io/zone=cn-beijing-i testing=regional:NoExecuteKCM將驅逐該可用性區域上的Pod,然後它會在其他可用性區域重建。執行以下命令以觀察Pod狀態和它調度到的新節點:
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可見該Pod已成功在cn-beijing-l可用性區域拉起。雲端硬碟中的資料也均可以在新可用性區域訪問。
執行以下命令,清理測試所使用的汙點和資源:
kubectl taint node -ltopology.kubernetes.io/zone=cn-beijing-i testing- kubectl delete sts disk-test kubectl delete pvc pvc-disk-disk-test-0