Inteligentní umístění prostředků Kubernetes napříč clustery pomocí Azure Kubernetes Fleet Manageru (Preview)
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 umístění úloh na základě heuristiky, jako jsou náklady na výpočetní prostředky v clusterech 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í:
- Počet uzlů
- Náklady na výpočetní prostředky v cílových členských clusterech
- Dostupnost prostředků (PROCESOR/paměť) v cílových členských clusterech
Důležité
Funkce Azure Kubernetes Fleet Manageru ve verzi Preview jsou dostupné na samoobslužné bázi s výslovným souhlasem. Verze Preview jsou poskytovány "tak, jak jsou" a "dostupné", 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 na základě maximálního úsilí. Proto tyto funkce nejsou určené pro produkční použití.
Tento článek popisuje vytváření umístění prostředků clusteru, které je možné provést prostřednictvím Azure CLI nebo webu Azure Portal. Další informace najdete v tématu Šíření prostředků z clusteru Fleet Hub do členských clusterů.
Požadavky
- Přečtěte si koncepční přehled šíření prostředků a seznamte se s koncepty a terminologií používanými v tomto rychlém startu.
- Účet Azure s aktivním předplatným. Vytvoření účtu zdarma
- Potřebujete prostředek Fleet s clusterem rozbočovače a členskými clustery. Pokud ho nemáte, přečtěte si téma Vytvoření prostředku Azure Kubernetes Fleet Manageru a připojení k členským clusterům pomocí Azure CLI.
- Potřebujete přístup k rozhraní Kubernetes API clusteru centra. Pokud nemáte přístup, přečtěte si téma Přístup k rozhraní Kubernetes API prostředku Fleet pomocí Azure Kubernetes Fleet Manageru.
Filtrování clusterů v době plánování na základě vlastností člena clusteru
requiredDuringSchedulingIgnoredDuringExecution spřažení umožňuje filtrovat členské clustery způsobilé pro umístění pomocí selektorů vlastností. Selektor vlastností je pole podmínek výrazu pro vlastnosti clusteru.
V každé podmínce zadáte:
Název: Název vlastnosti, která by měla být v následujícím formátu:
resources.kubernetes-fleet.io/<CAPACITY-TYPE>-<RESOURCE-NAME>
<CAPACITY-TYPE>
je jedna z hodnottotal
,allocatable
neboavailable
, v závislosti na tom, jakou kapacitu (informace o využití) chcete zkontrolovat, a<RESOURCE-NAME>
je název prostředku (procesor/paměť).Pokud například chcete vybrat clustery na základě dostupné kapacity procesoru clusteru, název použitý v selektoru vlastností by měl být
resources.kubernetes-fleet.io/available-cpu
. Pro kapacitu paměti s možností přidělování můžete použítresources.kubernetes-fleet.io/allocatable-memory
.Seznam hodnot, které jsou možné hodnoty vlastnosti.
Operátor použitý k vyjádření podmínky mezi omezující/požadovanou hodnotou a pozorovanou hodnotou v clusteru. V současné době jsou podporovány následující operátory:
Gt
(Větší než): Pozorovaná hodnota clusteru dané vlastnosti musí být větší než hodnota v podmínce, aby bylo možné ji vybrat pro umístění prostředků.Ge
(Větší než nebo rovno): Pozorovaná hodnota clusteru dané vlastnosti musí být větší nebo rovna hodnotě v podmínce, aby bylo možné vybrat umístění prostředků.Lt
(Menší než): Pozorovaná hodnota clusteru dané vlastnosti musí být menší než hodnota v podmínce, aby bylo možné ji vybrat pro umístění prostředků.Le
(Menší než nebo rovno): Pozorovaná hodnota clusteru dané vlastnosti musí být menší nebo rovna hodnotě v podmínce, než bude možné ji vybrat pro umístění prostředků.Eq
(Rovná se): Pozorovaná hodnota clusteru dané vlastnosti musí být rovna hodnotě v podmínce, aby bylo možné ji vybrat pro umístění prostředků.Ne
(Nerovná se): Pozorovaná hodnota clusteru dané vlastnosti nesmí být rovna hodnotě v podmínce, aby bylo možné ji vybrat pro umístění prostředků.
Pokud použijete operátor
Gt
, ,Ge
,Lt
,Le
Eq
neboNe
, seznam hodnot v podmínce by měl mít přesně jednu hodnotu.
Flotila vyhodnocuje každý cluster na základě vlastností zadaných v podmínce. Nepodařilo se splnit podmínky uvedené v rámci requiredDuringSchedulingIgnoredDuringExecution
vyloučení tohoto člena clusteru z umístění prostředků.
Poznámka:
Pokud členský cluster nemá vlastnost vyjádřenou v podmínce, podmínka se automaticky nezdaří.
Ukázková zásada umístění pro výběr pouze clusterů s více než nebo rovnou pěti uzlům pro umístění prostředků:
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"
K filtrování oprávněných členských clusterů v obou těchto omezeních můžete použít selektory popisků i vlastností v requiredDuringSchedulingIgnoredDuringExecution
rámci termínu spřažení.
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"
V tomto příkladu kubernetes Fleet považuje cluster pouze za umístění prostředků, pokud má region=east
popisek a počet uzlů větší než nebo rovno pěti.
Pořadí clusterů pořadí v době plánování na základě vlastností člena clusteru
Při preferredDuringSchedulingIgnoredDuringExecution
použití seřadí řazení vlastností všechny shluky ve flotile na základě jejich hodnot ve vzestupném nebo sestupném pořadí. Váhy se počítají na základě hodnoty váhy zadané v preferredDuringSchedulingIgnoredDuringExecution
části .
Řazení vlastností se skládá z:
- Název: Název vlastnosti s dalšími informacemi o formátování vlastnosti popsané v předchozí části.
- Pořadí řazení: Pořadí řazení může být buď
Ascending
neboDescending
. PřiAscending
použití objednávky dává Kubernetes Fleet přednost členským clusterům s nižšími pozorovanými hodnotami. PřiDescending
použití pořadí se preferují členské clustery s vyšší pozorovanou hodnotou.
Pro pořadí Descending
řazení se vypočítá proporcionální váha pomocí vzorce:
((Observed Value - Minimum observed value) / (Maximum observed value - Minimum observed value)) * Weight
Řekněme například, že chcete seřadit clustery na základě vlastnosti dostupné kapacity procesoru v sestupném pořadí a že máte flotilu tří clusterů s následujícím dostupným procesorem:
Cluster | Dostupná kapacita procesoru |
---|---|
bravelion |
100 |
smartfish |
20 |
jumpingcat |
10 |
V tomto případě vypočítá řazení následující váhy:
Cluster | Dostupná kapacita procesoru | Hmotnost |
---|---|---|
bravelion |
100 | (100 - 10) / (100 - 10) = 100 % hmotnosti |
smartfish |
20 | (20 - 10) / (100 - 10) = 11,11 % hmotnosti |
jumpingcat |
10 | (10 - 10) / (100 - 10) = 0 % hmotnosti |
Pro pořadí Ascending
řazení se vypočítá proporcionální váha pomocí vzorce:
(1 - ((Observed Value - Minimum observed value) / (Maximum observed value - Minimum observed value))) * Weight
Řekněme například, že chcete seřadit clustery na základě jejich nákladů na jádro procesoru vzestupně a že máte flotilu tří clusterů s následujícími náklady na jádra procesoru:
Cluster | Náklady na jádro procesoru |
---|---|
bravelion |
0 |
smartfish |
0,2 |
jumpingcat |
0,1 |
V tomto případě vypočítá řazení následující váhy:
Cluster | Náklady na jádro procesoru | Hmotnost |
---|---|---|
bravelion |
0 | 1 – ((1 - 0,1) / (1 - 0,1)) = 0 % hmotnosti |
smartfish |
0,2 | 1 - ((0,2 - 0,1) / (1 - 0,1)) = 88,89 % hmotnosti |
jumpingcat |
0,1 | 1 - (0,1 - 0,1) / (1 - 0,1) = 100 % hmotnosti |
Následující příklad ukazuje řazení vlastností pomocí Descending
pořadí:
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
V tomto příkladu bude Fleet upřednostňovat 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.
Při spřažení můžete 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/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
V tomto příkladu by cluster získal pouze dodatečnou váhu, pokud má popisek env=prod
. Pokud toto omezení založené na popiscích splňuje, pak je cluster dán úměrnou váhu na základě množství celkového procesoru v daném členském clusteru.
Vyčištění prostředků
Pokud už objekt nechcete používat ClusterResourcePlacement
, můžete ho kubectl delete
pomocí příkazu odstranit. Následující příklad odstraní ClusterResourcePlacement
objekt s názvem crp
:
kubectl delete clusterresourceplacement crp
Další kroky
Další informace o šíření prostředků najdete v následujících zdrojích informací:
Azure Kubernetes Service