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:
-
Manajemen multi-kluster diaktifkan.
-
Beberapa kluster dikaitkan dengan instans Fleet.
-
kubectl terhubung ke instans Fleet menggunakan kubeconfig yang diunduh dari Konsol ACK One.
-
Kebijakan
AliyunAdcpFullAccesstelah diberikan kepada Pengguna Resource Access Management (RAM) Anda. -
Tool baris perintah AMC telah diinstal.
(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.
-
Buat file
web-demo.yamldengan 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 -
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.
-
Dapatkan ID kluster anggota:
kubectl get mclOutputnya mirip dengan:
NAME HUB ACCEPTED MANAGED CLUSTER URLS JOINED AVAILABLE AGE cxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx true True True 3d23h cxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx true True True 5d21h -
Buat file
propagationpolicy.yamldengan konten berikut. Ganti${cluster1-id}dan${cluster2-id}dengan ID kluster Anda.ClusterPropagationPolicymendistribusikan resource berskala kluster (seperti Namespace).PropagationPolicymendistribusikan 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: DuplicatedParameter utama tercantum di bawah ini. Daftar parameter lengkap tersedia di PropagationPolicy.
Parameter Deskripsi Contoh resourceSelectorsResource yang akan didistribusikan. Cocokkan berdasarkan apiVersion,kind,name,namespace, ataulabelSelector.Pilih Deployment web-demodi namespacedemo.placement.clusterAffinityKluster target untuk distribusi. Masukkan ID kluster, bukan nama kluster. ${cluster1-id},${cluster2-id}replicaScheduling.replicaSchedulingTypeMode penjadwalan. Duplicatedmereplikasi jumlah replika penuh (ditentukan olehspec.replicas) ke setiap kluster.Duplicated -
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
replicasdari3menjadi1 -
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
-
Buat file
overridepolicy.yamldengan 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 resourceSelectorsResource yang akan ditimpa. Cocokkan berdasarkan apiVersion,kind,name,namespace, ataulabelSelector.Pilih Deployment web-demo.overrideRules.plaintextTimpa bidang resource dengan JSONPatch. Atur operator,path, danvalue.Ubah spec.replicasmenjadi1.overrideRules.imageOverriderTimpa komponen image: Registry,Repository, atauVersion.Tambahkan awalan registri ke image. -
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
-
Perbarui file
web-demo.yamluntuk menambahreplicasmenjadi4: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 -
Terapkan manifes yang diperbarui:
kubectl apply -f web-demo.yaml -
Verifikasi propagasi ke semua kluster:
kubectl amc get deploy -ndemo -MOutputnya 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 YREADY: 4/4mengonfirmasi 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:
-
Atur
preserveResourcesOnDeletionmenjadifalsedalamClusterPropagationPolicy: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 -
Terapkan kebijakan yang diperbarui:
kubectl apply -f propagationpolicy.yaml -
Hapus resource aplikasi:
kubectl delete -f web-demo.yaml -
Konfirmasi penghapusan dari kluster anggota:
kubectl amc get deploy -ndemo -MOutputnya mirip dengan:
cluster(cxxxxxxxxxxxxx): deployments.apps "web-demo" not found cluster(cxxxxxxxxxxxxx): deployments.apps "web-demo" not found
Referensi
-
Memantau aplikasi terdistribusi: Manajemen pemantauan
-
Implementasikan pemulihan bencana antar zona: Gunakan gerbang multi-kluster MSE untuk mengimplementasikan pemulihan bencana antar zona di ACK One
-
Referensi parameter lengkap: PropagationPolicy dan OverridePolicy