Inteligentne umieszczanie zasobów kubernetes między klastrami przy użyciu usługi Azure Kubernetes Fleet Manager (wersja zapoznawcza)
Deweloperzy aplikacji często muszą wdrażać zasoby kubernetes w wielu klastrach. Operatorzy floty często muszą wybierać najlepsze klastry do umieszczania obciążeń na podstawie heurystyki, takich jak koszt obliczeń w klastrach lub dostępnych zasobów, takich jak pamięć i procesor CPU. Żmudne jest ręczne tworzenie, aktualizowanie i śledzenie tych zasobów Kubernetes w wielu klastrach. W tym artykule opisano, jak usługa Azure Kubernetes Fleet Manager (Kubernetes Fleet) umożliwia rozwiązanie tych scenariuszy przy użyciu funkcji inteligentnego umieszczania zasobów Kubernetes.
Omówienie
Platforma Kubernetes Fleet zapewnia możliwość umieszczania zasobów, które mogą podejmować decyzje dotyczące planowania na podstawie następujących właściwości:
- Liczba węzłów
- Koszt obliczeń w docelowych klastrach członkowskich
- Dostępność zasobów (procesora CPU/pamięci) w docelowych klastrach składowych
Ważne
Funkcje usługi Azure Kubernetes Fleet Manager w wersji zapoznawczej są dostępne na zasadzie samoobsługi. Wersje zapoznawcze są udostępniane w wersji "as is" i "jako dostępne" i są wykluczone z umów dotyczących poziomu usług i ograniczonej gwarancji. Wersje zapoznawcze usługi Azure Kubernetes Fleet Manager są częściowo objęte pomocą techniczną w oparciu o najlepsze nakłady pracy. W związku z tym te funkcje nie są przeznaczone do użytku produkcyjnego.
Wymagania wstępne
- Zapoznaj się z omówieniem koncepcyjnym propagacji zasobów, aby zrozumieć pojęcia i terminologię używaną w tym przewodniku Szybki start.
- Konto platformy Azure z aktywną subskrypcją. Utwórz konto bezpłatnie.
- Potrzebny jest zasób Fleet z klastrem centrum i klastrami członkowskimi. Jeśli go nie masz, zobacz Create an Azure Kubernetes Fleet Manager resource and join member clusters using Azure CLI (Tworzenie zasobu usługi Azure Kubernetes Fleet Manager i dołączanie do klastrów członkowskich przy użyciu interfejsu wiersza polecenia platformy Azure).
- Potrzebujesz dostępu do interfejsu API kubernetes klastra koncentratora. Jeśli nie masz dostępu, zobacz Access the Kubernetes API of the Fleet resource with Azure Kubernetes Fleet Manager (Uzyskiwanie dostępu do interfejsu API platformy Kubernetes w zasobie Fleet Manager za pomocą usługi Azure Kubernetes Fleet Manager).
Filtrowanie klastrów w czasie planowania na podstawie właściwości klastra członkowskiego
requiredDuringSchedulingIgnoredDuringExecution, typ koligacji umożliwia filtrowanie klastrów członkowskich kwalifikujących się do umieszczania przy użyciu selektorów właściwości. Selektor właściwości to tablica warunków wyrażeń względem właściwości klastra.
W każdym warunku, który określisz:
Nazwa: nazwa właściwości, która powinna mieć następujący format:
resources.kubernetes-fleet.io/<CAPACITY-TYPE>-<RESOURCE-NAME>
<CAPACITY-TYPE>
jest jednym ztotal
,allocatable
lubavailable
, w zależności od pojemności (informacji o użyciu), względem której chcesz sprawdzić, i<RESOURCE-NAME>
jest nazwą zasobu (procesor/pamięć).Jeśli na przykład chcesz wybrać klastry na podstawie dostępnej pojemności procesora CPU klastra, nazwa używana w selektorze właściwości powinna mieć wartość
resources.kubernetes-fleet.io/available-cpu
. W przypadku pojemności pamięci możliwej do przysyłaniania można użyć poleceniaresources.kubernetes-fleet.io/allocatable-memory
.Lista wartości, które są możliwymi wartościami właściwości.
Operator używany do wyrażania warunku między ograniczeniem/żądaną wartością a obserwowaną wartością w klastrze. Obecnie obsługiwane są następujące operatory:
Gt
(Większe niż): obserwowana wartość danej właściwości klastra musi być większa niż wartość warunku, zanim będzie można ją wybrać do umieszczania zasobów.Ge
(Większe lub równe): obserwowana wartość danej właściwości klastra musi być większa lub równa wartości w warunku, zanim będzie można ją wybrać do umieszczania zasobów.Lt
(Mniej niż): obserwowana wartość danej właściwości klastra musi być mniejsza niż wartość warunku, zanim będzie można ją wybrać do umieszczania zasobów.Le
(Mniejsze niż lub równe): obserwowana wartość danej właściwości klastra musi być mniejsza lub równa wartości w warunku, zanim będzie można ją wybrać do umieszczania zasobów.Eq
(Równe): obserwowana wartość danej właściwości klastra musi być równa wartości w warunku, zanim będzie można ją wybrać do umieszczania zasobów.Ne
(Nie równe): obserwowana wartość danej właściwości klastra nie może być równa wartości warunku, zanim będzie można ją wybrać do umieszczania zasobów.
Jeśli używasz operatora
Gt
, ,Ge
,Lt
Le
,Eq
lubNe
, lista wartości w warunku powinna mieć dokładnie jedną wartość.
Fleet ocenia każdy klaster na podstawie właściwości określonych w warunku. Niepowodzenie spełnienia warunków wymienionych w obszarze requiredDuringSchedulingIgnoredDuringExecution
wyklucza ten klaster członkowski z umieszczania zasobów.
Uwaga
Jeśli klaster członkowski nie ma właściwości wyrażonej w warunku, automatycznie zakończy się niepowodzeniem warunku.
Przykładowe zasady umieszczania do wybierania tylko klastrów z większą lub równą pięcioma węzłami na potrzeby umieszczania zasobów:
apiVersion: placement.kubernetes-fleet.io/v1beta1
kind: ClusterResourcePlacement
metadata:
name: crp
spec:
resourceSelectors:
- ...
policy:
placementType: PickAll
affinity:
clusterAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
clusterSelectorTerms:
- propertySelector:
matchExpressions:
- name: "kubernetes.azure.com/node-count"
operator: Ge
values:
- "5"
Możesz użyć zarówno selektorów etykiet, jak i właściwości w requiredDuringSchedulingIgnoredDuringExecution
ramach terminu koligacji, aby filtrować kwalifikujące się klastry członkowskie w obu tych ograniczeniach.
apiVersion: placement.kubernetes-fleet.io/v1beta1
kind: ClusterResourcePlacement
metadata:
name: crp
spec:
resourceSelectors:
- ...
policy:
placementType: PickAll
affinity:
clusterAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
clusterSelectorTerms:
- labelSelector:
matchLabels:
region: east
propertySelector:
matchExpressions:
- name: "kubernetes.azure.com/node-count"
operator: Ge
values:
- "5"
W tym przykładzie platforma Kubernetes Fleet uwzględnia klaster tylko do umieszczania zasobów, jeśli ma etykietę region=east
i liczbę węzłów większą lub równą pięciu.
Klasyfikacja klastrów kolejności w czasie planowania na podstawie właściwości klastra członkowskiego
Gdy preferredDuringSchedulingIgnoredDuringExecution
jest używany, sortator właściwości klasyfikuje wszystkie klastry w floty na podstawie ich wartości w kolejności rosnącej lub malejącej. Wagi są obliczane na podstawie wartości wagi określonej w obszarze preferredDuringSchedulingIgnoredDuringExecution
.
Sorter właściwości składa się z:
- Nazwa: nazwa właściwości z większą ilością informacji o formatowaniu właściwości omówionej w poprzedniej sekcji.
- Kolejność sortowania: kolejność sortowania może mieć wartość
Ascending
lubDescending
. GdyAscending
jest używana kolejność, flota Kubernetes preferuje klastry członkowskie z niższymi obserwowanymi wartościami. W przypadkuDescending
użycia kolejności preferowane są klastry członkowskie o wyższej obserwowanej wartości.
W przypadku kolejności Descending
sortowania proporcjonalna waga jest obliczana przy użyciu formuły:
((Observed Value - Minimum observed value) / (Maximum observed value - Minimum observed value)) * Weight
Załóżmy na przykład, że chcesz sklasyfikować klastry na podstawie właściwości dostępnej pojemności procesora CPU w kolejności malejącej i że masz flotę trzech klastrów z następującym dostępnym procesorem CPU:
Klaster | Dostępna pojemność procesora CPU |
---|---|
bravelion |
100 |
smartfish |
20 |
jumpingcat |
10 |
W tym przypadku sorter oblicza następujące wagi:
Klaster | Dostępna pojemność procesora CPU | Weight |
---|---|---|
bravelion |
100 | (100-10) / (100 - 10) = 100% wagi |
smartfish |
20 | (20 - 10) / (100 - 10) = 11,11% wagi |
jumpingcat |
10 | (10 - 10) / (100 - 10) = 0% wagi |
W przypadku kolejności Ascending
sortowania proporcjonalna waga jest obliczana przy użyciu formuły:
(1 - ((Observed Value - Minimum observed value) / (Maximum observed value - Minimum observed value))) * Weight
Załóżmy na przykład, że chcesz sklasyfikować klastry na podstawie ich kosztu rdzenia procesora CPU w kolejności rosnącej i że masz flotę trzech klastrów z następującymi kosztami rdzeni procesora CPU:
Klaster | Koszt rdzenia procesora CPU |
---|---|
bravelion |
1 |
smartfish |
0,2 |
jumpingcat |
0.1 |
W tym przypadku sorter oblicza następujące wagi:
Klaster | Koszt rdzenia procesora CPU | Weight |
---|---|---|
bravelion |
1 | 1 - ((1 - 0,1) / (1 - 0,1)) = 0% wagi |
smartfish |
0,2 | 1 - ((0,2 - 0,1) / (1 - 0,1)) = 88,89% wagi |
jumpingcat |
0.1 | 1 - (0,1 - 0,1) / (1 - 0,1) = 100% wagi |
W poniższym przykładzie przedstawiono sortowanie właściwości przy użyciu Descending
kolejności:
apiVersion: placement.kubernetes-fleet.io/v1beta1
kind: ClusterResourcePlacement
metadata:
name: crp
spec:
resourceSelectors:
- ...
policy:
placementType: PickN
numberOfClusters: 10
affinity:
clusterAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 20
preference:
metricSorter:
name: kubernetes.azure.com/node-count
sortOrder: Descending
W tym przykładzie flota preferuje klastry o wyższych liczbach węzłów. Klaster z największą liczbą węzłów otrzyma wagę 20, a klaster o najniższym poziomie otrzyma 0. Inne klastry otrzymują proporcjonalne wagi obliczane przy użyciu formuły obliczania wagi.
Można użyć selektora etykiet i sortowania właściwości w ramach preferredDuringSchedulingIgnoredDuringExecution
koligacji. Klaster członkowski, który kończy się niepowodzeniem selektora etykiet, nie otrzyma żadnej wagi. Klastry członkowskie spełniające selektor etykiet otrzymują proporcjonalne wagi, jak określono w obszarze sortowania właściwości.
apiVersion: placement.kubernetes-fleet.io/v1beta1
kind: ClusterResourcePlacement
metadata:
name: crp
spec:
resourceSelectors:
- ...
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
W tym przykładzie klaster otrzyma dodatkową wagę tylko wtedy, gdy ma etykietę env=prod
. Jeśli spełnia to ograniczenie oparte na etykiecie, klaster ma proporcjonalną wagę na podstawie całkowitej ilości procesora CPU w tym klastrze członkowskim.
Czyszczenie zasobów
Jeśli nie chcesz już używać ClusterResourcePlacement
obiektów utworzonych w tym artykule, możesz je usunąć za pomocą kubectl delete
polecenia . Na przykład:
kubectl delete clusterresourceplacement <name-of-the-crp-resource>
Następne kroki
Aby dowiedzieć się więcej na temat propagacji zasobów, zobacz następujące zasoby:
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla