Menyiapkan penyeimbangan beban lapisan multi-kluster 4 di seluruh kluster anggota Azure Kubernetes Fleet Manager (pratinjau)
Untuk aplikasi yang disebarkan di beberapa kluster, admin sering ingin merutekan lalu lintas masuk ke dalamnya di seluruh kluster.
Anda dapat mengikuti dokumen ini untuk menyiapkan penyeimbangan beban lapisan 4 untuk aplikasi multi-kluster tersebut.
Penting
Fitur pratinjau Azure Kubernetes Fleet Manager tersedia berdasarkan layanan mandiri. Pratinjau disediakan "apa adanya" dan "sebagaimana tersedia," dan mereka dikecualikan dari perjanjian tingkat layanan dan garansi terbatas. Pratinjau Azure Kubernetes Fleet Manager sebagian dicakup oleh dukungan pelanggan berdasarkan upaya terbaik. Dengan demikian, fitur-fitur ini tidak dimaksudkan untuk penggunaan produksi.
Prasyarat
Jika Anda tidak memiliki Langganan Azure, buat Akun gratis Azure sebelum memulai.
Baca gambaran umum konseptual fitur ini, yang memberikan penjelasan tentang
ServiceExport
danMultiClusterService
objek yang dirujuk dalam dokumen ini.Anda harus memiliki sumber daya Armada dengan kluster hub dan kluster anggota. Jika Anda tidak memiliki sumber daya ini, ikuti Mulai Cepat: Membuat sumber daya Armada dan bergabung dengan kluster anggota.
Kluster Azure Kubernetes Service (AKS) target tempat beban kerja disebarkan perlu ada di jaringan virtual yang sama atau pada jaringan virtual yang di-peering.
- Kluster target ini harus ditambahkan sebagai kluster anggota ke sumber daya Armada.
- Kluster target ini harus menggunakan jaringan Azure CNI (Antarmuka Jaringan Kontainer).
Anda harus mendapatkan akses ke API Kubernetes dari kluster hub dengan mengikuti langkah-langkah dalam Api Kubernetes kluster Hub Armada Access.
Atur variabel lingkungan berikut dan dapatkan kubeconfigs untuk armada dan semua kluster anggota:
export GROUP=<resource-group> export FLEET=<fleet-name> export MEMBER_CLUSTER_1=aks-member-1 export MEMBER_CLUSTER_2=aks-member-2 az fleet get-credentials --resource-group ${GROUP} --name ${FLEET} --file fleet az aks get-credentials --resource-group ${GROUP} --name ${MEMBER_CLUSTER_1} --file aks-member-1 az aks get-credentials --resource-group ${GROUP} --name ${MEMBER_CLUSTER_2} --file aks-member-2
Gunakan lingkungan Bash di Azure Cloud Shell. Untuk informasi selengkapnya, lihat Mulai Cepat untuk Bash di Azure Cloud Shell.
Jika Anda lebih suka menjalankan perintah referensi CLI secara lokal, instal Azure CLI. Jika Anda menjalankan Windows atau macOS, pertimbangkan untuk menjalankan Azure CLI dalam kontainer Docker. Untuk informasi lebih lanjut, lihat Cara menjalankan Azure CLI di kontainer Docker.
Jika Anda menggunakan instalasi lokal, masuk ke Azure CLI dengan menggunakan perintah login az. Untuk menyelesaikan proses autentikasi, ikuti langkah-langkah yang ditampilkan di terminal Anda. Untuk opsi masuk lainnya, lihat Masuk dengan Azure CLI.
Saat Anda diminta, instal ekstensi Azure CLI pada penggunaan pertama. Untuk informasi selengkapnya tentang ekstensi, lihat Menggunakan ekstensi dengan Azure CLI.
Jalankan versi az untuk menemukan versi dan pustaka dependen yang diinstal. Untuk meningkatkan ke versi terbaru, jalankan peningkatan az.
Menyebarkan beban kerja di seluruh kluster anggota sumber daya Armada
Catatan
Langkah-langkah dalam panduan cara ini merujuk ke aplikasi sampel hanya untuk tujuan demonstrasi. Anda dapat mengganti beban kerja ini untuk salah satu objek Penyebaran dan Layanan Anda sendiri yang ada.
Langkah-langkah ini menyebarkan beban kerja sampel dari kluster Armada ke kluster anggota menggunakan penyebaran konfigurasi Kubernetes. Atau, Anda dapat memilih untuk menyebarkan konfigurasi Kubernetes ini ke setiap kluster anggota secara terpisah, satu per satu.
Buat namespace pada kluster armada:
KUBECONFIG=fleet kubectl create namespace kuard-demo
Output terlihat mirip dengan contoh berikut:
namespace/kuard-demo created
Terapkan objek Deployment, Service, ServiceExport:
KUBECONFIG=fleet kubectl apply -f https://raw.githubusercontent.com/Azure/AKS/master/examples/fleet/kuard/kuard-export-service.yaml
ServiceExport
Spesifikasi dalam file di atas memungkinkan Anda mengekspor layanan dari kluster anggota ke sumber daya Armada. Setelah berhasil diekspor, layanan dan semua titik akhirnya disinkronkan ke kluster armada dan kemudian dapat digunakan untuk mengatur penyeimbangan beban multi-kluster di seluruh titik akhir ini. Output terlihat mirip dengan contoh berikut:deployment.apps/kuard created service/kuard created serviceexport.networking.fleet.azure.com/kuard created
Buat yang berikut ini
ClusterResourcePlacement
dalam file yang disebutcrp-2.yaml
. Perhatikan bahwa kami memilih kluster di wilayah tersebuteastus
:apiVersion: placement.kubernetes-fleet.io/v1 kind: ClusterResourcePlacement metadata: name: kuard-demo spec: resourceSelectors: - group: "" version: v1 kind: Namespace name: kuard-demo policy: affinity: clusterAffinity: requiredDuringSchedulingIgnoredDuringExecution: clusterSelectorTerms: - labelSelector: matchLabels: fleet.azure.com/location: eastus
Terapkan
ClusterResourcePlacement
:KUBECONFIG=fleet kubectl apply -f crp-2.yaml
Jika berhasil, output terlihat mirip dengan contoh berikut:
clusterresourceplacement.placement.kubernetes-fleet.io/kuard-demo created
Periksa status
ClusterResourcePlacement
:KUBECONFIG=fleet kubectl get clusterresourceplacements
Jika berhasil, output terlihat mirip dengan contoh berikut:
NAME GEN SCHEDULED SCHEDULEDGEN APPLIED APPLIEDGEN AGE kuard-demo 1 True 1 True 1 20s
Membuat MultiClusterService untuk memuat keseimbangan di seluruh titik akhir layanan di beberapa kluster anggota
Periksa apakah layanan berhasil diekspor untuk kluster anggota di
eastus
wilayah:KUBECONFIG=aks-member-1 kubectl get serviceexport kuard --namespace kuard-demo
Output terlihat mirip dengan contoh berikut:
NAME IS-VALID IS-CONFLICTED AGE kuard True False 25s
KUBECONFIG=aks-member-2 kubectl get serviceexport kuard --namespace kuard-demo
Output terlihat mirip dengan contoh berikut:
NAME IS-VALID IS-CONFLICTED AGE kuard True False 55s
Anda akan melihat bahwa layanan valid untuk ekspor (
IS-VALID
bidang adalahtrue
) dan tidak memiliki konflik dengan ekspor lain (IS-CONFLICT
adalahfalse
).Catatan
Mungkin perlu waktu satu atau dua menit agar ServiceExport disebarluaskan.
Buat
MultiClusterService
pada satu anggota untuk memuat keseimbangan di seluruh titik akhir layanan dalam kluster ini:KUBECONFIG=aks-member-1 kubectl apply -f https://raw.githubusercontent.com/Azure/AKS/master/examples/fleet/kuard/kuard-mcs.yaml
Catatan
Untuk mengekspos layanan melalui IP internal, bukan IP publik, tambahkan anotasi ke MultiClusterService:
apiVersion: networking.fleet.azure.com/v1alpha1 kind: MultiClusterService metadata: name: kuard namespace: kuard-demo annotations: service.beta.kubernetes.io/azure-load-balancer-internal: "true" ...
Output terlihat mirip dengan contoh berikut:
multiclusterservice.networking.fleet.azure.com/kuard created
Verifikasi bahwa MultiClusterService valid dengan menjalankan perintah berikut:
KUBECONFIG=aks-member-1 kubectl get multiclusterservice kuard --namespace kuard-demo
Output akan terlihat mirip dengan contoh berikut:
NAME SERVICE-IMPORT EXTERNAL-IP IS-VALID AGE kuard kuard <a.b.c.d> True 40s
Bidang
IS-VALID
harus dalamtrue
output. Lihat alamat IP load balancer eksternal (EXTERNAL-IP
) dalam output. Mungkin perlu waktu beberapa saat sebelum impor sepenuhnya diproses dan alamat IP tersedia.Jalankan perintah berikut beberapa kali menggunakan alamat IP load balancer eksternal:
curl <a.b.c.d>:8080 | grep addrs
Perhatikan bahwa IP pod yang melayani permintaan berubah dan bahwa pod ini berasal dari kluster
aks-member-1
anggota danaks-member-2
dari wilayah tersebuteastus
. Anda dapat memverifikasi IP pod dengan menjalankan perintah berikut pada kluster darieastus
wilayah:KUBECONFIG=aks-member-1 kubectl get pods -n kuard-demo -o wide
KUBECONFIG=aks-member-2 kubectl get pods -n kuard-demo -o wide
Azure Kubernetes Service