全部产品
Search
文档中心

Container Service for Kubernetes:Migrasikan aplikasi kluster tunggal ke armada dan distribusikan ke beberapa kluster

更新时间:Nov 11, 2025

Menyebarkan aplikasi di beberapa kluster melibatkan tugas berulang yang rentan terhadap kesalahan dan menyulitkan sinkronisasi. Anda dapat menggunakan antarmuka baris perintah AMC untuk menyebarkan aplikasi dengan cepat ke beberapa kluster, sehingga memungkinkan manajemen terpadu dan sinkronisasi otomatis untuk pembaruan di masa mendatang.

Cara kerja

image

  1. Pengguna menjalankan perintah kubectl amc promote untuk menyinkronkan sumber daya yang dipilih dari sebuah kluster ke armada.

  2. Sumber daya dibuat di armada, dan PropagationPolicy secara otomatis dihasilkan. Kebijakan tersebut mencakup kluster yang ditentukan oleh target-clusters serta kluster sumber, yaitu cluster-1.

  3. Armada mendistribusikan sumber daya ke kluster yang ditentukan dalam target-clusters, seperti cluster-2 pada diagram. Sumber daya yang telah disinkronkan di semua kluster target, termasuk cluster-1, kemudian dikelola oleh armada.

Prasyarat

Langkah 1: Buat namespace di armada dan kluster target

Sebelum mendistribusikan sumber daya ke beberapa kluster, pastikan namespace yang sesuai sudah ada di armada dan semua kluster target. Jika tidak, distribusi akan gagal. Pada contoh berikut, sumber daya yang akan didistribusikan berada dalam namespace gateway-demo.

Jika namespace tersebut sudah ada di armada dan semua kluster target, Anda dapat melewati langkah ini.
  1. Gunakan kubeconfig armada untuk menjalankan perintah berikut dan buat namespace gateway-demo di armada.

    kubectl create ns gateway-demo

  2. Salin dan simpan konten YAML berikut ke dalam file bernama web-demo-ns-policy.yaml.

    apiVersion: policy.one.alibabacloud.com/v1alpha1
    kind: ClusterPropagationPolicy
    metadata:
      name: web-demo-ns-policy
    spec:
      resourceSelectors:
      - apiVersion: v1
        kind: Namespace
        name: gateway-demo
      placement:
        clusterAffinity:
          clusterNames:
          - ${cluster1_id} # Ganti dengan ID kluster Anda
          - ${cluster2_id} # Ganti dengan ID kluster Anda
        replicaScheduling:
          replicaSchedulingType: Duplicated
  3. Gunakan kubeconfig armada untuk menjalankan perintah berikut. Ini akan membuat ClusterPropagationPolicy di armada dan mendistribusikan namespace tersebut.

    kubectl apply -f web-demo-ns-policy.yaml

Langkah 2: Jalankan perintah promote untuk menyinkronkan sumber daya ke armada

Gunakan perintah kubectl amc promote untuk menyinkronkan sumber daya kluster tunggal ke armada dan mendistribusikannya ke beberapa kluster.

  1. Gunakan perintah amc get untuk memeriksa status awal. Keluaran menunjukkan bahwa service1 dan web-demo hanya ada di namespace gateway-demo pada cluster-1. Nilai ADOPTION adalah `N`, yang menunjukkan bahwa sumber daya tersebut tidak dikelola oleh PropagationPolicy di armada ACK One.

    kubectl amc -ngateway-demo get svc -M
    kubectl amc -ngateway-demo get deployment -M

    Keluaran yang diharapkan:

    NAME       CLUSTER    CLUSTER_ALIAS   TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE    ADOPTION
    service1   c8xxxxxx   cluster-1       ClusterIP   192.168.**.**   <none>        80/TCP    104m   N
    
    NAME       CLUSTER    CLUSTER_ALIAS   READY   UP-TO-DATE   AVAILABLE   AGE    ADOPTION
    web-demo   c8xxxxxx   cluster-1       2/2     2            2           104m   N
  2. Jalankan perintah berikut untuk menempatkan sumber daya dari cluster-1 di bawah pengelolaan armada dan mendistribusikannya ke kluster lain.

    Ganti parameter ${cluster1_id} dan ${cluster2_id} dengan ID kluster Anda. Parameter target-clusters menentukan kluster tempat sumber daya yang dipromosikan akan didistribusikan. Untuk menentukan beberapa kluster, gunakan format ${cluster2_id},${cluster3_id}.

    kubectl amc promote service service1 -ngateway-demo -m ${cluster1_id} --target-clusters ${cluster2_id} 
    kubectl amc promote deployment web-demo -ngateway-demo -m ${cluster1_id} --target-clusters ${cluster2_id} 

    Keluaran yang diharapkan:

    ResourceTemplate (gateway-demo/service1) is created successfully
    PropagationPolicy (gateway-demo/service1-67676f499c) is created successfully
    Resource "/v1, Resource=services"(gateway-demo/service1) is promoted successfully
    
    ResourceTemplate (gateway-demo/web-demo) is created successfully
    PropagationPolicy (gateway-demo/web-demo-6675b99c65) is created successfully
    Resource "apps/v1, Resource=deployments"(gateway-demo/web-demo) is promoted successfully
  3. Jalankan kembali perintah amc get untuk melihat hasilnya. Keluaran menunjukkan bahwa service1 dan web-demo telah didistribusikan ke cluster-2 dan sumber daya di kedua kluster dikelola oleh armada ACK One (ADOPTION bernilai Y). Aplikasi web-demo di cluster-1 kini menjadi penerapan multi-kluster.

    kubectl amc -ngateway-demo get svc -M
    kubectl amc -ngateway-demo get deployment -M

    Keluaran yang diharapkan:

    NAME       CLUSTER    CLUSTER_ALIAS   TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)   AGE     ADOPTION
    service1   cfxxxxxx   cluster-2       ClusterIP   192.168.**.***   <none>        80/TCP    19s     Y
    service1   c8xxxxxx   cluster-1       ClusterIP   192.168.**.**    <none>        80/TCP    5h58m   Y
    
    NAME       CLUSTER    CLUSTER_ALIAS   READY   UP-TO-DATE   AVAILABLE   AGE    ADOPTION
    web-demo   c8xxxxxx   cluster-1       2/2     2            2           6h1m   Y
    web-demo   cfxxxxxx   cluster-2       2/2     2            2           24s    Y

Ubah kebijakan distribusi default

Secara default, perintah promote secara otomatis membuat kebijakan distribusi bertipe `Duplicated` (PropagationPolicy). Hal ini mengatur replicaSchedulingType: Duplicated, yang mereplikasi aplikasi ke setiap kluster. Anda dapat menjalankan perintah berikut di armada untuk melihat kebijakan distribusi default.

kubectl get pp -ngateway-demo xx -oyaml

Keluaran yang diharapkan:

apiVersion: policy.one.alibabacloud.com/v1alpha1
kind: PropagationPolicy
metadata:
  ...
spec:
  ...
  placement:
    clusterAffinity:
      ...
    replicaScheduling:
      replicaSchedulingType: Duplicated # Kebijakan distribusi Duplicated

Untuk menggunakan kebijakan lain, seperti bobot replika statis atau dinamis, tambahkan parameter --auto-create-policy=false pada perintah untuk mencegah pembuatan kebijakan secara otomatis. Setelah itu, Anda dapat mengonfigurasi kebijakan yang diinginkan secara manual. Untuk informasi selengkapnya, lihat Kebijakan distribusi dan kebijakan diferensiasi.