Enterprise SSD (ESSD) regional adalah jenis baru ESSD yang secara otomatis dan sinkron mereplikasi data di beberapa zona dalam wilayah yang sama. Setiap zona merupakan lokasi fisik terisolasi dengan daya, pendinginan, dan jaringan independen. Dengan menerapkan aplikasi berstatus menggunakan ESSD regional, Anda dapat meningkatkan aplikasi single-zona menjadi aplikasi dengan kemampuan pemulihan bencana multi-zona tanpa perubahan kode. Jika sebuah node atau seluruh zona gagal, atau jika sumber daya di zona tidak mencukupi, Kubernetes dapat secara otomatis menjadwalkan ulang pod aplikasi ke zona lain. Pod tersebut kemudian dapat memasang kembali volume penyimpanan yang sama, menghilangkan kebutuhan akan sinkronisasi data yang kompleks dan validasi, serta menyederhanakan arsitektur high-availability Anda.
Sebelum Anda mulai
Untuk lebih memahami ESSD regional, kami menyarankan membaca topik-topik berikut:
Untuk pengenalan tentang ESSD regional, lihat Ikhtisar Disk.
Untuk daftar wilayah yang didukung dan batasan lainnya, lihat Batasan.
ESSD regional ditagih berdasarkan kapasitas disk dan hanya mendukung model penagihan bayar sesuai penggunaan saat digunakan sebagai volume Kubernetes. Untuk detailnya, lihat Penagihan Elastic Block Storage.
Prasyarat
Anda memiliki Kluster ACK yang dikelola dengan versi Kubernetes 1.26 atau lebih baru.
Komponen csi-plugin dan csi-provisioner di kluster Anda adalah versi 1.33.4 atau lebih baru.
Prosedur
Pastikan kluster Anda memiliki node yang mendukung ESSD regional.
kubectl get node -lnode.csi.alibabacloud.com/disktype.cloud_regional_disk_auto=availablePerintah ini mengembalikan semua node di kluster yang dapat memasang ESSD regional. Untuk memverifikasi kemampuan migrasi lintas zona, Anda harus memiliki setidaknya dua node yang didukung di zona berbeda. Topik ini menggunakan
cn-beijing-idancn-beijing-lsebagai contoh.Buat StorageClass.
Buat file bernama
sc-regional.yamldengan konten berikut.Parameter
typedisetel kecloud_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: trueTerapkan manifes untuk membuat StorageClass.
kubectl apply -f sc-regional.yaml
Sebarkan aplikasi berstatus sampel.
Buat file bernama
disk-test.yamluntuk mendefinisikan StatefulSet yang menggunakan StorageClass baru.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: 20GiSebarkan aplikasi. Ini akan memicu penyediaan dinamis disk yang diperlukan.
kubectl apply -f disk-test.yaml
Pastikan aplikasi sedang berjalan dan periksa zona saat ini.
Periksa status Persistent Volume Claim (PVC) dan pod.
kubectl get pvc pvc-disk-disk-test-0 kubectl get pod disk-test-0Output yang diharapkan:
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 14mOutput menunjukkan bahwa ESSD regional berhasil diminta, pod telah memasang disk, dan berjalan seperti yang diharapkan.
Identifikasi node dan zona tempat pod saat ini berjalan.
kubectl get node $(kubectl get pod disk-test-0 -ojsonpath='{.spec.nodeName}') -Ltopology.kubernetes.io/zoneOutput yang diharapkan:
NAME STATUS ROLES AGE VERSION ZONE cn-beijing.172.25.xxx.xx Ready <none> 6m32s v1.32.1-aliyun.1 cn-beijing-iOutput menunjukkan bahwa pod dijadwalkan ke zona
cn-beijing-i.
Tambahkan taint ke semua node di zona saat ini dari pod untuk membuatnya tidak dapat dijadwalkan, mensimulasikan kegagalan zona. Kemudian, verifikasi bahwa pod dan disk-nya berhasil dibuat ulang di zona lain.
PeringatanOperasi ini akan memengaruhi semua pod yang berjalan di zona target. Jangan lakukan ini di lingkungan produksi.
Taint semua node di zona saat ini dari pod.
kubectl taint node -ltopology.kubernetes.io/zone=cn-beijing-i testing=regional:NoExecuteKubernetes Controller Manager (KCM) akan mengeluarkan pod dari node yang ditaint dan menjadwalkannya ulang di zona lain. Pantau status pod dan periksa lokasi node barunya.
kubectl get pod disk-test-0 kubectl get node $(kubectl get pod disk-test-0 -ojsonpath='{.spec.nodeName}') -Ltopology.kubernetes.io/zoneOutput yang diharapkan:
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-lOutput menunjukkan bahwa pod telah berhasil dibuat ulang ke node baru di zona
cn-beijing-l, menunjukkan failover lintas zona yang sukses. Data pada disk tetap dapat diakses di zona baru.
Hapus taint dan hapus sumber daya uji.
kubectl taint node -ltopology.kubernetes.io/zone=cn-beijing-i testing- kubectl delete sts disk-test kubectl delete pvc pvc-disk-disk-test-0