Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Programutvecklare behöver ofta distribuera Kubernetes-resurser till flera kluster i molnmiljöer och lokala miljöer. Vagnparksoperatörer behöver ofta välja de bästa klustren för arbetsbelastningar baserat på heuristik (till exempel beräkningskostnader) eller tillgängliga resurser (till exempel minne och CPU). Det är tråkigt att skapa, uppdatera och spåra dessa Kubernetes-resurser i flera kluster manuellt. Den här artikeln beskriver hur du kan hantera dessa scenarier med hjälp av den intelligenta kubernetes-resursplaceringsfunktionen i Azure Kubernetes Fleet Manager.
Funktionen för resursplacering i Fleet Manager kan fatta schemaläggningsbeslut baserat på följande klusteregenskaper:
- Antal noder
- Kostnad för beräkning/minne i målmedlemskluster
- Resurstillgänglighet (CPU/minne) i målmedlemskluster
Mer information om begreppen i den här artikeln finns i Kubernetes-resursplacering från hubbkluster till medlemskluster.
Förutsättningar
Du behöver ett Azure-konto med en aktiv prenumeration. Skapa ett konto utan kostnad.
Du måste ha en Fleet Manager med ett hubbkluster och ett eller flera medlemskluster. Om du inte har någon följer du snabbstarten för att skapa en Fleet Manager med ett hubbkluster. Anslut sedan dina Kubernetes-kluster som stöds som medlemmar.
Tips
Se till att dina Kubernetes-kluster är konfigurerade så att du kan testa placeringen med hjälp av de klusteregenskaper som intresserar dig (plats, antal noder, resurser eller kostnad).
Ange följande miljövariabler:
export GROUP=<resource-group> export FLEET=<fleet-name> export MEMBERCLUSTER01=<cluster01> export MEMBERCLUSTER02=<cluster02>Du behöver Azure CLI version 2.58.0 eller senare installerat för att slutföra den här artikeln. Information om hur du installerar eller uppgraderar finns i Installera Azure CLI.
Om du inte redan har Kubernetes CLI (kubectl) kan du installera det med hjälp av det här kommandot:
az aks install-cliDu behöver Azure CLI-tillägget
fleet. Du kan installera det genom att köra följande kommando:az extension add --name fleetaz extension updateKör kommandot för att uppdatera till den senaste versionen av tillägget:az extension update --name fleetAuktorisera kubectl för att ansluta till Fleet Manager-hubbklustret:
az fleet get-credentials --resource-group $GROUP --name $FLEET
Granska egenskaper för medlemskluster
Hämta etiketter, egenskaper och resurser för ditt medlemskluster genom att fråga hubbklustret. Utdata som YAML så att du kan läsa resultatet.
kubectl get membercluster $MEMBERCLUSTER01 –o yaml
Den resulterande YAML-filen innehåller information (etiketter och egenskaper) som du kan använda för att skapa placeringsprinciper. Här är ett exempel:
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
Upprepa det här steget för varje medlemskluster som du lägger till för att identifiera de etiketter och egenskaper som du kan använda i principen.
Förbered en arbetsbelastning för placering
Publicera sedan en arbetsbelastning till hubbklustret så att den kan placeras på medlemskluster:
Skapa ett namnområde för arbetsbelastningen i hubbklustret:
kubectl create namespace test-appExempelarbetsbelastningen kan distribueras till det nya namnområdet i hubbklustret. Eftersom dessa Kubernetes-resurstyper inte kräver kapsling kan du distribuera dem utan ändringar.
Spara följande YAML i en fil med namnet
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: 80Distribuera arbetsbelastningsdefinitionen till ditt hubbkluster:
kubectl apply -f sample-workload.yaml
När arbetsbelastningsdefinitionen har distribuerats är det nu möjligt att testa fleet manager:s intelligenta placeringskapacitet.
Testa arbetsbelastningsplaceringsprinciper
Du kan använda följande exempel, tillsammans med den konceptuella dokumentationen, som guider för att skriva ditt eget ClusterResourcePlacement objekt.
Kommentar
Om du vill prova varje exempelprincip måste du ta bort föregående ClusterResourcePlacement objekt.
Placering baserat på antalet klusternoder
Det här exemplet visar en egenskapssorterare som använder Descending ordern. Den här ordningen innebär att Fleet Manager föredrar kluster med högre antal noder.
Klustret med det högsta antalet noder får en vikt på 20 och klustret med lägst får en vikt på 0. Andra kluster får proportionella vikter som beräknas via formeln för viktberäkning.
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
Placering med etikettväljare och egenskapssorterare
I det här exemplet får ett kluster endast en vikt om det har etiketten env=prod. Om klustret uppfyller den etikettbegränsningen får det proportionell vikt baserat på mängden total CPU i det medlemsklustret.
Det här exemplet visar hur du kan använda både etikettväljaren och egenskapssorteraren för preferredDuringSchedulingIgnoredDuringExecution tillhörighet. Ett medlemskluster som misslyckas med etikettväljaren får ingen vikt. Medlemskluster som uppfyller etikettväljaren får proportionella vikter enligt vad som anges under egenskapssorteraren.
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
Placering baserat på kostnaden för minne och CPU-kärnor
Eftersom sorteraren i det här exemplet har en Ascending ordning föredrar Fleet Manager kluster med lägre kostnader för minne och CPU-kärnor. Klustret med den lägsta kostnaden för minne och CPU-kärnor får en vikt på 20 och klustret med högst får en vikt på 0. Andra kluster får proportionella vikter som beräknas via formeln för viktberäkning.
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
Visa status för en placering
Om du vill visa status för en placering kan du använda antingen kommandot Azure Portal eller kubectl.
Du hittar information om hur du visar en placerings förlopp i Använd ClusterResourcePlacement-API:et för att sprida resurser till medlemskluster.
Rensa resurser
Mer information om hur du tar bort en klusterresursplacering via kommandot Azure Portal eller kubectl finns i Rensa resurser i artikeln om att sprida resurser.
Relaterat innehåll
- Mer information om resursplacering finns i KubeFleet-dokumentationen med öppen källkod.
Azure Kubernetes Service