All Products
Search
Document Center

Container Service for Kubernetes:Memulai distribusi aplikasi

Last Updated:Aug 21, 2026

Gunakan distribusi aplikasi ACK One Fleet untuk menyebarkan aplikasi ke kluster terkait melalui PropagationPolicy—tanpa memerlukan repositori Git.

Anda akan:

  • Membuat aplikasi pada instans Fleet

  • Menentukan PropagationPolicy untuk distribusi multi-kluster

  • (Opsional) Menerapkan OverridePolicy untuk kustomisasi per kluster

  • Memverifikasi, memperbarui, dan membersihkan resource yang didistribusikan

Prasyarat

Pastikan Anda telah:

(Opsional) Langkah 1: Buat namespace pada instans Fleet

Buat namespace jika belum ada pada instans Fleet.

Buat namespace bernama demo:

kubectl create namespace demo

Langkah 2: Buat aplikasi pada instans Fleet

Fleet mendistribusikan ConfigMap, Deployment, dan Service. Contoh ini menggunakan Deployment NGINX.

  1. Buat file web-demo.yaml dengan konten berikut:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      namespace: demo
      name: web-demo
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: web-demo
      template:
        metadata:
          labels:
            app: web-demo
        spec:
          containers:
          - name: nginx
            image: registry-cn-hangzhou.ack.aliyuncs.com/acs/web-demo:0.5.0
            ports:
            - containerPort: 80
  2. Sebarkan aplikasi:

    kubectl apply -f web-demo.yaml

Langkah 3: Buat PropagationPolicy untuk mendistribusikan aplikasi

PropagationPolicy menentukan resource mana yang akan didistribusikan dan ke kluster mana. Setelah diterapkan, controller secara otomatis mendorong resource yang sesuai ke kluster target.

Contoh ini mendistribusikan Deployment ke dua kluster dalam mode Duplicated—masing-masing kluster menjalankan tiga replika secara independen.

  1. Dapatkan ID kluster anggota:

    kubectl get mcl

    Outputnya mirip dengan:

    NAME                                HUB ACCEPTED   MANAGED CLUSTER URLS   JOINED   AVAILABLE   AGE
    cxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx   true                                  True     True        3d23h
    cxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx   true                                  True     True        5d21h
  2. Buat file propagationpolicy.yaml dengan konten berikut. Ganti ${cluster1-id} dan ${cluster2-id} dengan ID kluster Anda.

    ClusterPropagationPolicy mendistribusikan resource berskala kluster (seperti Namespace). PropagationPolicy mendistribusikan resource berskala namespace dan hanya berlaku dalam namespace-nya sendiri.
    apiVersion: policy.one.alibabacloud.com/v1alpha1
    kind: ClusterPropagationPolicy
    metadata:
      name: web-demo
    spec:
      resourceSelectors:
      - apiVersion: v1
        kind: Namespace
        name: demo
      placement:
        clusterAffinity:
          clusterNames:
          - ${cluster1-id} # ID kluster Anda.
          - ${cluster2-id} # ID kluster Anda.
        replicaScheduling:
          replicaSchedulingType: Duplicated
    ---
    apiVersion: policy.one.alibabacloud.com/v1alpha1
    kind: PropagationPolicy
    metadata:
      name: web-demo
      namespace: demo
    spec:
      preserveResourcesOnDeletion: true # Jika true, menghapus resource dari instans Fleet tetap menyimpannya di kluster anggota. Atur ke false untuk menghapusnya sekaligus.
      resourceSelectors:
      - apiVersion: apps/v1
        kind: Deployment
        name: web-demo
        namespace: demo
      placement:
        clusterAffinity:
          clusterNames:
          - ${cluster1-id} # ID kluster Anda.
          - ${cluster2-id} # ID kluster Anda.
        replicaScheduling:
          replicaSchedulingType: Duplicated

    Parameter utama tercantum di bawah ini. Daftar parameter lengkap tersedia di PropagationPolicy.

    Parameter Deskripsi Contoh
    resourceSelectors Resource yang akan didistribusikan. Cocokkan berdasarkan apiVersion, kind, name, namespace, atau labelSelector. Pilih Deployment web-demo di namespace demo.
    placement.clusterAffinity Kluster target untuk distribusi. Masukkan ID kluster, bukan nama kluster. ${cluster1-id}, ${cluster2-id}
    replicaScheduling.replicaSchedulingType Mode penjadwalan. Duplicated mereplikasi jumlah replika penuh (ditentukan oleh spec.replicas) ke setiap kluster. Duplicated
  3. Terapkan PropagationPolicy:

    kubectl apply -f propagationpolicy.yaml

(Opsional) Langkah 4: Buat OverridePolicy untuk menyesuaikan konfigurasi per kluster

OverridePolicy memodifikasi konfigurasi resource sebelum penerapan, sehingga Anda dapat menyesuaikan pengaturan untuk masing-masing kluster.

Contoh ini menargetkan ${cluster2-id} dengan dua perubahan:

  • Mengurangi replicas dari 3 menjadi 1

  • Menambahkan awalan registri ke image

Sebelum menerapkan OverridePolicy, Deployment di ${cluster2-id} memiliki:

spec:
  replicas: 3
  ...
  containers:
    - image: registry-cn-hangzhou.ack.aliyuncs.com/acs/web-demo:0.5.0

Setelah menerapkan OverridePolicy, Deployment di ${cluster2-id} menjadi:

spec:
  replicas: 1
  ...
  containers:
    - image: {{Registry}}/registry-cn-hangzhou.ack.aliyuncs.com/acs/web-demo:0.5.0
  1. Buat file overridepolicy.yaml dengan konten berikut:

    apiVersion: policy.one.alibabacloud.com/v1alpha1
    kind: OverridePolicy
    metadata:
      name: example
      namespace: demo
    spec:
      resourceSelectors:
        - apiVersion: apps/v1
          kind: Deployment
          name: web-demo
      overrideRules:
        - targetCluster:
            clusterNames:
              - ${cluster2-id}
          overriders:
            plaintext:
              - operator: replace
                path: /spec/replicas
                value: 1
            imageOverrider:
              - component: Registry
                operator: add
                value: {{Registry}}

    Parameter utama tercantum di bawah ini. Daftar parameter lengkap tersedia di OverridePolicy.

    Parameter Deskripsi Contoh
    resourceSelectors Resource yang akan ditimpa. Cocokkan berdasarkan apiVersion, kind, name, namespace, atau labelSelector. Pilih Deployment web-demo.
    overrideRules.plaintext Timpa bidang resource dengan JSONPatch. Atur operator, path, dan value. Ubah spec.replicas menjadi 1.
    overrideRules.imageOverrider Timpa komponen image: Registry, Repository, atau Version. Tambahkan awalan registri ke image.
  2. Terapkan OverridePolicy:

    kubectl apply -f overridepolicy.yaml

Langkah 5: Lihat status distribusi

Periksa apakah aplikasi telah didistribusikan ke semua kluster anggota:

kubectl amc get deploy -ndemo -M

Outputnya mirip dengan:

NAME       CLUSTER          READY   UP-TO-DATE   AVAILABLE   AGE    ADOPTION
web-demo   cxxxxxxxxxxxxx   3/3     3            3           3d4h   Y
web-demo   cxxxxxxxxxxxxx   3/3     3            3           3d4h   Y

READY: 3/3 dan ADOPTION: Y mengonfirmasi bahwa aplikasi berjalan di setiap kluster.

Langkah 6: Perbarui aplikasi

  1. Perbarui file web-demo.yaml untuk menambah replicas menjadi 4:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      namespace: demo
      name: web-demo
    spec:
      replicas: 4
      selector:
        matchLabels:
          app: web-demo
      template:
        metadata:
          labels:
            app: web-demo
        spec:
          containers:
          - name: nginx
            image: registry-cn-hangzhou.ack.aliyuncs.com/acs/web-demo:0.5.0
            ports:
            - containerPort: 80
  2. Terapkan manifes yang diperbarui:

    kubectl apply -f web-demo.yaml
  3. Verifikasi propagasi ke semua kluster:

    kubectl amc get deploy -ndemo -M

    Outputnya mirip dengan:

    NAME       CLUSTER          READY   UP-TO-DATE   AVAILABLE   AGE    ADOPTION
    web-demo   cxxxxxxxxxxxxx   4/4     4            4           3d4h   Y
    web-demo   cxxxxxxxxxxxxx   4/4     4            4           3d4h   Y

    READY: 4/4 mengonfirmasi bahwa kedua kluster telah diperbarui.

Langkah 7: Hapus resource aplikasi

Secara default, menghapus aplikasi atau PropagationPolicy dari instans Fleet tidak menghapus resource dari kluster anggota.

Untuk menghapus resource dari kluster anggota:

  1. Atur preserveResourcesOnDeletion menjadi false dalam ClusterPropagationPolicy:

    apiVersion: policy.one.alibabacloud.com/v1alpha1
    kind: ClusterPropagationPolicy
    metadata:
      name: web-demo
    spec:
      preserveResourcesOnDeletion: false
      resourceSelectors:
      - apiVersion: apps/v1
        kind: Deployment
        name: web-demo
      - apiVersion: v1
        kind: Namespace
        name: demo
      placement:
        clusterAffinity:
          clusterNames:
          - ${cluster1-id} # ID kluster Anda.
          - ${cluster2-id} # ID kluster Anda.
        replicaScheduling:
          replicaSchedulingType: Duplicated
  2. Terapkan kebijakan yang diperbarui:

    kubectl apply -f propagationpolicy.yaml
  3. Hapus resource aplikasi:

    kubectl delete -f web-demo.yaml
  4. Konfirmasi penghapusan dari kluster anggota:

    kubectl amc get deploy -ndemo -M

    Outputnya mirip dengan:

    cluster(cxxxxxxxxxxxxx): deployments.apps "web-demo" not found
    cluster(cxxxxxxxxxxxxx): deployments.apps "web-demo" not found

Referensi