Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym artykule dowiesz się, jak spakować węzły w celu zwiększenia wykorzystania węzłów dla klastrów usługi Azure Kubernetes Service (AKS) przy użyciu wtyczki planowania w drzewie, NodeResourcesFit. Domyślny harmonogram usługi AKS działa w NodeResourcesFit:LeastAllocated trybie, który określa priorytety węzłów o niższym wykorzystaniu przy użyciu zasobników planowania. Konfigurowalne profile harmonogramu w usłudze AKS umożliwiają zmianę tego domyślnego zachowania i dostosowanie konfiguracji w celu nadania priorytetów węzłom o wyższym wykorzystaniu. Ta dokumentacja obejmuje trzy różne niestandardowe profile harmonizatora, podkreślając zalecenia dotyczące najlepszych praktyk w celu poprawy wykorzystania przy jednoczesnym zmniejszeniu gorących punktów węzłów.
Pakowanie węzłów to strategia planowania, która maksymalizuje wykorzystanie zasobów przez zwiększenie gęstości zasobników na węzłach, a nie rozłożenie zasobników w puli węzłów lub autoskalowanie węzłów przedwcześnie. Algorytm pakowania pomaga zminimalizować zmarnowane zasoby i może zmniejszyć koszty operacyjne związane z utrzymywaniem węzłów znajdujących się w stanie bezczynności lub niedostatecznie wykorzystanych. Poprawienie wydajności wykorzystania węzłów ma kluczowe znaczenie, ponieważ dane pokazują, że procesor CPU oraz pamięć są często nadmiernie przydzielanymi zasobami. Ponadto wraz ze wzrostem wdrażania procesora GPU efektywne wykorzystanie akceleratorów staje się równie krytyczne ze względu na ich względną niedobór i koszty.
Ograniczenia
- Usługa AKS obecnie nie zarządza wdrażaniem harmonogramów innych firm ani wtyczek planowania poza drzewem.
- Usługa AKS nie obsługuje wtyczek planowania typu "in-tree" przeznaczonych dla
aks-systemscheduler. To ograniczenie ma na celu zapobieganie nieoczekiwanym zmianom dodatków usługi AKS włączonym w klastrze. Ponadto nie można zdefiniowaćprofile, który jest nazywanyaks-system.
Wymagania wstępne
- Wersja Azure CLI
2.76.0lub nowsza. Uruchom polecenieaz --version, aby znaleźć wersję i uruchomić polecenieaz upgrade, aby uaktualnić wersję. Jeśli musisz zainstalować lub uaktualnić, zobacz Install Azure CLI. - Wersja
1.33platformy Kubernetes lub nowsza działająca w klastrze AKS. - Wersja
aks-preview. - Zarejestruj
UserDefinedSchedulerConfigurationPrevieww subskrypcji Azure.
Włącz profil konfiguracyjny harmonogramu w klastrze AKS
Można włączyć konfigurację profilu harmonogramu na nowym lub istniejącym klastrze AKS.
Utwórz klaster AKS z włączoną konfiguracją profilu harmonogramu przy użyciu polecenia
az aks createz użyciem flagi--enable-upstream-kubescheduler-user-configuration.# Set environment variables export RESOURCE_GROUP=<resource-group-name> export CLUSTER_NAME=<aks-cluster-name> # Create an AKS cluster with schedule profile configuration enabled az aks create \ --resource-group $RESOURCE_GROUP \ --name $CLUSTER_NAME \ --enable-upstream-kubescheduler-user-configuration \ --generate-ssh-keysPo zakończeniu procesu tworzenia połącz się z klastrem
az aks get-credentialsprzy użyciu polecenia .az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME
Weryfikowanie instalacji kontrolera harmonogramu
Po włączeniu funkcji w klastrze usługi AKS sprawdź, czy niestandardowa definicja zasobu (CRD) kontrolera harmonogramu została pomyślnie zainstalowana, używając polecenia
kubectl get.kubectl get crd schedulerconfigurations.aks.azure.comUwaga / Notatka
To polecenie nie powiedzie się, jeśli funkcja nie została pomyślnie włączona w poprzedniej sekcji.
Konfigurowanie pakowania bin-węzła za pomocą wtyczki RequestedtoCapacity
Spośród trzech profilów RequestedToCapacityRatio zapewnia najbardziej szczegółową kontrolę użytkownika na potrzeby mapowania węzłów na jawne wykorzystanie. Na przykład ten profil planowania został skonfigurowany do faworyzowania węzłów w ramach przedziału wykorzystania 50–85%, unikać pustych węzłów i poważnie deprioritizować prawie pełne węzły na poziomie 90% wykorzystania lub więcej, pozostawiając trochę miejsca pracy. Biorąc pod uwagę ten poziom szczegółowości, RequestedtoCapacity jest zalecaną strategią oceny dla pakowania węzłów w usłudze AKS dla klastrów produkcyjnych.
Ta konfiguracja sprawia, że wykorzystanie procesora jest dominującym czynnikiem w wyborze węzła, optymalizując użycie węzłów przy jednoczesnym unikaniu nadmiernego przeciążenia aplikacji wymagających dużej mocy obliczeniowej. Na koniec należy wyłączyć wtyczkę PodTopologySpread, ponieważ w przeciwnym razie może zastąpić ważony wynik z NodeResourcesFit przy ustawieniu jej domyślnie na włączony.
-
NodeResourcesFitsteruje sposobem, w jaki harmonogram ocenia, czy węzeł ma wystarczające zasoby do uruchomienia pod. -
scoringStrategy: RequestedToCapacityRatioocenia węzły na podstawie stosunku żądanych zasobów do całkowitej pojemności węzła po hipotetycznym umieszczeniu zasobnika. -
Resourcesokreśla, żeCPUiMemorysą zasobami podstawowymi, które są brane pod uwagę do oceniania. Z wagą8węzły z zużyciem zasobów procesora są oceniane 8 razy wyżej niż pamięć podczas cyklu planowania zasobników. Zwiększa to prawdopodobieństwo wybrania węzłów o wysokim wykorzystaniu. -
shape:mapuje wykorzystanie węzła do wyniku harmonogramu. Każdy punkt reprezentuje wartość procentową wykorzystania i odpowiadający jej wynik z liniowym wynikiem między punktami.
apiVersion: aks.azure.com/v1alpha1
kind: SchedulerConfiguration
metadata:
name: upstream
spec:
rawConfig: |
apiVersion: kubescheduler.config.k8s.io/v1
kind: KubeSchedulerConfiguration
profiles:
- schedulerName: cpu-binpack-scheduler-RtC
plugins:
multiPoint:
enabled:
- name: NodeResourcesFit
disabled:
- name: PodTopologySpread
pluginConfig:
- name: NodeResourcesFit
args:
apiVersion: kubescheduler.config.k8s.io/v1
kind: NodeResourcesFitArgs
scoringStrategy:
type: RequestedToCapacityRatio
resources:
- name: cpu
weight: 8
- name: memory
weight: 1
requestedToCapacityRatio:
shape:
- utilization: 0
score: 0
- utilization: 30
score: 9
- utilization: 50
score: 10
- utilization: 85
score: 10
- utilization: 90
score: 5
- utilization: 100
score: 0
Konfigurowanie pakowania węzła za pomocą wtyczki MostAllocated
Konfigurowanie harmonogramu z MostAllocated wyłącznie ustawia węzły według priorytetu na podstawie użycia zasobów. Im wyższe wykorzystanie zasobów, tym wyższą ocenę uzyskuje węzeł, unikając nieużywanych węzłów lub skalowania aż do momentu, gdy jest to konieczne. W izolacji ta konfiguracja ryzykuje przeciążeniem węzłów przekraczając pożądane limity, co powoduje zmniejszenie przepustowości lub powstawanie dodatkowych wąskich gardeł.
Ta konfiguracja sprawia, że użycie procesora CPU jest dominującym czynnikiem w wyborze węzła. Aby zapewnić spójne zachowanie, należy wyłączyć wtyczkę PodTopologySpread, ponieważ może zastąpić ważony wynik z NodeResourcesFit, jeśli domyślnie jest włączona.
-
NodeResourcesFitsteruje sposobem, w jaki harmonogram ocenia, czy węzeł ma wystarczające zasoby do uruchomienia pod. -
scoringStrategy: MostAllocatedpunktuje na podstawie żądań podów.MostAllocatedinformuje harmonizer, aby preferować węzły o wysokim użyciu zasobów. Ta strategia promuje gęste umieszczanie zasobników i pomaga osiągnąć lepsze wykorzystanie węzłów. -
Resourcesokreśla, żeCPUiMemorysą zasobami podstawowymi, które są brane pod uwagę do oceniania. Z wagą8węzły z zużyciem zasobów procesora są oceniane 8 razy wyżej niż pamięć podczas cyklu planowania zasobników. Zwiększa to prawdopodobieństwo wybrania węzłów o wysokim wykorzystaniu.
apiVersion: aks.azure.com/v1alpha1
kind: SchedulerConfiguration
metadata:
name: upstream
spec:
rawConfig: |
apiVersion: kubescheduler.config.k8s.io/v1
kind: KubeSchedulerConfiguration
profiles:
- schedulerName: cpu-binpack-scheduler-mA
plugins:
multiPoint:
enabled:
- name: NodeResourcesFit
disabled:
- name: PodTopologySpread
pluginConfig:
# NodeResourcesFit configuration
- name: NodeResourcesFit
args:
apiVersion: kubescheduler.config.k8s.io/v1
kind: NodeResourcesFitArgs
scoringStrategy:
type: MostAllocated
resources:
- name: cpu
weight: 8
- name: memory
weight: 1
Konfigurowanie pakowania bin-węzła przy użyciu wtyczek MostAllocated i NodeResourcesBalancedAllocation
Ta konfiguracja ma na celu dodanie pewnych barier zabezpieczających do prostej i wydajnej strategii MostAllocated przez ocenianie węzłów w oparciu o zrównoważone użycie zasobów docelowych.
NodeResourcesBalancedAllocation zachęca do umieszczania zasobników w węzłach z proporcjonalnym wykorzystaniem zdefiniowanym przez użytkownika, zwiększając ogólną wydajność przy jednoczesnym unikaniu wąskich gardeł spowodowanych przez asymetryczne wykorzystanie zasobów. Na przykład węzły obciążone obliczeniami CPU z obfitą nieużywaną pamięcią otrzymałyby niższą ocenę na rzecz węzłów z lepszą równowagą wykorzystania CPU i pamięci.
-
NodeResourcesBalancedAllocationocenia węzły w oparciu o sposób zrównoważonego użycia zasobów w wielu zasobach. Zamiast maksymalizować wykorzystanie pojedynczego zasobu, wtyczka ta preferuje węzły, w których zużycie zasobów jest proporcjonalne. -
Resourcesokreśla, które zasoby są brane pod uwagę podczas oceny salda. Przy równym ważeniu procesora i pamięci węzły są oceniane wyżej, gdy oba zasoby są w równym stopniu wykorzystywane.
apiVersion: aks.azure.com/v1alpha1
kind: SchedulerConfiguration
metadata:
name: upstream
spec:
rawConfig: |
apiVersion: kubescheduler.config.k8s.io/v1
kind: KubeSchedulerConfiguration
profiles:
- schedulerName: cpu-binpack-scheduler-mA-BalancedAllocation
plugins:
multiPoint:
enabled:
- name: NodeResourcesFit
- name: NodeResourcesBalancedAllocation
disabled:
- name: PodTopologySpread
pluginConfig:
# NodeResourcesFit configuration
- name: NodeResourcesFit
args:
apiVersion: kubescheduler.config.k8s.io/v1
kind: NodeResourcesFitArgs
scoringStrategy:
type: MostAllocated
resources:
- name: cpu
weight: 8
- name: memory
weight: 1
- name: NodeResourcesBalancedAllocation
args:
apiVersion: kubescheduler.config.k8s.io/v1
kind: NodeResourcesBalancedAllocationArgs
resources:
- name: cpu
weight: 1
- name: memory
weight: 1
Przypisz profil harmonogramu do całego klastra AKS
Utwórz plik o nazwie
cpu-bin-packing-scheduler.yaml, z CRD o nazwieupstreamZastosuj manifest konfiguracji planowania przy użyciu
kubectl applypolecenia .kubectl apply -f cpu-bin-packing-scheduler.yamlAby skierować ten mechanizm planowania dla określonych obciążeń, zaktualizuj wdrożenia podów używając następującego
schedulerName:... ... spec: schedulerName: binpacking-scheduler ... ...
Następne kroki
Aby dowiedzieć się więcej o harmonogramie usługi AKS, innych konfiguracjach i najlepszych rozwiązaniach, zobacz następujące zasoby:
- Najlepsze rozwiązania dotyczące harmonogramu usługi Azure Kubernetes Service (AKS)
- Najlepsze rozwiązania dotyczące zaawansowanych zasad planowania
- Monitoruj metryki i dzienniki zasobów AKS