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
Fitur manajemen Fleet diaktifkan.
Beberapa kluster telah terhubung ke instance Fleet. Untuk informasi lebih lanjut, lihat Kelola Kluster Terkait.
File kubeconfig dari instance Fleet diperoleh di Konsol Distributed Cloud Container Platform for Kubernetes (ACK One), dan klien kubectl terhubung ke instance Fleet.
Kebijakan AliyunAdcpFullAccess dilampirkan ke Pengguna Resource Access Management (RAM). Untuk informasi lebih lanjut, lihat Berikan Izin kepada Pengguna RAM.
Alat Baris Perintah AMC telah diinstal.
(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 demoLangkah 2: Buat aplikasi pada instance Fleet
Aplikasi mendukung sumber daya seperti ConfigMaps, Deployments, dan Services. Topik ini menjelaskan cara mendistribusikan Deployment NGINX.
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: 80Jalankan 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.
Jalankan perintah berikut untuk mendapatkan ID sub-kluster yang dikelola oleh instance Fleet:
kubectl get mclOutput yang Diharapkan:
NAME HUB ACCEPTED MANAGED CLUSTER URLS JOINED AVAILABLE AGE cxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx true True True 3d23h cxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx true True True 5d21hBuat file bernama propagationpolicy.yaml dan tambahkan konten berikut ke dalam file:
CatatanClusterPropagationPolicymemungkinkan Anda mendistribusikan sumber daya di seluruh kluster.PropagationPolicymemungkinkan 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: DuplicatedTabel 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.CatatanPropagationPolicymemungkinkan 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.
CatatanMasukkan ID kluster, bukan nama kluster.
replicaScheduling: Kebijakan penjadwalan untuk sumber daya yang membuat pod. Contoh: Deployment, StatefulSet, dan Job.Nilai parameter
replicaSchedulingTypeadalah Duplicated, yang menentukan bahwa setiap sumber daya direplikasi ke kluster. Jumlah replika di setiap kluster dikonfigurasikan menggunakan parameterspec.Replicas. Untuk informasi lebih lanjut, lihat PropagationPolicy.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.
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.CatatanPropagationPolicymemungkinkan 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, danVersion.
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 -MOutput 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 YOutput perintah menunjukkan bahwa aplikasi telah didistribusikan ke kluster yang ditentukan.
Langkah 6: Perbarui dan timpa aplikasi
Gunakan konten berikut untuk memodifikasi file
web-demo.yaml. Dalam contoh ini, jumlahreplicasditingkatkan. 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: 80Jalankan perintah berikut untuk memperbarui file
web-demo.yaml:kubectl apply -f web-demo.yamlJalankan perintah berikut untuk menanyakan status aplikasi:
kubectl amc get deploy -ndemo -MOutput 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:
Ubah nilai bidang
preserveResourcesOnDeletiondiClusterPropagationPolicymenjadifalse, 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: DuplicatedJalankan perintah berikut untuk memperbarui PropagationPolicy:
kubectl apply -f propagationpolicy.yamlJalankan perintah berikut untuk menghapus sumber daya aplikasi:
kubectl delete -f web-demo.yamlJalankan perintah berikut untuk melihat sumber daya aplikasi:
kubectl amc get deploy -ndemo -MOutput yang Diharapkan:
cluster(cxxxxxxxxxxxxx): deployments.apps "web-demo" not found cluster(cxxxxxxxxxxxxx): deployments.apps "web-demo" not found
Referensi
Untuk informasi lebih lanjut tentang cara memantau aplikasi yang didistribusikan di beberapa kluster, lihat Manajemen Pemantauan.
Untuk informasi lebih lanjut tentang cara menerapkan pemulihan bencana zona, lihat Gunakan Gateway Multi-Kluster MSE untuk Menerapkan Pemulihan Bencana Zona di ACK One.
Untuk informasi lebih lanjut tentang parameter PropagationPolicy dan OverridePolicy, lihat PropagationPolicy dan OverridePolicy.