All Products
Search
Document Center

Container Service for Kubernetes:Gunakan ESSD regional untuk pemulihan bencana lintas zona

Last Updated:Sep 27, 2025

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

Prosedur

  1. Pastikan kluster Anda memiliki node yang mendukung ESSD regional.

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

    Perintah 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-i dan cn-beijing-l sebagai contoh.

  2. Buat StorageClass.

    1. Buat file bernama sc-regional.yaml dengan konten berikut.

      Parameter type disetel ke 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. Terapkan manifes untuk membuat StorageClass.

      kubectl apply -f sc-regional.yaml
  3. Sebarkan aplikasi berstatus sampel.

    1. Buat file bernama disk-test.yaml untuk 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: 20Gi
    2. Sebarkan aplikasi. Ini akan memicu penyediaan dinamis disk yang diperlukan.

      kubectl apply -f disk-test.yaml
  4. Pastikan aplikasi sedang berjalan dan periksa zona saat ini.

    1. Periksa status Persistent Volume Claim (PVC) dan pod.

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

      Output 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          14m

      Output menunjukkan bahwa ESSD regional berhasil diminta, pod telah memasang disk, dan berjalan seperti yang diharapkan.

    2. Identifikasi node dan zona tempat pod saat ini berjalan.

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

      Output yang diharapkan:

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

      Output menunjukkan bahwa pod dijadwalkan ke zona cn-beijing-i.

  5. 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.

    Peringatan

    Operasi ini akan memengaruhi semua pod yang berjalan di zona target. Jangan lakukan ini di lingkungan produksi.

    1. Taint semua node di zona saat ini dari pod.

      kubectl taint node -ltopology.kubernetes.io/zone=cn-beijing-i testing=regional:NoExecute
    2. Kubernetes 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/zone

      Output 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-l

      Output 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.

  6. 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