全部产品
Search
文档中心

Container Service for Kubernetes:Bangun sistem pemulihan bencana zona

更新时间:Jul 06, 2025

Gateway multi-klaster Application Load Balancer (ALB) dari Distributed Cloud Container Platform for Kubernetes (ACK One) dapat digunakan bersama dengan ACK One GitOps atau fitur distribusi aplikasi multi-klaster untuk mengimplementasikan pemulihan bencana zona secara cepat. Ini memungkinkan Anda memastikan ketersediaan tinggi bisnis dan secara otomatis beralih lalu lintas secara mulus ketika terjadi gangguan. Topik ini menjelaskan cara membangun sistem pemulihan bencana zona menggunakan gateway multi-klaster.

Ikhtisar Pemulihan Bencana

Solusi pemulihan bencana di cloud dapat diklasifikasikan ke dalam jenis-jenis berikut:

  • Pemulihan bencana zona: Solusi ini mencakup redundansi zona aktif dan pemulihan bencana primer/sekunder. Latensi jaringan antara pusat data di wilayah yang sama rendah. Oleh karena itu, solusi ini cocok untuk melindungi data terhadap peristiwa berbahaya tingkat zona seperti kebakaran, gangguan jaringan, dan pemadaman listrik. Meskipun metode pencadangan dan pemulihan datanya sederhana, solusi ini berlaku untuk skenario umum.

  • Redundansi geo aktif: Latensi jaringan antara pusat data lebih tinggi jika menggunakan solusi redundansi geo aktif. Namun, solusi ini efektif melindungi data terhadap bencana tingkat wilayah seperti banjir dan gempa bumi.

  • Pemulihan bencana berdasarkan tiga pusat data di dua zona: Solusi ini menggabungkan manfaat pemulihan bencana zona dan redundansi geo aktif. Solusi ini cocok untuk skenario yang memerlukan kontinuitas dan ketersediaan aplikasi.

Secara umum, arsitektur bisnis suatu perusahaan dibagi menjadi lapisan-lapisan berikut dari atas ke bawah: lapisan akses, lapisan aplikasi, dan lapisan data.

  • Lapisan akses: Berfungsi sebagai titik masuk untuk lalu lintas masuk. Lapisan ini merutekan lalu lintas masuk ke lapisan aplikasi backend berdasarkan aturan pengalihan.

  • Lapisan aplikasi: Menampung aplikasi. Lapisan ini memproses lalu lintas masuk dan mengirimkan hasilnya kembali ke lapisan atas.

  • Lapisan data: Menyimpan data. Lapisan ini menyediakan layanan data dan penyimpanan untuk lapisan aplikasi.

Ketika membangun sistem pemulihan bencana untuk bisnis Anda, Anda perlu menerapkan langkah-langkah pemulihan pada setiap lapisan.

  • Lapisan akses: ACK One menggunakan gateway multi-klaster untuk membangun lapisan akses. Gateway multi-klaster ACK One mendukung pemulihan bencana zona, sehingga lapisan akses yang dibangun di atas ACK One sangat tersedia.

  • Lapisan aplikasi: ACK One menggunakan gateway multi-klaster untuk mengimplementasikan pemulihan bencana pada lapisan aplikasi. Gateway multi-klaster ACK One mendukung redundansi zona aktif, pemulihan bencana primer/sekunder, dan geo-redundansi.

  • Lapisan data: Pemulihan bencana dan sinkronisasi data pada lapisan data memiliki dependensi middleware.

Manfaat

Pemulihan bencana menggunakan gateway multi-klaster ACK One memiliki keuntungan berikut dibandingkan pemulihan bencana menggunakan distribusi lalu lintas DNS:

  • Pemulihan bencana menggunakan distribusi lalu lintas DNS memerlukan beberapa alamat IP load balancer (satu alamat IP untuk setiap klaster). Pemulihan bencana menggunakan gateway multi-klaster hanya menggunakan satu alamat IP load balancer di satu wilayah dan secara default menggunakan penyebaran multi-zona di wilayah yang sama untuk memastikan ketersediaan tinggi.

  • Pemulihan bencana menggunakan gateway multi-klaster mendukung pengalihan permintaan di Lapisan 7, sedangkan pemulihan bencana menggunakan distribusi lalu lintas DNS tidak mendukung fitur ini.

  • Dalam sebagian besar kasus, klien perlu menyimpan hasil Kueri DNS selama pergantian alamat IP dalam sistem pemulihan bencana yang menggunakan distribusi lalu lintas DNS. Hal ini menyebabkan gangguan layanan sementara. Pemulihan bencana menggunakan gateway multi-klaster menyelesaikan masalah ini dengan gagal secara mulus ke pod backend di klaster lain.

  • Gateway multi-klaster adalah gateway tingkat wilayah. Oleh karena itu, Anda dapat menyelesaikan semua operasi pada instance Fleet tanpa perlu menginstal Ingress controller atau membuat Ingress di setiap klaster Container Service for Kubernetes (ACK). Ini membantu Anda mengelola lalu lintas di wilayah dan mengurangi biaya manajemen multi-klaster.

Arsitektur

Dalam contoh ini, sebuah aplikasi web digunakan untuk menunjukkan cara menggunakan gateway multi-klaster ALB untuk mengimplementasikan pemulihan bencana zona. Aplikasi web terdiri dari Deployment dan Service. Gambar berikut menunjukkan arsitektur sistem pemulihan bencana zona.

  • Buat Klaster 1 dan Klaster 2 di AZ 1 dan AZ 2 di wilayah China (Hong Kong).

  • Gunakan ACK One GitOps untuk mendistribusikan aplikasi ke Klaster 1 dan Klaster 2.

  • Gunakan AlbConfig untuk membuat gateway multi-klaster ALB pada instance Fleet ACK One.

  • Setelah gateway multi-klaster ALB dibuat, Anda dapat mengonfigurasi aturan Ingress untuk merutekan lalu lintas ke klaster berdasarkan bobot dan header permintaan. Ketika salah satu klaster down, lalu lintas secara otomatis dialihkan ke klaster lainnya.

  • Sinkronisasi data berdasarkan ApsaraDB RDS memiliki dependensi middleware.

Prasyarat

  • ALB telah diaktifkan.

  • Fitur Manajemen Fleet telah diaktifkan.

  • Instance Fleet ACK One terhubung dengan dua klaster ACK yang diterapkan di virtual private cloud (VPC) yang sama dengan instance Fleet ACK One. Untuk informasi lebih lanjut, lihat Kelola klaster terhubung.

Langkah 1: Gunakan GitOps atau fitur distribusi aplikasi untuk mendistribusikan aplikasi ke beberapa klaster

ACK One memungkinkan Anda menggunakan GitOps atau fitur distribusi aplikasi untuk mendistribusikan aplikasi ke beberapa klaster. Untuk informasi lebih lanjut, lihat Memulai dengan GitOps, Buat aplikasi multi-klaster, dan Memulai dengan distribusi aplikasi. Dalam langkah ini, GitOps digunakan.

  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 sebelah kanan nama instance Fleet dan pilih instance Fleet Anda dari daftar drop-down.

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

    Catatan
  4. Di tab Create from YAML, salin template YAML berikut ke editor kode. Lalu, klik OK untuk menerapkan aplikasi.

    Catatan

    Template YAML berikut digunakan untuk menerapkan aplikasi bernama web-demo ke setiap klaster terhubung. Anda juga dapat memilih klaster tempat Anda ingin menerapkan aplikasi di tab Quick Create. Perubahan konfigurasi yang Anda buat di tab Buat Cepat akan disinkronkan secara otomatis ke template YAML di tab Create from YAML.

    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

Langkah 2: Gunakan kubectl untuk menerapkan gateway multi-klaster ALB dari instance Fleet ACK One

Anda dapat menggunakan AlbConfig untuk membuat gateway multi-klaster ALB dari instance Fleet ACK One. Anda dapat mengaitkan klaster dengan gateway tersebut.

  1. Peroleh ID dua vSwitch yang termasuk dalam VPC tempat instance Fleet ACK One berada.

  2. Buat file bernama gateway.yaml dan salin konten berikut ke file tersebut.

    Catatan
    • Ganti ${vsw-id1} dan ${vsw-id2} dengan ID vSwitch yang diperoleh dari langkah sebelumnya, dan ganti ${cluster1} dan ${cluster2} dengan ID klaster terhubung yang ingin Anda tambahkan.

    • Untuk klaster terhubung ${cluster1} dan ${cluster2}, Anda harus mengonfigurasi aturan masuk grup keamanan mereka untuk mengizinkan akses dari semua alamat IP dan port blok CIDR vSwitch.

    apiVersion: alibabacloud.com/v1
    kind: AlbConfig
    metadata:
      name: ackone-gateway-demo
      annotations:
        # Tentukan ID klaster yang ingin Anda asosiasikan dengan instance 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

    Anda perlu mengonfigurasi parameter berikut.

    Parameter

    Wajib

    Deskripsi

    metadata.name

    Ya

    Nama AlbConfig.

    metadata.annotations:

    alb.ingress.kubernetes.io/remote-clusters

    Ya

    Daftar klaster terhubung yang akan ditambahkan ke gateway multi-klaster ALB. ID klaster yang terdaftar di sini telah terhubung dengan instance Fleet.

    spec.config.name

    Tidak

    Nama instance ALB.

    spec.config.addressType

    Tidak

    Tipe jaringan instance ALB. Nilai valid:

    • Internet (default): Jaringan publik. Instance ALB menyediakan layanan ke Internet dan dapat diakses melalui Internet.

      Catatan

      Untuk memungkinkan instance ALB menyediakan layanan berbasis Internet, instance ALB perlu dikaitkan dengan alamat IP elastis (EIP). Jika Anda menggunakan instance ALB berbasis Internet, Anda akan dikenakan biaya instansiasi dan biaya bandwidth atau transfer data untuk EIP terkait. Untuk informasi lebih lanjut, lihat Bayar sesuai pemakaian.

      Intranet: Jaringan privat. Instance ALB menyediakan layanan dalam VPC dan tidak dapat diakses melalui Internet.

    spec.config.zoneMappings

    Ya

    ID vSwitch yang dikaitkan dengan instance ALB. Untuk informasi lebih lanjut tentang cara membuat vSwitch, lihat Buat dan kelola vSwitches.

    Catatan
    • vSwitch yang ditentukan harus ditempatkan di zona yang didukung oleh instance ALB dan ditempatkan di VPC yang sama dengan klaster. Untuk informasi lebih lanjut tentang wilayah dan zona yang didukung oleh ALB, lihat Wilayah dan zona.

    • ALB mendukung penyebaran multi-zona. Jika wilayah saat ini mendukung dua zona atau lebih, pilih vSwitch di setidaknya dua zona untuk memastikan ketersediaan tinggi.

    spec.listeners

    Tidak

    Port dan protokol listener instance ALB. Contoh yang disediakan dalam topik ini mengonfigurasi listener HTTP pada port 8001.

    Listener mendefinisikan bagaimana ALB menerima lalu lintas. Kami merekomendasikan agar Anda mempertahankan konfigurasi listener. Jika tidak, Anda harus membuat listener sebelum dapat menggunakan Ingress ALB.

  3. Jalankan perintah berikut untuk menerapkan file gateway.yaml untuk membuat gateway multi-klaster ALB dan IngressClass:

    kubectl apply -f gateway.yaml
  4. Tunggu 1 hingga 3 menit dan jalankan perintah berikut untuk memeriksa apakah gateway multi-klaster ALB 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
  5. Jalankan perintah berikut untuk memeriksa apakah klaster terhubung terhubung ke gateway:

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

    ID klaster terhubung dikembalikan dalam output.

Langkah 3: Gunakan Ingress untuk mengimplementasikan pemulihan bencana zona

Gateway multi-klaster menggunakan Ingress untuk mengelola lalu lintas lintas klaster. Anda dapat membuat objek Ingress pada instance Fleet ACK One untuk mengimplementasikan redundansi zona aktif.

  1. Buat namespace bernama gateway-demo, yang sama dengan namespace tempat Service yang Anda buat di langkah sebelumnya berada.

  2. Buat file bernama ingress-demo.yaml dan salin konten berikut ke file tersebut.

    Catatan
    • Jumlah semua bobot yang ditentukan dalam anotasi alb.ingress.kubernetes.io/cluster-weight harus 100.

    • Aturan pengalihan /svc1 di bawah nama domain example.com digunakan untuk mengekspos Service backend bernama service1. Ganti ${cluster1-id} dan ${cluster2-id} dengan ID klaster aktual.

    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. Jalankan perintah berikut untuk menerapkan Ingress pada instance Fleet ACK One:

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

Langkah 4: Verifikasi redundansi zona aktif

Mengarahkan lalu lintas ke klaster berbeda berdasarkan rasio

Jalankan perintah berikut untuk mengakses aplikasi web:

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

Anda perlu mengonfigurasi parameter berikut.

Parameter

Deskripsi

alb-xxxx.<regionid>.alb.aliyuncs.com

Setel nilai ke nama domain di kolom DNSNAME dalam detail AlbConfig yang Anda peroleh di Langkah 2.

<listeners port>

Setel nilai ke 8001, yang merupakan nilai yang ditentukan dalam konfigurasi AlbConfig dan <annotations dari konfigurasi Ingress.

Jalankan perintah berikut. Output menunjukkan bahwa 20% lalu lintas dialihkan ke Klaster 1 (poc-ack-1) dan 80% lalu lintas dialihkan ke Klaster 2 (poc-ack-2).

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

image

Beralih lalu lintas secara otomatis dan mulus ketika terjadi gangguan di salah satu klaster

Jalankan perintah berikut. Kemudian, kurangi jumlah pod aplikasi di Klaster 2 menjadi 0. Setelah perubahan diterapkan, lalu lintas secara otomatis beralih ke Klaster 1 secara mulus.

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

image