全部产品
Search
文档中心

Container Service for Kubernetes:Memulai dengan distribusi aplikasi

更新时间:Jul 02, 2025

Distributed Cloud Container Platform for Kubernetes (ACK One) Fleet menyediakan fitur distribusi aplikasi. Anda dapat menggunakan fitur ini untuk mendistribusikan aplikasi dari instance Fleet ke beberapa kluster yang terkait dengan instance tersebut. Ini menyederhanakan proses distribusi tanpa perlu bergantung pada repositori Git. Topik ini menjelaskan cara membuat aplikasi pada instance Fleet dan mendistribusikannya ke beberapa kluster berdasarkan PropagationPolicy.

Prasyarat

(Opsional) Langkah 1: Buat namespace pada instance Fleet

Jika namespace aplikasi yang ingin didistribusikan belum tersedia di instance Fleet, buat namespace baru. Jika sudah ada, lewati langkah ini.

Gunakan file kubeconfig dari instance Fleet untuk terhubung ke instance tersebut dan jalankan perintah berikut untuk membuat namespace bernama demo:

kubectl create namespace demo

Langkah 2: Buat aplikasi pada instance Fleet

Aplikasi mendukung sumber daya seperti ConfigMaps, Deployments, dan Services. Topik ini menjelaskan cara mendistribusikan Deployment NGINX.

  1. Buat file bernama web-demo.yaml dan tambahkan konten berikut ke dalam file:

    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. Jalankan perintah berikut untuk menerapkan aplikasi:

    kubectl apply -f web-demo.yaml

Langkah 3: Buat PropagationPolicy untuk instance Fleet agar mendistribusikan aplikasi ke beberapa kluster

Anda dapat menentukan PropagationPolicy untuk memilih aplikasi yang ingin didistribusikan dan kluster yang sesuai. Setelah PropagationPolicy dibuat, aplikasi yang cocok akan didistribusikan ke kluster tersebut.

Dalam contoh ini, Deployment bernama weighted-deployment didistribusikan ke Cluster1 dan Cluster2 secara duplikat. Setiap kluster memiliki tiga replika.

  1. Jalankan perintah berikut untuk mendapatkan ID sub-kluster yang dikelola oleh instance Fleet:

    kubectl get mcl

    Output yang Diharapkan:

    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 dan tambahkan konten berikut ke dalam file:

    Catatan

    ClusterPropagationPolicy memungkinkan Anda mendistribusikan sumber daya di seluruh kluster. PropagationPolicy memungkinkan Anda mendistribusikan sumber daya di tingkat namespace.

    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 # Atur parameter ini ke true. Saat Anda menghapus sumber daya dari instance Fleet, sumber daya di sub-kluster tetap dipertahankan. Jika Anda ingin menghapus sumber daya dari sub-kluster pada saat yang sama, atur parameter ini ke false.
      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

    Tabel berikut menjelaskan parameter-parameter tersebut. Untuk informasi lebih lanjut, lihat PropagationPolicy.

    Parameter

    Deskripsi

    Contoh

    resourceSelectors

    Pilih satu atau lebih sumber daya Kubernetes yang ingin didistribusikan.

    • apiVersion: Wajib. apiVersion dari sumber daya yang ingin didistribusikan.

    • kind: Wajib. Jenis sumber daya yang ingin didistribusikan.

    • Name: Nama sumber daya yang ingin didistribusikan.

    • namespace: Namespace dari sumber daya yang ingin didistribusikan.

      Catatan

      PropagationPolicy memungkinkan Anda memilih sumber daya hanya di namespace tempat kebijakan tersebut berada.

    • labelSelector: Pilih sumber daya menggunakan label.

    placement

    clusterAffinity: Kluster tempat Anda ingin mendistribusikan sumber daya.

    ID kluster tempat Anda ingin mendistribusikan sumber daya. Untuk informasi lebih lanjut tentang opsi lainnya, lihat PropagationPolicy.

    Catatan

    Masukkan ID kluster, bukan nama kluster.

    replicaScheduling: Kebijakan penjadwalan untuk sumber daya yang membuat pod. Contoh: Deployment, StatefulSet, dan Job.

    Nilai parameter replicaSchedulingType adalah Duplicated, yang menentukan bahwa setiap sumber daya direplikasi ke kluster. Jumlah replika di setiap kluster dikonfigurasikan menggunakan parameter spec.Replicas. Untuk informasi lebih lanjut, lihat PropagationPolicy.

  3. Jalankan perintah berikut untuk membuat PropagationPolicy:

    kubectl apply -f propagationpolicy.yaml

(Opsional) Langkah 4: Buat OverridePolicy pada instance Fleet

Anda dapat mengonfigurasi OverridePolicy untuk memenuhi persyaratan penerapan berbagai kluster dan sumber daya. Setelah OverridePolicy dibuat, sumber daya dimodifikasi sebelum diterapkan ke kluster yang dipilih.

Dalam contoh ini, jumlah replicas diubah menjadi 1 dan registry gambar diubah menjadi registry Alibaba Cloud.

  1. Buat file bernama overridepolicy.yaml dan tambahkan konten berikut ke dalam file:

    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-parameter tersebut. Untuk informasi lebih lanjut, lihat OverridePolicy.

    Parameter

    Deskripsi

    Contoh

    resourceSelector

    Pilih sumber daya yang ingin Anda timpa.

    • apiVersion: Wajib. apiVersion dari sumber daya yang ingin Anda timpa.

    • kind: Wajib. Jenis sumber daya yang ingin Anda timpa.

    • name: Nama sumber daya yang ingin Anda timpa.

    • namespace: Namespace yang ingin Anda timpa.

      Catatan

      PropagationPolicy memungkinkan Anda memilih sumber daya hanya di namespace tempat kebijakan tersebut berada.

    • labelSelector: Pilih sumber daya menggunakan label.

    overrideRules

    Timpa templat aplikasi menggunakan serangkaian aturan penimpaan.

    • plaintext: Anda dapat menimpa templat menggunakan JSONPatch.

    • imageOverrider: Anda dapat menggunakan salah satu metode berikut untuk menimpa gambar: Registry, Repository, dan Version.

  2. Jalankan perintah berikut untuk membuat OverridePolicy:

    kubectl apply -f overridepolicy.yaml

Langkah 5: Lihat status aplikasi di beberapa kluster

Anda dapat menjalankan perintah AMC berikut untuk memeriksa status aplikasi di beberapa kluster. Anda juga dapat memeriksa status operasi aplikasi di kluster terkait untuk memastikan bahwa aplikasi pada instance Fleet telah didistribusikan.

Jalankan perintah berikut untuk menanyakan status aplikasi:

kubectl amc get deploy -ndemo -M

Output yang Diharapkan:

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

Output perintah menunjukkan bahwa aplikasi telah didistribusikan ke kluster yang ditentukan.

Langkah 6: Perbarui dan timpa aplikasi

  1. Gunakan konten berikut untuk memodifikasi file web-demo.yaml. Dalam contoh ini, jumlah replicas ditingkatkan. Anda dapat menimpa atau memperbarui sumber daya aplikasi berdasarkan kebutuhan bisnis Anda.

    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. Jalankan perintah berikut untuk memperbarui file web-demo.yaml:

    kubectl apply -f web-demo.yaml
  3. Jalankan perintah berikut untuk menanyakan status aplikasi:

    kubectl amc get deploy -ndemo -M

    Output yang Diharapkan:

    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

Langkah 7: Hapus sumber daya aplikasi

Untuk mencegah penghapusan sumber daya di namespace secara tidak sengaja, Fleet mendistribusikan sumber daya tetapi tidak menghapusnya. Untuk mencegah penghapusan sumber daya lain secara tidak sengaja, sumber daya aplikasi sub-kluster tidak dihapus secara default ketika sumber daya aplikasi instance Fleet dihapus atau PropagationPolicy dihapus. Untuk menghapus sumber daya aplikasi sub-kluster, lakukan langkah-langkah berikut:

  1. Ubah nilai bidang preserveResourcesOnDeletion di ClusterPropagationPolicy menjadi false, yang menentukan bahwa sumber daya aplikasi sub-kluster dihapus ketika sumber daya aplikasi instance Fleet dihapus.

    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. Jalankan perintah berikut untuk memperbarui PropagationPolicy:

    kubectl apply -f propagationpolicy.yaml
  3. Jalankan perintah berikut untuk menghapus sumber daya aplikasi:

    kubectl delete -f web-demo.yaml
  4. Jalankan perintah berikut untuk melihat sumber daya aplikasi:

    kubectl amc get deploy -ndemo -M

    Output yang Diharapkan:

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

Referensi