All Products
Search
Document Center

Container Service for Kubernetes:Bangun sistem pemulihan bencana antarzona

Last Updated:Mar 26, 2026

Gerbang multi-kluster Application Load Balancer (ALB) pada Distributed Cloud Container Platform for Kubernetes (ACK One) memungkinkan Anda membangun sistem pemulihan bencana antarzona yang secara otomatis mengalihkan traffic antar kluster saat terjadi gangguan. Topik ini memandu Anda melalui penyebaran aplikasi di dua zona ketersediaan (AZ), konfigurasi gerbang multi-kluster ALB, dan verifikasi failover tanpa hambatan.

Model pemulihan bencana

Pemulihan bencana di cloud terbagi menjadi tiga model. Pilih model yang sesuai dengan tujuan pemulihan dan kompleksitas operasional Anda.

ModelMelindungi dariTrade-off
Pemulihan bencana antarzonaKejadian tingkat zona: kebakaran, gangguan jaringan, pemadaman listrikLatensi rendah antar pusat data dalam satu wilayah; lebih mudah diimplementasikan
Active geo-redundancyBencana tingkat wilayah: banjir, gempa bumiLatensi antar pusat data lebih tinggi; perlindungan lebih kuat
Tiga pusat data di dua zonaKegagalan tingkat zona maupun tingkat wilayahMenggabungkan dua model di atas; kompleksitas tertinggi

Pemulihan bencana antarzona mencakup dua sub-mode:

  • Active zone-redundancy: Kedua kluster melayani traffic aktif secara bersamaan.

  • Primary/secondary disaster recovery: Satu kluster menangani traffic sementara kluster lain tetap dalam mode siaga.

Lapisan arsitektur

Aplikasi enterprise tipikal memiliki tiga lapisan, masing-masing memerlukan strategi pemulihan bencana tersendiri:

LapisanPeranCakupan ACK One
Lapisan aksesTitik masuk untuk traffic ingress; mengarahkan permintaan ke backend berdasarkan aturan pengalihanGerbang multi-kluster; pemulihan bencana antarzona didukung secara default
Application layerMenampung dan memproses beban kerja aplikasiGerbang multi-kluster; mendukung active zone-redundancy, primary/secondary disaster recovery, dan geo-redundancy
Lapisan dataMenyimpan dan menyajikan data ke lapisan aplikasiTergantung middleware (misalnya, ApsaraDB RDS)

Mengapa menggunakan gerbang multi-kluster

Gerbang multi-kluster menawarkan beberapa keunggulan dibanding distribusi traffic berbasis DNS:

  • Satu alamat IP per wilayah: Pendekatan berbasis DNS memerlukan satu alamat IP load balancer per kluster. Gerbang multi-kluster menggunakan satu alamat IP load balancer dan ditempatkan di beberapa zona dalam wilayah tersebut untuk ketersediaan tinggi bawaan.

  • Penerusan permintaan Lapisan 7: Gerbang multi-kluster mengarahkan traffic di Lapisan 7, memungkinkan aturan berbasis host dan path. Pendekatan berbasis DNS tidak mendukung penerusan permintaan Lapisan 7.

  • Seamless failover: Saat sebuah kluster mati, traffic segera dialihkan ke Pod yang sehat di kluster lain. Pendekatan berbasis DNS mengharuskan klien menyimpan cache hasil kueri DNS selama pergantian alamat IP, menyebabkan gangguan layanan sementara.

  • Manajemen terpusat: Gerbang multi-kluster adalah sumber daya tingkat wilayah yang dikelola dari instans Fleet. Tidak perlu menginstal controller Ingress atau membuat Ingress di setiap kluster Container Service for Kubernetes (ACK).

Arsitektur

Tutorial ini menggunakan aplikasi web (sebuah Deployment dan Service) untuk mendemonstrasikan pemulihan bencana antarzona di dua kluster.

image

Pengaturan ini bekerja sebagai berikut:

  • Kluster 1 dan Kluster 2 ditempatkan di AZ 1 dan AZ 2 dalam wilayah China (Hong Kong).

  • ACK One GitOps mendistribusikan aplikasi web ke kedua kluster.

  • AlbConfig pada instans Fleet ACK One membuat gerbang multi-kluster ALB yang mencakup kedua kluster.

  • Aturan Ingress pada instans Fleet mengarahkan traffic antar kluster berdasarkan bobot. Saat salah satu kluster tidak tersedia, gerbang secara otomatis mengalihkan traffic ke kluster lain.

  • Sinkronisasi data antar kluster menggunakan ApsaraDB RDS dan memiliki dependensi middleware.

Prasyarat

Sebelum memulai, pastikan Anda telah:

Langkah 1: Distribusikan aplikasi ke beberapa kluster

ACK One mendukung dua pendekatan untuk mendistribusikan aplikasi ke beberapa kluster: GitOps dan fitur distribusi aplikasi multi-kluster. Tutorial ini menggunakan GitOps.

  1. Masuk ke Konsol ACK One. Di panel navigasi kiri, pilih Fleet > Multi-cluster Applications.

  2. Di sudut kiri atas halaman Multi-cluster Applications, klik Dingtalk_20231226104633.jpg di samping nama instance Fleet, lalu pilih instance Fleet Anda dari daftar tarik-turun.

  3. Pilih Create Multi-cluster Application > GitOps untuk membuka halaman Create Multi-cluster Application - GitOps.

    Jika GitOps belum diaktifkan untuk instans Fleet Anda, aktifkan terlebih dahulu. Lihat Aktifkan GitOps untuk instans Fleet. Untuk mengizinkan akses internet ke GitOps, lihat Aktifkan akses publik ke Argo CD.
  4. Pada tab Create from YAML, tempel templat ApplicationSet berikut ke editor kode dan klik OK. Templat ini menyebarkan web-demo ke semua kluster yang dikaitkan dengan instans Fleet Anda. Sebagai alternatif, gunakan tab Quick Create untuk memilih kluster satu per satu — perubahan yang dilakukan di sana akan disinkronkan secara otomatis ke YAML ini.

    apiVersion: argoproj.io/v1alpha1
    kind: ApplicationSet
    metadata:
      name: appset-web-demo
      namespace: argocd
    spec:
      template:
        metadata:
          name: '{{.metadata.annotations.cluster_id}}-web-demo'
          namespace: argocd
        spec:
          destination:
            name: '{{.name}}'
            namespace: gateway-demo
          project: default
          source:
            repoURL: https://github.com/AliyunContainerService/gitops-demo.git
            path: manifests/helm/web-demo
            targetRevision: main
            helm:
              valueFiles:
                - values.yaml
              parameters:
                - name: envCluster
                  value: '{{.metadata.annotations.cluster_name}}'
          syncPolicy:
            automated: {}
            syncOptions:
              - CreateNamespace=true
      generators:
        - clusters:
            selector:
              matchExpressions:
                - values:
                    - cluster
                  key: argocd.argoproj.io/secret-type
                  operator: In
                - values:
                    - in-cluster
                  key: name
                  operator: NotIn
      goTemplateOptions:
        - missingkey=error
      syncPolicy:
        preserveResourcesOnDeletion: false
      goTemplate: true

Untuk metode distribusi lainnya, lihat Memulai GitOps, Membuat aplikasi multi-kluster, dan Memulai distribusi aplikasi.

Langkah 2: Sebarkan gerbang multi-kluster ALB

Buat AlbConfig pada instans Fleet untuk menyediakan gerbang ALB yang mencakup kedua kluster.

  1. Dapatkan ID dua vSwitch di VPC tempat instans Fleet Anda berada.

  2. Buat file bernama gateway.yaml dengan konten berikut. Ganti ${vsw-id1} dan ${vsw-id2} dengan ID vSwitch, serta ganti ${cluster1} dan ${cluster2} dengan ID kluster terkait.

    Untuk ${cluster1} dan ${cluster2}, konfigurasikan aturan masuk grup keamanan mereka agar mengizinkan akses dari semua alamat IP dan port dalam blok CIDR vSwitch.
    ParameterWajibDeskripsi
    metadata.nameYaNama AlbConfig.
    alb.ingress.kubernetes.io/remote-clustersYaDaftar ID kluster yang dipisahkan koma untuk dikaitkan dengan gerbang ALB. Kluster-kluster ini harus sudah dikaitkan dengan instans Fleet.
    spec.config.nameTidakNama instans ALB.
    spec.config.addressTypeTidakJenis jaringan: Internet (default) untuk akses publik, atau Intranet hanya untuk akses internal VPC. Instans yang menghadap Internet memerlukan alamat IP elastis (EIP) dan dikenai biaya EIP. Lihat Pay-as-you-go.
    spec.config.zoneMappingsYaID vSwitch untuk instans ALB. Tentukan vSwitch di minimal dua zona untuk ketersediaan tinggi. vSwitch harus berada di zona yang didukung oleh ALB dan dalam VPC yang sama dengan kluster. Lihat Wilayah dan zona tempat ALB tersedia dan Buat dan kelola vSwitch.
    spec.listenersTidakPort dan protokol pendengar. Contoh ini mengonfigurasi HTTP pada port 8001. Pertahankan konfigurasi pendengar — tanpa itu, Anda harus membuat pendengar secara manual sebelum Ingress ALB dapat mengarahkan traffic.
    apiVersion: alibabacloud.com/v1
    kind: AlbConfig
    metadata:
      name: ackone-gateway-demo
      annotations:
        # Tentukan ID kluster yang ingin Anda kaitkan dengan instans ALB.
        alb.ingress.kubernetes.io/remote-clusters: ${cluster1},${cluster2}
    spec:
      config:
        name: one-alb-demo
        addressType: Internet
        addressAllocatedMode: Fixed
        zoneMappings:
        - vSwitchId: ${vsw-id1}
        - vSwitchId: ${vsw-id2}
      listeners:
      - port: 8001
        protocol: HTTP
    ---
    apiVersion: networking.k8s.io/v1
    kind: IngressClass
    metadata:
      name: alb
    spec:
      controller: ingress.k8s.alibabacloud/alb
      parameters:
        apiGroup: alibabacloud.com
        kind: AlbConfig
        name: ackone-gateway-demo
  3. Terapkan konfigurasi:

    kubectl apply -f gateway.yaml
  4. Tunggu 1–3 menit, lalu verifikasi gerbang telah dibuat:

    kubectl get albconfig ackone-gateway-demo

    Output yang diharapkan:

    NAME                  ALBID      DNSNAME                               PORT&PROTOCOL   CERTID   AGE
    ackone-gateway-demo   alb-xxxx   alb-xxxx.<regionid>.alb.aliyuncs.com                           4d9h

    Catat nilai DNSNAME — Anda memerlukannya pada langkah verifikasi.

  5. Konfirmasi kedua kluster terhubung ke gerbang:

    kubectl get albconfig ackone-gateway-demo -ojsonpath='{.status.loadBalancer.subClusters}'

    Output menampilkan daftar ID kluster terkait.

Langkah 3: Konfigurasikan aturan Ingress untuk pemulihan bencana antarzona

Gerbang multi-kluster menggunakan objek Ingress pada instans Fleet untuk mengarahkan dan mendistribusikan traffic antar kluster.

  1. Buat namespace bernama gateway-demo pada instans Fleet. Ini harus sesuai dengan namespace tempat Service aplikasi ditempatkan.

  2. Buat file bernama ingress-demo.yaml dengan konten berikut. Ganti ${cluster1-id} dan ${cluster2-id} dengan ID kluster aktual.

    Jumlah bobot dari semua anotasi alb.ingress.kubernetes.io/cluster-weight harus berjumlah 100.
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      annotations:
        alb.ingress.kubernetes.io/listen-ports: |
         [{"HTTP": 8001}]
        alb.ingress.kubernetes.io/cluster-weight.${cluster1-id}: "20"
        alb.ingress.kubernetes.io/cluster-weight.${cluster2-id}: "80"
      name: web-demo
      namespace: gateway-demo
    spec:
      ingressClassName: alb
      rules:
      - host: alb.ingress.alibaba.com
        http:
          paths:
          - path: /svc1
            pathType: Prefix
            backend:
              service:
                name: service1
                port:
                  number: 80
  3. Terapkan Ingress:

    kubectl apply -f ingress-demo.yaml -n gateway-demo

Langkah 4: Verifikasi active zone-redundancy

Distribusi traffic berbasis bobot

Gunakan perintah berikut untuk mengirim permintaan ke aplikasi. Ganti alb-xxxx.<regionid>.alb.aliyuncs.com dengan nilai DNSNAME dari Langkah 2.

curl -H "host: alb.ingress.alibaba.com" alb-xxxx.<regionid>.alb.aliyuncs.com:8001/svc1

Port pendengar adalah 8001, sesuai dengan nilai yang ditetapkan di AlbConfig dan anotasi Ingress.

Untuk menguji distribusi traffic dalam 500 permintaan:

for i in {1..500}; do curl -H "host: alb.ingress.alibaba.com" alb-xxxx.cn-beijing.alb.aliyuncs.com:8001/svc1; done > res.txt

Output menunjukkan sekitar 20% tanggapan berasal dari Kluster 1 (poc-ack-1) dan 80% dari Kluster 2 (poc-ack-2), sesuai dengan bobot yang dikonfigurasi di Ingress.

image

Automatic failover

Untuk mensimulasikan kegagalan kluster dan mengamati failover tanpa hambatan, jalankan loop permintaan berkelanjutan lalu skala jumlah Pod di Kluster 2 menjadi 0:

for i in {1..500}; do curl -H "host: alb.ingress.alibaba.com" alb-xxxx.cn-beijing.alb.aliyuncs.com:8001/svc1; sleep 1; done

Setelah Pod di Kluster 2 dihapus, traffic secara otomatis dialihkan ke Kluster 1 tanpa gangguan.

image

Langkah selanjutnya