All Products
Search
Document Center

Container Service for Kubernetes:Memulai distribusi aplikasi

Last Updated:Mar 27, 2026

ACK One Fleet memungkinkan Anda mendistribusikan aplikasi dari instans Fleet ke beberapa kluster anggota tanpa bergantung pada repositori Git. Panduan ini akan memandu Anda menyebar Deployment NGINX ke dua kluster menggunakan PropagationPolicy.

Setelah menyelesaikan panduan ini, Anda akan:

  • Membuat aplikasi di instans Fleet

  • Menentukan PropagationPolicy untuk mendistribusikan aplikasi ke beberapa kluster

  • (Opsional) Menerapkan OverridePolicy untuk menyesuaikan konfigurasi per kluster

  • Memverifikasi, memperbarui, dan membersihkan resource yang didistribusikan

Prasyarat

Sebelum memulai, pastikan Anda telah:

(Opsional) Langkah 1: Buat namespace di instans Fleet

Jika namespace untuk aplikasi Anda belum ada di instans Fleet, buatlah namespace tersebut. Lewati langkah ini jika namespace sudah tersedia.

Jalankan perintah berikut untuk membuat namespace bernama demo:

kubectl create namespace demo

Langkah 2: Buat aplikasi di instans Fleet

Fleet mendukung distribusi ConfigMap, Deployment, dan Service. Contoh ini menggunakan Deployment NGINX.

  1. Buat file bernama 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 memberi tahu controller Fleet tentang resource yang harus didistribusikan dan kluster targetnya. Setelah dibuat, controller secara otomatis mendeteksi resource yang sesuai dan mendorongnya ke kluster yang ditentukan.

Contoh ini mendistribusikan Deployment ke dua kluster dalam mode Duplicated, sehingga setiap kluster menjalankan tiga replika secara independen.

  1. Ambil ID kluster anggota yang dikelola oleh instans Fleet:

    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 bernama propagationpolicy.yaml dengan konten berikut. Ganti ${cluster1-id} dan ${cluster2-id} dengan ID kluster aktual Anda.

    ClusterPropagationPolicy mendistribusikan resource berskala kluster (seperti Namespace). PropagationPolicy mendistribusikan resource berskala namespace dan hanya dapat memilih resource dalam namespace tempat kebijakan tersebut berada.
    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} # The ID of your cluster.
          - ${cluster2-id} # The ID of your cluster.
        replicaScheduling:
          replicaSchedulingType: Duplicated
    ---
    apiVersion: policy.one.alibabacloud.com/v1alpha1
    kind: PropagationPolicy
    metadata:
      name: web-demo
      namespace: demo
    spec:
      preserveResourcesOnDeletion: true # When true, deleting resources from the Fleet instance keeps them in the member cluster. Set to false to delete them together.
      resourceSelectors:
      - apiVersion: apps/v1
        kind: Deployment
        name: web-demo
        namespace: demo
      placement:
        clusterAffinity:
          clusterNames:
          - ${cluster1-id} # The ID of your cluster.
          - ${cluster2-id} # The ID of your cluster.
        replicaScheduling:
          replicaSchedulingType: Duplicated

    Tabel berikut menjelaskan parameter utama. Untuk referensi lengkap semua parameter, lihat PropagationPolicy.

    ParameterDeskripsiContoh
    resourceSelectorsResource yang akan didistribusikan. Tentukan apiVersion, kind, name, namespace, atau labelSelector untuk mencocokkan resource.Pilih Deployment web-demo di namespace demo.
    placement.clusterAffinityKluster target untuk distribusi. Masukkan ID kluster, bukan nama kluster.${cluster1-id}, ${cluster2-id}
    replicaScheduling.replicaSchedulingTypeMode penjadwalan. Duplicated mereplikasi jumlah replika penuh ke setiap kluster. Jumlah replika ditentukan oleh spec.replicas dalam workload.Duplicated
  3. Terapkan PropagationPolicy:

    kubectl apply -f propagationpolicy.yaml

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

OverridePolicy memodifikasi konfigurasi resource sebelum deployment, memungkinkan Anda menyesuaikan pengaturan untuk masing-masing kluster.

Contoh ini berlaku untuk ${cluster2-id} dan melakukan 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 bernama 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}}

    Tabel berikut menjelaskan parameter utama. Untuk referensi lengkap semua parameter, lihat OverridePolicy.

    ParameterDeskripsiContoh
    resourceSelectorsResource yang akan di-override. Tentukan apiVersion, kind, name, namespace, atau labelSelector.Pilih Deployment web-demo.
    overrideRules.plaintextMeng-override field resource menggunakan JSONPatch. Tentukan operator, path, dan value.Ubah spec.replicas menjadi 1.
    overrideRules.imageOverriderMeng-override komponen image: Registry, Repository, atau Version.Tambahkan awalan registri ke image.
  2. Terapkan OverridePolicy:

    kubectl apply -f overridepolicy.yaml

Langkah 5: Lihat status distribusi

Jalankan perintah AMC berikut untuk memeriksa 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 sedang berjalan di setiap kluster.

Langkah 6: Perbarui aplikasi

  1. Perbarui 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 pembaruan telah tersebar 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 replika di kedua kluster telah diperbarui.

Langkah 7: Hapus resource aplikasi

Fleet mendistribusikan resource tetapi secara default tidak menghapusnya saat Anda menghapus aplikasi atau PropagationPolicy dari instans Fleet. Hal ini mencegah penghapusan beban kerja secara tidak sengaja di kluster anggota.

Untuk menghapus resource dari kluster anggota, ikuti langkah-langkah berikut:

  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} # The ID of your cluster.
          - ${cluster2-id} # The ID of your cluster.
        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 resource telah dihapus 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

Topik terkait