Bagikan melalui


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 dan MultiClusterService 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.

  • 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
    

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.

  1. Buat namespace pada kluster armada:

    KUBECONFIG=fleet kubectl create namespace kuard-demo
    

    Output terlihat mirip dengan contoh berikut:

    namespace/kuard-demo created
    
  2. 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
    
  3. Buat yang berikut ini ClusterResourcePlacement dalam file yang disebut crp-2.yaml. Perhatikan bahwa kami memilih kluster di wilayah tersebut eastus :

    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
    
  4. 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
    
  5. 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

  1. 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 adalah true) dan tidak memiliki konflik dengan ekspor lain (IS-CONFLICT adalah false).

    Catatan

    Mungkin perlu waktu satu atau dua menit agar ServiceExport disebarluaskan.

  2. 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
    
  3. 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 dalam true output. Lihat alamat IP load balancer eksternal (EXTERNAL-IP) dalam output. Mungkin perlu waktu beberapa saat sebelum impor sepenuhnya diproses dan alamat IP tersedia.

  4. 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 dan aks-member-2 dari wilayah tersebut eastus . Anda dapat memverifikasi IP pod dengan menjalankan perintah berikut pada kluster dari eastus 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