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:
Mengaktifkan manajemen Fleet. Lihat Enable multi-cluster management.
Beberapa kluster terasosiasi dengan instans Fleet. Lihat Manage associated clusters.
Mengunduh file kubeconfig instans Fleet dari Konsol ACK One dan menghubungkan kubectl ke instans Fleet.
Kebijakan
AliyunAdcpFullAccessdilampirkan ke Pengguna Resource Access Management (RAM) Anda. Lihat Grant permissions to RAM users.Alat baris perintah AMC telah terinstal. Lihat Menggunakan baris perintah AMC.
(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 demoLangkah 2: Buat aplikasi di instans Fleet
Fleet mendukung distribusi ConfigMap, Deployment, dan Service. Contoh ini menggunakan Deployment NGINX.
Buat file bernama
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: 80Sebarkan 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.
Ambil ID kluster anggota yang dikelola oleh instans Fleet:
kubectl get mclOutputnya mirip dengan:
NAME HUB ACCEPTED MANAGED CLUSTER URLS JOINED AVAILABLE AGE cxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx true True True 3d23h cxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx true True True 5d21hBuat file bernama
propagationpolicy.yamldengan konten berikut. Ganti${cluster1-id}dan${cluster2-id}dengan ID kluster aktual Anda.ClusterPropagationPolicymendistribusikan resource berskala kluster (seperti Namespace).PropagationPolicymendistribusikan 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: DuplicatedTabel berikut menjelaskan parameter utama. Untuk referensi lengkap semua parameter, lihat PropagationPolicy.
Parameter Deskripsi Contoh resourceSelectorsResource yang akan didistribusikan. Tentukan apiVersion,kind,name,namespace, ataulabelSelectoruntuk mencocokkan resource.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 ke setiap kluster. Jumlah replika ditentukan olehspec.replicasdalam workload.DuplicatedTerapkan 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
replicasdari3menjadi1Menambahkan 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.0Setelah menerapkan OverridePolicy, Deployment di ${cluster2-id} menjadi:
spec:
replicas: 1
...
containers:
- image: {{Registry}}/registry-cn-hangzhou.ack.aliyuncs.com/acs/web-demo:0.5.0Buat file bernama
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}}Tabel berikut menjelaskan parameter utama. Untuk referensi lengkap semua parameter, lihat OverridePolicy.
Parameter Deskripsi Contoh resourceSelectorsResource yang akan di-override. Tentukan apiVersion,kind,name,namespace, ataulabelSelector.Pilih Deployment web-demo.overrideRules.plaintextMeng-override field resource menggunakan JSONPatch. Tentukan operator,path, danvalue.Ubah spec.replicasmenjadi1.overrideRules.imageOverriderMeng-override komponen image: Registry,Repository, atauVersion.Tambahkan awalan registri ke image. 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 -MOutputnya 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 YREADY: 3/3 dan ADOPTION: Y mengonfirmasi bahwa aplikasi sedang berjalan di setiap kluster.
Langkah 6: Perbarui aplikasi
Perbarui
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: 80Terapkan manifes yang diperbarui:
kubectl apply -f web-demo.yamlVerifikasi pembaruan telah tersebar 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 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:
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} # The ID of your cluster. - ${cluster2-id} # The ID of your cluster. replicaScheduling: replicaSchedulingType: DuplicatedTerapkan kebijakan yang diperbarui:
kubectl apply -f propagationpolicy.yamlHapus resource aplikasi:
kubectl delete -f web-demo.yamlKonfirmasi resource telah dihapus 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
Topik terkait
Memantau aplikasi yang didistribusikan di beberapa kluster: Monitoring management
Menerapkan pemulihan bencana tingkat zona: Menggunakan gerbang multi-kluster MSE untuk menerapkan pemulihan bencana tingkat zona di ACK One
Jelajahi semua parameter PropagationPolicy dan OverridePolicy: PropagationPolicy and OverridePolicy