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

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 hodnot total, allocatablenebo available, 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žít resources.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, LeEqnebo Ne, 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 nebo Descending. Při Ascending použití objednávky dává Kubernetes Fleet přednost členským clusterům s nižšími pozorovanými hodnotami. Při Descending 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í: