Sdílet prostřednictvím


Nastavení vyrovnávání zatížení DNS napříč členskými clustery Azure Kubernetes Fleet Manageru (Preview)

Vyrovnávání zatížení DNS pro Azure Kubernetes Fleet Manager může pomoct zvýšit dostupnost a rozložit zatížení mezi úlohy nasazené v několika členských clusterech. Vzhledem k tomu, že se tato funkce doručuje přes DNS, je možné ji použít k zajištění vyrovnávání zatížení vrstvy 4 a 7 podle potřeby.

Postupujte podle kroků v tomto dokumentu a nastavte vyrovnávání zatížení založeného na DNS pro aplikace s více clustery hostovanými ve vašem vozovém parku.

Důležité

Funkce Azure Kubernetes Fleet Manageru ve verzi Preview jsou dostupné na samoobslužné bázi s výslovným souhlasem. Ukázky jsou poskytovány "jak jsou" a "podle aktuální dostupnosti" a jsou vyloučené ze smluv o úrovni služeb a omezené záruky. Verze Preview Azure Kubernetes Fleet Manageru jsou částečně pokryty zákaznickou podporou s vynaložením maximálního úsilí. Proto tyto funkce nejsou určené pro produkční použití.

Předběžné verze síťových funkcí datové roviny jsou vydávány prostřednictvím našeho networking.fleet.azure.com/v1beta1 rozhraní API. Pokud nevidíte náhledové objekty, zkontrolujte, že při interakci s klastrem centrály Fleet Manager požadujete rozhraní networking.fleet.azure.com/v1beta1 API.

Požadavky

Pokud nemáte účet Azure, vytvořte si bezplatný účet před tím, než začnete.

  • Přečtěte si koncepční přehled této funkce, který vysvětluje TrafficManagerProfile a TrafficManagerBackend odkazované objekty v tomto dokumentu.

  • Správce Kubernetes flotily s centrálním clusterem a spravovanou identitou. Pokud ho nemáte, přečtěte si téma Vytvoření Správce flotily Azure Kubernetes a připojení k členským clusterům pomocí Azure CLI.

  • Dva členské clustery aks-member-1 a aks-member-2, do nichž nasadíte stejnou úlohu za použití funkce umístění prostředků clusterů (CRP) Fleet Manageru.

  • Uživatel, který konfiguraci dokončí, má oprávnění k provádění přiřazení rolí Azure a přístupu k rozhraní Kubernetes API clusteru Centra Fleet Manageru. Další informace najdete v tématu Přístup k rozhraní KUBERNEtes API , kde najdete další podrobnosti.

  • Existující skupina prostředků Azure, která hostuje zřízený prostředek Azure Traffic Manageru.

  • Nastavte následující proměnné prostředí:

    export SUBSCRIPTION_ID=<subscription>
    export GROUP=<resource-group>
    export FLEET=<fleet-name>
    export MEMBER_CLUSTER_1=aks-member-1
    export MEMBER_CLUSTER_2=aks-member-2
    export TRAFFIC_MANAGER_GROUP=rg-flt-tm-demo
    export TRAFFIC_MANAGER_RG_ID="/subscriptions/${SUBSCRIPTION_ID}/resourceGroups/${TRAFFIC_MANAGER_GROUP}
    
  • Získejte přihlašovací údaje pro přístup k rozhraní Kubernetes API clusteru Centra Fleet Manageru:

    az fleet get-credentials \
        --resource-group ${GROUP} \
        --name ${FLEET}
    

Konfigurace oprávnění Správce flotily

Během období Preview je potřeba provést další kroky, které umožní Správci flotily vytvářet a spravovat prostředky Azure Traffic Manageru a získávat veřejné IP adresy služeb vystavených na členských clusterech.

Abyste mohli tento krok dokončit, musíte vytvořit Správce flotily s povolenou spravovanou identitou. Uživatel musí mít oprávnění k přiřazení role Azure RBAC.

  • Získejte identifikační údaje o vašem prostředku pro správu flotily.

    az fleet show \ 
        --resource-group ${GROUP} \
        --name ${FLEET} \
        --query identity
    

    Výstup by měl vypadat podobně jako v příkladu výstupu:

    {
      "principalId": "<FLEET-PRINCIPAL-ID>",
      "tenantId": "<ENTRA-ID-TENANT>",
      "type": "SystemAssigned",
      "userAssignedIdentities": null
    }
    
  • Přiřaďte roli Azure Kubernetes Fleet Manager Hub Agent identitě clusteru centra Fleet Manager a omezte rozsah na existující skupinu prostředků, kde je prostředek Traffic Manageru vytvořen.

    az role assignment create \
        --assignee "<FLEET-PRINCIPAL-ID>" \
        --role "de2b316d-7a2c-4143-b4cd-c148f6a355a1" \
        --scope ${TRAFFIC_MANAGER_RG_ID}
    
  • Identita clusteru Centra Fleet Manageru také potřebuje Azure Kubernetes Fleet Manager Hub Agent roli ve skupině prostředků, která obsahuje veřejné IP adresy služby určené ke zveřejnění, protože Fleet Manager potřebuje číst veřejné IP adresy, když jsou přidány do TrafficMangerBackend prostřednictvím ServiceExport.

    az role assignment create \
        --assignee "<FLEET-PRINCIPAL-ID>" \
        --role "de2b316d-7a2c-4143-b4cd-c148f6a355a1" \
        --scope "/subscriptions/mySubscriptions/resourceGroups/MyPIPResourceGroup"
    

Nasazení úlohy napříč členskými clustery prostředku Fleet

Poznámka:

  • Kroky v tomto návodu odkazují pouze na ukázkovou aplikaci pro demonstrační účely. Tuto pracovní zátěž můžete nahradit libovolnými vlastními existujícími objekty nasazení a služby.

  • Tyto kroky nasadí ukázkovou úlohu z clusteru centra Fleet Manager do členských clusterů pomocí umístění prostředků clusteru Fleet Manageru (CRP). Alternativně se můžete rozhodnout nasadit tyto konfigurace Kubernetes do jednotlivých členských clusterů zvlášť po jednom.

  1. Vytvořte namespace v clusteru hubu Fleet Manager.

    kubectl create namespace kuard-demo
    

    Výstup vypadá nějak takto:

    namespace/kuard-demo created
    
  2. Připravte objekty Deployment, Service, ServiceExport do clusteru centra Fleet Manager uložením následujícího příkazu do souboru s názvem kuard-export-service.yaml:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: kuard
      namespace: kuard-demo
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: kuard
      template:
        metadata:
          labels:
            app: kuard
        spec:
          containers:
            - name: kuard
              image: gcr.io/kuar-demo/kuard-amd64:blue
              resources:
                requests:
                  cpu: 100m
                  memory: 128Mi
                limits:
                  cpu: 250m
                  memory: 256Mi
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: kuard-svc
      namespace: kuard-demo
      labels:
        app: kuard
    spec:
      selector:
        app: kuard
      ports:
        - protocol: TCP
          port: 80
          targetPort: 80
      type: LoadBalancer
    ---
    apiVersion: networking.fleet.azure.com/v1alpha1
    kind: ServiceExport
    metadata:
      name: kuard-export
      namespace: kuard-demo
      annotations:
        networking.fleet.azure.com/weight: "50"
    

    Uspořádejte objekty na clusteru hubu Fleet Manageru:

    kubectl apply -f kuard-export-service.yaml
    

    Specifikace ServiceExport v ukázce umožňuje exportovat službu z členských clusterů do clusteru centra Fleet Manager. Chceme rozdělit provoz rovnoměrně mezi oba clustery, tak abychom nastavili váhovou anotaci ServiceExport na 50. Po úspěšném exportu se služba a všechny její koncové body synchronizují do clusteru centra Fleet Manager a pak se dají použít k nastavení vyrovnávání zatížení DNS napříč těmito koncovými body. Výstup vypadá podobně jako v následujícím příkladu:

    deployment.apps/kuard created
    service/kuard-svc created
    serviceexport.networking.fleet.azure.com/kuard-export created
    
  3. Každá služba potřebuje jedinečný popisek DNS, aby ho bylo možné zpřístupnit prostřednictvím Azure Traffic Manageru. Pomocí umístění ResourceOverride prostředků clusteru Fleet Manager můžete upravit definici služby pro jednotlivé členské clustery a vytvořit jedinečný název založený na oblasti Azure a názvu clusteru. Potřebujete vytvořit přepis pro výběr clusteru, v našem příkladu, podle oblasti Azure.

    apiVersion: placement.kubernetes-fleet.io/v1alpha1
    kind: ResourceOverride
    metadata:
     name: ro-kuard-demo-eastus
     namespace: kuard-demo
    spec:
     placement:
       name: crp-kuard-demo
     resourceSelectors:
       -  group: ""
          kind: Service
          version: v1
          name: kuard-svc
     policy:
       overrideRules:
         - clusterSelector:
             clusterSelectorTerms:
               - labelSelector:
                   matchLabels:
                     fleet.azure.com/location: eastus
           jsonPatchOverrides:
             - op: add
               path: /metadata/annotations
               value:
                 {"service.beta.kubernetes.io/azure-dns-label-name":"fleet-${MEMBER-CLUSTER-NAME}-eastus"}
    

    Poznámka:

    "${MEMBER-CLUSTER-NAME} je přepsání umístění prostředku pomocí rezervované proměnné, která je nahrazena názvem člena clusteru během spouštění."

    kubectl apply -f ro-kuard-demo-eastus.yaml
    
  4. Vytvořte následující umístění prostředků clusteru Fleet Manager (CRP) v souboru s názvem crp-dns-demo.yaml. Všimněte si, že v oblasti vybíráme maximálně dva clustery eastus :

    apiVersion: placement.kubernetes-fleet.io/v1
    kind: ClusterResourcePlacement
    metadata:
      name: crp-dns-demo
    spec:
      resourceSelectors:
        - group: ""
          version: v1
          kind: Namespace
          name: kuard-demo
      policy:
        placementType: PickN
        numberOfClusters: 2
        affinity:
          clusterAffinity:
            requiredDuringSchedulingIgnoredDuringExecution:
              clusterSelectorTerms:
                - labelSelector:
                    matchLabels:
                      fleet.azure.com/location: eastus
    

    Použijte CRP:

    kubectl apply -f crp-dns-demo.yaml
    

    Pokud bude úspěšný, výstup bude vypadat nějak takto:

    clusterresourceplacement.placement.kubernetes-fleet.io/crp-dns-demo created
    

Konfigurace vyrovnávání zatížení DNS pomocí Azure Traffic Manageru

  1. TrafficManagerProfile Definujte parametry, které má Traffic Manager používat, a uložte ho do souboru kuard-atm-demo.yaml.

    apiVersion: networking.fleet.azure.com/v1beta1
    kind: TrafficManagerProfile
    metadata:
      name: kuard-atm-demo
      namespace: kuard-demo
    spec:
      resourceGroup: "rg-flt-tm-demo"
      monitorConfig:
        port: 80
    

    Použijte konfiguraci:

    kubectl apply -f kuard-atm-demo.yaml
    
  2. Definujte odpovídající prvek TrafficManagerBackend, který slouží k seskupení exportovaných položek Service z členských klastrů.

    apiVersion: networking.fleet.azure.com/v1beta1
    kind: TrafficManagerBackend
    metadata:
      name: kuard-atm-demo-backend
      namespace: kuard-demo
    spec:
      profile:
        name: "kuard-atm-demo"
      backend:
        name: "kuard-svc"
      weight: 100
    

    Použijte konfiguraci:

    kubectl apply -f kuard-atm-demo-backend.yaml
    
  3. Spuštěním následujícího příkazu ověřte, že je služba dostupná přes Azure Traffic Manager:

    nslookup kuard-atm-demo.trafficmanager.net
    

    Výstup by měl vypadat zhruba jako v tomto příkladu:

    Server:         10.X.X.254
    Address:        10.X.X.254#53
    
    Non-authoritative answer:
    Name:   kuard-atm-demo.trafficmanger.net
    Address: 123.X.X.16
    Name:   kuard-atm-demo.trafficmanger.net
    Address: 74.X.X.78
    Name:   kuard-atm-demo.trafficmanger.net
    Address: 173.X.X.164
    
  4. Pomocí webového prohlížeče navštivte adresu URL a podívejte se, jak Kuard reaguje. Zkuste vyprázdnit DNS a zkusit znovu zjistit, jestli požadavek obsluhuje jiná instance služby z jiného clusteru.

Snímek obrazovky webové stránky zobrazující podrobnosti z ukázkové aplikace Kuard