Service Mesh (ASM) terintegrasi dengan Karmada (Kubernetes Armada) untuk menerapkan dan menjalankan aplikasi cloud-native di beberapa kluster Kubernetes tanpa memerlukan perubahan pada aplikasi. Karmada menyediakan otomatisasi plug-and-play untuk manajemen aplikasi multi-kluster dalam skenario cloud-native, dengan fitur utama seperti manajemen multi-cloud terpusat, ketersediaan tinggi, pemulihan dari kegagalan, dan penjadwalan lalu lintas. Topik ini menjelaskan cara menggunakan ASM dan Karmada untuk manajemen aplikasi multi-kluster.
Informasi latar belakang
Karmada menggunakan API native Kubernetes untuk mendefinisikan templat sumber daya federasi, sehingga memudahkan integrasi dengan alat Kubernetes yang sudah ada. Karmada juga menyediakan API PropagationPolicy mandiri untuk mendefinisikan persyaratan penjadwalan multi-kluster.
-
Karmada mendukung mekanisme pemetaan kebijakan 1:N, sehingga Anda tidak perlu menentukan batasan penjadwalan setiap kali membuat aplikasi federasi.
-
Saat menggunakan kebijakan default, Anda dapat berinteraksi langsung dengan API Kubernetes.
Mode kluster
Karmada dapat mengelola kluster anggota dalam dua mode: push dan pull. Perbedaan utama antara mode push dan pull terletak pada cara kluster anggota diakses saat manifes diterapkan.
Mode Push
Lapisan kontrol Karmada mengakses secara langsung kube-apiserver kluster anggota untuk mendapatkan status kluster dan menerapkan manifes.
Mode Pull
Lapisan kontrol Karmada tidak mengakses langsung kluster anggota. Sebagai gantinya, permintaan didelegasikan ke komponen agen bernama karmada-agent.
Setiap karmada-agent melayani satu kluster dan memiliki tanggung jawab berikut:
-
Mendaftarkan kluster ke Karmada (membuat objek
Cluster). -
Memelihara dan melaporkan status kluster ke Karmada (memperbarui status objek
Cluster). -
Memantau manifes dari ruang eksekusi Karmada (sebuah namespace dengan format
karmada-es-<nama kluster>) dan menerapkannya ke kluster yang dilayaninya.
Komponen utama
Lapisan kontrol Karmada mencakup komponen-komponen berikut:
-
Karmada API Server
-
Karmada Controller Manager
-
Karmada Scheduler
etcd menyimpan objek API Karmada. API Server menyediakan titik akhir REST untuk semua komponen lainnya. Karmada Controller Manager bertindak atas objek API yang Anda buat melalui API server.
Prasyarat
-
Anda memiliki dua kluster ACK (dengan nama
member1danmember2dalam contoh ini) dalam virtual private cloud (VPC) yang sama. Untuk informasi selengkapnya, lihat Buat kluster ACK yang dikelola.Catatan-
Topik ini menggunakan dua kluster dalam VPC yang sama sebagai contoh. Jika kluster Anda berada di VPC yang berbeda, Anda harus mengonfigurasi konektivitas jaringan antar-VPC.
-
Kami merekomendasikan penggunaan security group enterprise saat membuat kluster.
-
-
Anda telah membuat instans ASM (dengan nama
mesh1dalam contoh ini) dan mengonfigurasi kebijakan injeksi sidecar untuk namespacedefault. Untuk informasi selengkapnya, lihat Buat instans ASM dan Konfigurasi kebijakan injeksi sidecar. -
Anda telah menerapkan instans kluster utama Karmada (dengan nama
karmada-masterdalam contoh ini) dan menambahkan dua kluster ACK (member1danmember2) sebagai kluster anggota. Untuk informasi selengkapnya, lihat Instalasi Karmada. -
Anda telah menambahkan kedua kluster ke instans ASM (
mesh1) dan membuat gerbang masuk arsitektur tanpa server. Untuk informasi selengkapnya, lihat Tambahkan kluster ke instans ASM dan buat gerbang masuk arsitektur tanpa server.
Langkah 1: Terapkan aplikasi dengan Karmada
Topik ini menggunakan aplikasi sampel Bookinfo, mirip dengan proses yang dijelaskan dalam Gunakan gerbang arsitektur tanpa server ASM untuk ingress multi-kluster. Namun, alih-alih menerapkan versi reviews yang berbeda secara manual ke kluster terpisah, topik ini menunjukkan cara mencapai hasil yang sama dengan membuat PropagationPolicy Karmada di kluster karmada-master.
-
Buat file bernama
bookinfo-karmada.yamldengan konten berikut. -
Jalankan perintah berikut untuk menerapkan aplikasi Bookinfo di kluster utama Karmada:
kubectl --kubeconfig /etc/karmada/karmada-apiserver.config apply -f bookinfo-karmada.yamlCatatanSecara default, file kubeconfig untuk kluster utama Karmada disimpan di
/etc/karmada/karmada-apiserver.config. Jika Anda memilih jalur instalasi berbeda, ganti jalur setelah--kubeconfigdengan jalur yang benar. -
Buat file bernama
propagation.yamldengan konten berikut.apiVersion: policy.karmada.io/v1alpha1 kind: PropagationPolicy metadata: name: service-propagation spec: resourceSelectors: - apiVersion: v1 kind: Service name: productpage - apiVersion: v1 kind: Service name: details - apiVersion: v1 kind: Service name: reviews - apiVersion: v1 kind: Service name: ratings placement: clusterAffinity: clusterNames: - member1 - member2 --- apiVersion: policy.karmada.io/v1alpha1 kind: PropagationPolicy metadata: name: produtpage-propagation spec: resourceSelectors: - apiVersion: apps/v1 kind: Deployment name: productpage-v1 - apiVersion: v1 kind: ServiceAccount name: bookinfo-productpage placement: clusterAffinity: clusterNames: - member1 --- apiVersion: policy.karmada.io/v1alpha1 kind: PropagationPolicy metadata: name: details-propagation spec: resourceSelectors: - apiVersion: apps/v1 kind: Deployment name: details-v1 - apiVersion: v1 kind: ServiceAccount name: bookinfo-details placement: clusterAffinity: clusterNames: - member2 --- apiVersion: policy.karmada.io/v1alpha1 kind: PropagationPolicy metadata: name: reviews-propagation spec: resourceSelectors: - apiVersion: apps/v1 kind: Deployment name: reviews-v1 - apiVersion: apps/v1 kind: Deployment name: reviews-v2 - apiVersion: apps/v1 kind: Deployment name: reviews-v3 - apiVersion: v1 kind: ServiceAccount name: bookinfo-reviews placement: clusterAffinity: clusterNames: - member1 - member2 --- apiVersion: policy.karmada.io/v1alpha1 kind: PropagationPolicy metadata: name: ratings-propagation spec: resourceSelectors: - apiVersion: apps/v1 kind: Deployment name: ratings-v1 - apiVersion: v1 kind: ServiceAccount name: bookinfo-ratings placement: clusterAffinity: exclude: - member1Field
.spec.placement.clusterAffinitydalam PropagationPolicy mendefinisikan batasan penjadwalan untuk kluster tertentu. Tanpa batasan ini, kluster mana pun dapat menjadi kandidat penjadwalan.Anda dapat mengonfigurasi empat field berikut:
Parameter
Deskripsi
labelSelector
Filter untuk memilih kluster anggota berdasarkan label mereka. Jika field ini tidak kosong, hanya kluster yang sesuai dengan filter yang dipilih.
fieldSelector
Filter untuk memilih kluster anggota berdasarkan field mereka. Jika field ini tidak kosong, hanya kluster yang sesuai dengan filter yang dipilih.
clusterNames
Daftar nama kluster untuk secara eksplisit dimasukkan dalam pemilihan.
exclude
Daftar nama kluster untuk secara eksplisit dikecualikan dari pemilihan.
Contoh ini hanya menggunakan field
clusterNamesdanexclude. Untuk informasi selengkapnya tentang field.spec.placement.clusterAffinity, lihat Resource Propagating dalam dokumentasi Karmada. -
Jalankan perintah berikut untuk menerapkan PropagationPolicy:
kubectl --kubeconfig /etc/karmada/karmada-apiserver.config apply -f propagation.yaml -
Gunakan file kubeconfig untuk kluster
member1danmember2untuk melihat Deployment di masing-masing kluster.-
member1
kubectl --kubeconfig member1 get deploymentOutput yang diharapkan:
NAME READY UP-TO-DATE AVAILABLE AGE productpage-v1 1/1 1 1 12m reviews-v1 1/1 1 1 12m reviews-v2 1/1 1 1 12m reviews-v3 1/1 1 1 12m -
member2
kubectl --kubeconfig member2 get deploymentOutput yang diharapkan:
NAME READY UP-TO-DATE AVAILABLE AGE details-v1 1/1 1 1 16m ratings-v1 1/1 1 1 16m reviews-v1 1/1 1 1 16m reviews-v2 1/1 1 1 16m reviews-v3 1/1 1 1 16m
-
Langkah 2: Tambahkan virtual service dan gateway
-
Di namespace
default, buat virtual service bernamabookinfodengan konten berikut. Untuk informasi selengkapnya, lihat Kelola virtual service.apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: bookinfo spec: hosts: - "*" gateways: - bookinfo-gateway http: - match: - uri: exact: /productpage - uri: prefix: /static - uri: exact: /login - uri: exact: /logout - uri: prefix: /api/v1/products route: - destination: host: productpage port: number: 9080 -
Di namespace
default, buat gateway bernamabookinfo-gatewaydengan konten berikut. Untuk informasi selengkapnya, lihat Kelola gateway.apiVersion: networking.istio.io/v1alpha3 kind: Gateway metadata: name: bookinfo-gateway spec: selector: istio: ingressgateway # gunakan controller default istio servers: - port: number: 80 name: http protocol: HTTP hosts: - "*"
Langkah 3: Verifikasi akses
-
Dapatkan alamat IP gerbang masuk. Untuk informasi selengkapnya, lihat Dapatkan alamat IP gerbang masuk.
-
Pada browser Anda, masukkan
http://{IP_address_of_the_serverless_ingress_gateway}/productpagedan refresh halaman beberapa kali. Halaman akan bergiliran menampilkan tiga versi layananreviews, dengan distribusi lalu lintas yang kurang lebih merata. Meskipunreviews-v3berada di kluster yang berbeda dari beberapa layanan lainnya, layanan tersebut berfungsi sebagaimana mestinya.Halaman
reviews-v3menampilkan bintang merah di bagian "Book Reviews" dan menunjukkanReviews served by: reviews-v3-xxxdi bagian bawah, yang menandakan versi layanan saat ini.Halaman
reviews-v2menampilkan bintang hitam di bagian "Book Reviews" dan menunjukkanReviews served by: reviews-v2-xxxdi bagian bawah.Halaman
reviews-v1hanya menampilkan teks ulasan tanpa peringkat bintang dan menampilkan instans layanan, sepertireviews-v1-586d96b89c-6v5p8, di bagian bawah.
Dokumen terkait
Aplikasi federasi sangat berguna untuk kolaborasi lintas organisasi. Aplikasi ini memungkinkan pemanfaatan informasi secara efektif sekaligus melindungi privasi dan keamanan data. Untuk informasi selengkapnya, lihat Federation in Computing.