Sdílet prostřednictvím


Inteligentní umístění prostředků Kubernetes napříč clustery pomocí Azure Kubernetes Fleet Manageru

Vývojáři aplikací často potřebují nasazovat prostředky Kubernetes do několika clusterů. Operátoři flotily často potřebují vybrat nejlepší clustery pro úlohy na základě heuristiky, jako jsou náklady na výpočetní prostředky nebo dostupné prostředky, jako je paměť a procesor. Je zdlouhavé vytvářet, aktualizovat a sledovat tyto prostředky Kubernetes napříč několika clustery ručně. Tento článek popisuje, jak Azure Kubernetes Fleet Manager (Fleet) umožňuje řešit tyto scénáře pomocí inteligentní funkce umístění prostředků Kubernetes.

Přehled

Fleet poskytuje možnost umístění prostředků, která může provádět rozhodnutí o plánování na základě následujících vlastností clusteru:

  • Počet uzlů
  • Náklady na výpočetní prostředky nebo paměť v cílových členských clusterech
  • Dostupnost prostředků (PROCESOR/paměť) v cílových členských clusterech

Přečtěte si koncepční přehled šíření prostředků a seznamte se s koncepty použitými v tomto postupu.

Požadavky

  • Účet Azure s aktivním předplatným. Vytvoření účtu zdarma

  • Musíte mít prostředek Fleet s jedním nebo více členy clusteru. Pokud ne, postupujte podle tohoto rychlého startu a vytvořte prostředek Fleet s clusterem centra a pak připojte clustery Azure Kubernetes Service (AKS) jako členy.

    Doporučení: Ujistěte se, že jsou vaše členské clustery AKS nakonfigurované, abyste mohli otestovat umístění pomocí vlastností clusteru, které vás zajímají (umístění, počet uzlů, prostředky nebo náklady).

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

    export GROUP=<resource-group>
    export FLEET=<fleet-name>
    export MEMBERCLUSTER01=<cluster01>
    export MEMBERCLUSTER02=<cluster02>
    
  • K dokončení tohoto postupu potřebujete azure CLI verze 2.58.0 nebo novější. Pokud chcete nainstalovat nebo upgradovat, přečtěte si téma Instalace Azure CLI.

  • Pokud ho ještě nemáte, můžete rozhraní příkazového řádku Kubernetes (kubectl) nainstalovat pomocí tohoto příkazu:

    az aks install-cli
    
  • Potřebujete fleet také rozšíření Azure CLI, které můžete nainstalovat spuštěním následujícího příkazu:

    az extension add --name fleet
    

    Spuštěním az extension update příkazu aktualizujte nejnovější verzi vydaného rozšíření:

    az extension update --name fleet
    
  • Autorizace kubectl pro připojení ke clusteru centra flotily:

    az fleet get-credentials --resource-group $GROUP --name $FLEET
    

Kontrola vlastností člena clusteru

Tento postup opakujte pro každý členský cluster, který přidáte.

  • Načtěte popisky, vlastnosti a prostředky pro váš členský cluster dotazováním clusteru centra. Výstup jako YAML, abyste mohli číst výsledky.

    kubectl get membercluster $MEMBERCLUSTER01 –o yaml
    

    Výsledný soubor YAML obsahuje podrobnosti (popisky a vlastnosti), které můžete použít k sestavení zásad umístění.

    apiVersion: cluster.kubernetes-fleet.io/v1
    kind: MemberCluster
    metadata:
      annotations:
        ...
      labels:
        fleet.azure.com/location: eastus2
        fleet.azure.com/resource-group: resource-group
        fleet.azure.com/subscription-id: 8xxxxxxx-dxxx-4xxx-bxxx-xxxxxxxxxxx8
      name: cluster01
      resourceVersion: "123456"
      uid: 7xxxxxxx-5xxx-4xxx-bxxx-xxxxxxxxxxx4
    spec:
      ...
    status:
      ...
      properties:
        kubernetes-fleet.io/node-count:
          observationTime: "2024-09-19T01:33:54Z"
          value: "2"
        kubernetes.azure.com/per-cpu-core-cost:
          observationTime: "2024-09-19T01:33:54Z"
          value: "0.073"
        kubernetes.azure.com/per-gb-memory-cost:
          observationTime: "2024-09-19T01:33:54Z"
          value: "0.022"
      resourceUsage:
        allocatable:
          cpu: 3800m
          memory: 10320392Ki
        available:
          cpu: 2740m
          memory: 8821256Ki
        capacity:
          cpu: "4"
          memory: 14195208Ki
    

    Tento krok opakujte pro každý členský cluster, abyste identifikovali popisky a vlastnosti, které můžete použít ve svých zásadách.

Příprava úlohy na umístění

Dále publikujte úlohu do clusteru centra, aby ji bylo možné umístit do členských clusterů.

  • Vytvořte obor názvů pro naši úlohu v clusteru centra.

    kubectl create namespace test-app 
    
  • Ukázkovou úlohu je možné nasadit do nového oboru názvů v clusteru centra. Vzhledem k tomu, že tyto typy prostředků Kubernetes nevyžadují zapouzdření , je možné je nasadit beze změny.

    Uložte následující YAML do souboru s názvem sample-workload.yaml.

    apiVersion: v1
    kind: Service
    metadata:
      name: nginx-service
      namespace: test-app
    spec:
      selector:
        app: nginx
      ports:
      - protocol: TCP
        port: 80
        targetPort: 80
      type: LoadBalancer
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deployment
      namespace: test-app
    spec:
      selector:
        matchLabels:
          app: nginx
      replicas: 2
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx:1.16.1 
            ports:
            - containerPort: 80
    

    Pomocí příkazu nasaďte definici úlohy do clusteru centra.

    kubectl apply -f sample-workload.yaml 
    

    S nasazenou definicí úloh je teď možné otestovat inteligentní možnosti umístění vozového parku.

Testování zásad umístění úloh

Následující ukázky můžete použít společně s koncepční dokumentací jako příručky k psaní vlastního ClusterResourcePlacementu.

Poznámka:

Pokud chcete vyzkoušet každou ukázkovou zásadu, nezapomeňte odstranit předchozí ClusterResourcePlacement.

Umístění na základě počtu uzlů clusteru

Tento příklad ukazuje řazení vlastností pomocí Descending pořadí, což znamená, že flotila upřednostňuje clustery s vyšším počtem uzlů.

Cluster s nejvyšším počtem uzlů by získal váhu 20 a cluster s nejnižší hodnotou by získal hodnotu 0. Ostatní shluky přijímají proporcionální váhy vypočítané pomocí vzorce pro výpočet hmotnosti.

apiVersion: placement.kubernetes-fleet.io/v1
kind: ClusterResourcePlacement
metadata:
  name: crp-demo
spec:
  resourceSelectors:
    - group: ""
      kind: Namespace
      name: test-app
      version: v1
  policy:
    placementType: PickN
    numberOfClusters: 10
    affinity:
        clusterAffinity:
            preferredDuringSchedulingIgnoredDuringExecution:
            - weight: 20
              preference:
                metricSorter:
                  name: kubernetes-fleet.io/node-count
                  sortOrder: Descending

Umístění s selektorem popisků a řazením vlastností

V tomto příkladu by cluster obdržel pouze váhu, pokud má popisek env=prod. Pokud toto omezení popisku splňuje, pak je cluster přidělen proporcionální váhu na základě množství celkového procesoru v daném členském clusteru.

Tento příklad ukazuje, jak můžete pro spřažení použít selektor popisků i řazení preferredDuringSchedulingIgnoredDuringExecution vlastností. Členový cluster, který selže selektoru popisku, neobdrží žádnou váhu. Členské clustery, které vyhovují selektoru popisků, přijímají proporcionální váhy, jak je uvedeno v rámci řazení vlastností.

apiVersion: placement.kubernetes-fleet.io/v1
kind: ClusterResourcePlacement
metadata:
  name: crp-demo
spec:
  resourceSelectors:
    - group: ""
      kind: Namespace
      name: test-app
      version: v1
  policy:
    placementType: PickN
    numberOfClusters: 10
    affinity:
        clusterAffinity:
            preferredDuringSchedulingIgnoredDuringExecution:
            - weight: 20
              preference:
                labelSelector:
                  matchLabels:
                    env: prod
                metricSorter:
                  name: resources.kubernetes-fleet.io/total-cpu
                  sortOrder: Descending

Umístění na základě nákladů na paměť a jádro procesoru

Vzhledem k tomu, že řazení v tomto příkladu má Ascending pořadí, dává flotila přednost clusterům s nižšími náklady na paměť a jádra procesoru. Cluster s nejnižšími náklady na paměť a jádro procesoru by získal váhu 20 a cluster s nejvyššími náklady by získal 0. Ostatní shluky přijímají proporcionální váhy vypočítané pomocí vzorce pro výpočet hmotnosti.

apiVersion: placement.kubernetes-fleet.io/v1
kind: ClusterResourcePlacement
metadata:
  name: crp-demo
spec:
  resourceSelectors:
    - group: ""
      kind: Namespace
      name: test-app
      version: v1
  policy:
    placementType: PickN
    numberOfClusters: 2
    affinity:
      clusterAffinity:
        preferredDuringSchedulingIgnoredDuringExecution:
          - weight: 20
            preference:
              propertySorter:
                name: kubernetes.azure.com/per-gb-memory-core-cost
                sortOrder: Ascending
          - weight: 20
            preference:
              propertySorter:
                name: kubernetes.azure.com/per-cpu-core-cost
                sortOrder: Ascending

Zobrazení stavu umístění

Pokud chcete zobrazit stav umístění, můžete použít příkaz Azure Portal nebo kubectl.

Podrobnosti o tom, jak zobrazit průběh umístění, najdete v rychlém startu šíření prostředků.

Vyčištění prostředků

Podrobnosti o tom, jak odebrat umístění prostředků clusteru prostřednictvím webu Azure Portal nebo příkazu kubectl, najdete v části Vyčistit prostředky rychlého startu šíření prostředků.

Další kroky

Další informace o šíření prostředků najdete v následujících zdrojích informací: