Umístění prostředků Kubernetes z clusteru centra do členských clusterů
Tento článek popisuje koncept umístění prostředků Kubernetes z centrálních clusterů do členských clusterů pomocí Azure Kubernetes Fleet Manageru (Kubernetes Fleet).
Správci platformy často potřebují nasadit prostředky Kubernetes do několika clusterů z různých důvodů, například:
- Správa řízení přístupu pomocí rolí a vazeb rolí napříč několika clustery
- Spouštění aplikací infrastruktury, jako je Například Prometheus nebo Flux, které musí být na všech clusterech.
Vývojáři aplikací často potřebují nasadit prostředky Kubernetes do několika clusterů z různých důvodů, například:
- Nasazení aplikace obsluhující video do několika clusterů v různých oblastech za účelem sledování nízké latence
- Nasazení aplikace nákupního košíku do dvou spárovaných oblastí, aby zákazníci mohli pokračovat v nákupu během výpadku jedné oblasti.
- Nasazení dávkové výpočetní aplikace do clusterů s levnými fondy spotových uzlů.
Je zdlouhavé vytvářet, aktualizovat a sledovat tyto prostředky Kubernetes napříč několika clustery ručně. Fleet poskytuje šíření prostředků Kubernetes, které umožňuje správu prostředků Kubernetes ve velkém měřítku. Pomocí Kubernetes Fleet můžete vytvářet prostředky Kubernetes v clusteru centra a šířit je do vybraných členských clusterů prostřednictvím vlastních prostředků Kubernetes: MemberCluster
a ClusterResourcePlacement
.
Kubernetes Fleet podporuje tyto vlastní prostředky založené na opensourcovém cloudovém nativním řešení, o kterém si můžete přečíst další informace o opensourcové dokumentaci k fleetu.
Představujeme ClusterResourcePlacement
Objekt ClusterResourcePlacement
slouží k oznámení plánovači vozového parku, jak umístit danou sadu objektů s oborem clusteru z clusteru centra flotily na členské clustery. Objekty s oborem názvů, jako jsou Nasazení, StatefulSets, DaemonSets, ConfigMaps, Tajné kódy a PersistentVolumeClaims, jsou zahrnuty při výběru jejich oboru názvů.
Pomocí ClusterResourcePlacement
:
- Vyberte, které prostředky Kubernetes s oborem clusteru se mají rozšířit na členské clustery.
- Zadejte zásady umístění pro ruční nebo automatický výběr členských clusterů jako cílových clusterů.
- Určete strategie zavedení pro bezpečné zavedení všech aktualizací vybraných prostředků Kubernetes do více cílových clusterů.
- Zobrazte průběh šíření směrem ke každému cílovému clusteru.
Příklad je znázorněn v následujícím diagramu.
Zapouzdření prostředků
ClusterResourcePlacement
podporuje použití ConfigMap k obálce určitých typů prostředků Kubernetes, aby je bylo možné uspořádat v clusteru centra bez nežádoucích vedlejších účinků na cluster centra. Seznam typů prostředků a vysvětlení, jak tato funkce funguje, najdete v dokumentaci k objektu obálky.
Typy umístění
Pro řízení počtu clusterů, do kterých je potřeba rozšířit zadaný prostředek Kubernetes, jsou k dispozici následující typy umístění:
- PickFixed umístí prostředek do konkrétního seznamu členských clusterů podle názvu.
- Funkce PickAll umístí prostředek do všech členských clusterů nebo do všech členských clusterů, které splňují kritéria. Tato zásada je užitečná pro umístění úloh infrastruktury, jako jsou monitorování clusteru nebo aplikace pro vytváření sestav.
- PickN je nejflexibilnější možnost umístění a umožňuje výběr clusterů na základě omezení rozložení spřažení nebo topologie a je užitečný při šíření úloh mezi několik vhodných clusterů, aby se zajistila požadovaná dostupnost.
Typ umístění PickFixed
Pokud chcete nasadit úlohu do známé sady členských clusterů, můžete pomocí PickFixed
zásady umístění vybrat clustery podle názvu.
clusterNames
je jedinou platnou možností zásad pro tento typ umístění.
Následující příklad ukazuje, jak nasadit test-deployment
obor názvů na členské clustery cluster1
a cluster2
.
apiVersion: placement.kubernetes-fleet.io/v1
kind: ClusterResourcePlacement
metadata:
name: crp-fixed
spec:
policy:
placementType: PickFixed
clusterNames:
- cluster1
- cluster2
resourceSelectors:
- group: ""
kind: Namespace
name: test-deployment
version: v1
Typ umístění PickAll
Typ umístění můžete použít PickAll
k nasazení úlohy napříč všemi členskými clustery ve vozovém parku nebo do podmnožiny clusterů, které splňují vámi nastavená kritéria.
Při vytváření tohoto typu umístění je možné zadat následující typy spřažení clusteru:
- requiredDuringSchedulingIgnoredDuringExecution: protože se tato zásada vyžaduje během plánování, filtruje clustery na základě zadaných kritérií.
Následující příklad ukazuje, jak nasadit prod-deployment
obor názvů a všechny jeho objekty ve všech clusterech označených environment: production
pomocí:
apiVersion: placement.kubernetes-fleet.io/v1
kind: ClusterResourcePlacement
metadata:
name: crp-pickall
spec:
policy:
placementType: PickAll
affinity:
clusterAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
clusterSelectorTerms:
- labelSelector:
matchLabels:
environment: production
resourceSelectors:
- group: ""
kind: Namespace
name: prod-deployment
version: v1
Typ umístění PickN
Typ PickN
umístění je nejflexibilnější možností a umožňuje umístění prostředků do konfigurovatelného počtu clusterů na základě omezení rozložení spřažení i topologie.
Při vytváření tohoto typu umístění je možné zadat následující typy spřažení clusteru:
- requiredDuringSchedulingIgnoredDuringExecution: protože se tato zásada vyžaduje během plánování, filtruje clustery na základě zadaných kritérií.
- preferredDuringSchedulingIgnoredDuringExecution: tato zásada se upřednostňuje, ale nevyžaduje se při plánování, řadí clustery podle zadaných kritérií.
Můžete nastavit požadované i upřednostňované spřažení. Požadované spřažení brání umístění do clusterů, které se neshodují, a upřednostňované spřažení zajišťují řazení platných clusterů.
PickN
spřažením
Použití spřažení s funkcemi PickN
zásad umístění podobně jako použití spřažení s plánováním podů
Následující příklad ukazuje, jak nasadit úlohu do tří clusterů. Platné cíle umístění jsou pouze clustery s critical-allowed: "true"
popiskem a předvolba je udělena clusterům s popiskem critical-level: 1
:
apiVersion: placement.kubernetes-fleet.io/v1
kind: ClusterResourcePlacement
metadata:
name: crp-pickn-01
spec:
resourceSelectors:
- ...
policy:
placementType: PickN
numberOfClusters: 3
affinity:
clusterAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
weight: 20
preference:
- labelSelector:
matchLabels:
critical-level: 1
requiredDuringSchedulingIgnoredDuringExecution:
clusterSelectorTerms:
- labelSelector:
matchLabels:
critical-allowed: "true"
PickN
s omezeními rozložení topologie
Omezení rozložení topologie můžete použít k vynucení rozdělení umístění clusteru napříč hranicemi topologie, aby splňovaly požadavky na dostupnost. Tato omezení můžete například použít k rozdělení umístění mezi oblasti nebo aktualizační kanály. Omezení rozložení topologie můžete také nakonfigurovat tak, aby se zabránilo plánování, pokud omezení nejde splnit (whenUnsatisfiable: DoNotSchedule
) nebo naplánovat co nejlépe (whenUnsatisfiable: ScheduleAnyway
).
Následující příklad ukazuje, jak rozšířit danou sadu prostředků do více oblastí a jak se pokusit naplánovat mezi členské clustery s různými dny aktualizace.
apiVersion: placement.kubernetes-fleet.io/v1
kind: ClusterResourcePlacement
metadata:
name: crp-pickn-02
spec:
resourceSelectors:
- ...
policy:
placementType: PickN
topologySpreadConstraints:
- maxSkew: 2
topologyKey: region
whenUnsatisfiable: DoNotSchedule
- maxSkew: 2
topologyKey: updateDay
whenUnsatisfiable: ScheduleAnyway
Další informace najdete v opensourcové topologii topologie dokumentace pro flotilu.
Možnosti zásad umístění
Tabulka shrnuje dostupná pole zásad plánování pro každý typ umístění.
Pole Zásady | PickFixed | PickAll | PickN |
---|---|---|---|
placementType |
✅ | ✅ | ✅ |
affinity |
❌ | ✅ | ✅ |
clusterNames |
✅ | ❌ | ❌ |
numberOfClusters |
❌ | ❌ | ✅ |
topologySpreadConstraints |
❌ | ❌ | ✅ |
Výběr clusterů na základě popisků a vlastností
Dostupné popisky a vlastnosti pro výběr clusterů
Při použití PickN
typů a PickAll
umístění můžete jako součást zásad použít následující popisky a vlastnosti.
Popisky
Následující popisky se automaticky přidají do všech členských clusterů a dají se použít pro výběr cílového clusteru v zásadách umístění prostředků.
Štítek | Popis |
---|---|
fleet.azure.com/location | Oblast Azure clusteru (westus) |
fleet.azure.com/resource-group | Skupina prostředků Azure clusteru (rg_prodapps_01) |
fleet.azure.com/subscription-id | Identifikátor předplatného Azure, ve kterém se cluster nachází. Formátováno jako UUID/GUID. |
Můžete také použít jakékoli vlastní popisky, které použijete u clusterů.
Vlastnosti
Následující vlastnosti jsou k dispozici pro použití v rámci zásad umístění.
Vlastnosti procesoru a paměti jsou reprezentovány jako jednotky prostředků Kubernetes.
Vlastnosti nákladů jsou desetinná místa, která představují hodinové náklady v amerických dolarech pro výpočetní prostředky Azure využívané pro uzly v clusteru. Náklady jsou založené na veřejných cenách Azure.
Název vlastnosti | Popis |
---|---|
kubernetes-fleet.io/node-count | Dostupné uzly v členském clusteru. |
resources.kubernetes-fleet.io/total-cpu | Celkový počet jednotek prostředků procesoru clusteru |
resources.kubernetes-fleet.io/allocatable-cpu | Jednotky prostředků procesoru s možností přidělování prostředků clusteru |
resources.kubernetes-fleet.io/available-cpu | Dostupné jednotky prostředků procesoru clusteru. |
resources.kubernetes-fleet.io/total-memory | Celková jednotka prostředků paměti clusteru |
resources.kubernetes-fleet.io/allocatable-memory | Jednotky prostředků paměti s možností přidělování paměti clusteru |
resources.kubernetes-fleet.io/available-memory | Dostupné jednotky prostředků paměti clusteru |
kubernetes.azure.com/per-cpu-core-cost | Náklady na jádro procesoru clusteru. |
kubernetes.azure.com/per-gb-memory-cost | Náklady na paměť na GiB clusteru. |
Zadání kritérií shody výběru
Při použití vlastností clusteru v kritériích zásad zadáte:
Název: Název vlastnosti, která je jednou z vlastností uvedených v tomto článku.
Operátor: 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.Hodnoty: Seznam hodnot, které jsou možné hodnoty vlastnosti.
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ří.
Tady je příklad zásad umístění pro výběr pouze clusterů s pěti nebo více uzly.
apiVersion: placement.kubernetes-fleet.io/v1
kind: ClusterResourcePlacement
metadata:
name: crp
spec:
resourceSelectors:
- ...
policy:
placementType: PickAll
affinity:
clusterAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
clusterSelectorTerms:
- propertySelector:
matchExpressions:
- name: "kubernetes-fleet.io/node-count"
operator: Ge
values:
- "5"
Jak funguje řazení vlastností
Při preferredDuringSchedulingIgnoredDuringExecution
použití seřadí řazení vlastností všechny clustery ve flotile na základě jejich hodnot ve vzestupném nebo sestupném pořadí. Váhy použité pro řazení se počítají na základě zadané hodnoty.
Řazení vlastností se skládá z:
- Název: Název vlastnosti clusteru.
- Pořadí řazení: Pořadí řazení může být buď
Ascending
neboDescending
. PřiAscending
použití pořadí se preferují členské clustery s nižšími pozorovanými hodnotami. PřiDescending
použití pořadí se preferují členské clustery s vyšší pozorovanou hodnotou.
Sestupné pořadí
Pro pořadí řazení Sestupně 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 |
---|---|
cluster-a |
100 |
cluster-b |
20 |
cluster-c |
10 |
V tomto případě vypočítá řazení následující váhy:
Cluster | Dostupná kapacita procesoru | Výpočet | Hmotnost |
---|---|---|---|
cluster-a |
100 | (100 - 10) / (100 - 10) | 100 % |
cluster-b |
20 | (20 - 10) / (100 - 10) | 11.11% |
cluster-c |
10 | (10 - 10) / (100 - 10) | 0 % |
Vzestupné pořadí
Pro vzestupné pořadí řazení se proporcionální váha vypočítá 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 |
---|---|
cluster-a |
0 |
cluster-b |
0,2 |
cluster-c |
0,1 |
V tomto případě vypočítá řazení následující váhy:
Cluster | Náklady na jádro procesoru | Výpočet | Hmotnost |
---|---|---|---|
cluster-a |
0 | 1 - ((1 - 0.1) / (1 - 0.1)) | 0 % |
cluster-b |
0,2 | 1 - ((0.2 - 0.1) / (1 - 0.1)) | 88.89% |
cluster-c |
0,1 | 1 - (0.1 - 0.1) / (1 - 0.1) | 100 % |
Používání tolerance
ClusterResourcePlacement
objekty podporují specifikaci tolerance, která se vztahuje na ClusterResourcePlacement
objekt. Každý objekt tolerance se skládá z následujících polí:
key
: Klíč tolerance.value
: Hodnota tolerance.effect
: Účinek tolerance, napříkladNoSchedule
.operator
: Operátor tolerance, napříkladExists
neboEqual
.
Každá tolerance se používá k tolerování jednoho nebo více specifických taintů použitých na ClusterResourcePlacement
. Jakmile jsou všechny tainty na serveru MemberCluster
tolerovány, plánovač pak může rozšířit prostředky do clusteru. Po vytvoření objektu ClusterResourcePlacement
není možné aktualizovat ani odebrat tolerance.
Další informace najdete v opensourcové dokumentaci k sadě Fleet týkající se tolerance.
Konfigurace strategie zavedení
Flotila používá strategii postupné aktualizace k řízení způsobu zavádění aktualizací napříč clustery.
V následujícím příkladu plánovač flotily postupně zavede aktualizace jednotlivých clusterů a čeká alespoň unavailablePeriodSeconds
mezi clustery. Stav zavedení se považuje za úspěšný, pokud byly na cluster správně použity všechny prostředky. Kontrola stavu zavedení se nespadá do podřízených prostředků, takže například nepotvrdí, že se pody vytvořené nasazením připraví.
apiVersion: placement.kubernetes-fleet.io/v1
kind: ClusterResourcePlacement
metadata:
name: crp
spec:
resourceSelectors:
- ...
policy:
...
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 25%
maxSurge: 25%
unavailablePeriodSeconds: 60
Další informace najdete v opensourcové dokumentaci k nasazení flotily.
Určení stavu umístění
Plánovač Flotily aktualizuje podrobnosti a stav rozhodnutí o umístění objektu ClusterResourcePlacement
. Výstup obsahuje následující informace:
- Podmínky, které se aktuálně vztahují na umístění, mezi které patří, pokud bylo umístění úspěšně dokončeno.
- Oddíl stavu umístění pro každý členský cluster, který zobrazuje stav nasazení do tohoto clusteru.
Následující příklad ukazuje ClusterResourcePlacement
, že nasadili test
obor názvů a test-1
objekt ConfigMap do dvou členských clusterů pomocí PickN
. Umístění bylo úspěšně dokončeno a prostředky byly umístěny do clusterůaks-member-1
.aks-member-2
Tyto informace můžete zobrazit pomocí kubectl describe crp <name>
příkazu.
kubectl describe crp crp-1
Name: crp-1
Namespace:
Labels: <none>
Annotations: <none>
API Version: placement.kubernetes-fleet.io/v1
Kind: ClusterResourcePlacement
Metadata:
...
Spec:
Policy:
Number Of Clusters: 2
Placement Type: PickN
Resource Selectors:
Group:
Kind: Namespace
Name: test
Version: v1
Revision History Limit: 10
Status:
Conditions:
Last Transition Time: 2023-11-10T08:14:52Z
Message: found all the clusters needed as specified by the scheduling policy
Observed Generation: 5
Reason: SchedulingPolicyFulfilled
Status: True
Type: ClusterResourcePlacementScheduled
Last Transition Time: 2023-11-10T08:23:43Z
Message: All 2 cluster(s) are synchronized to the latest resources on the hub cluster
Observed Generation: 5
Reason: SynchronizeSucceeded
Status: True
Type: ClusterResourcePlacementSynchronized
Last Transition Time: 2023-11-10T08:23:43Z
Message: Successfully applied resources to 2 member clusters
Observed Generation: 5
Reason: ApplySucceeded
Status: True
Type: ClusterResourcePlacementApplied
Placement Statuses:
Cluster Name: aks-member-1
Conditions:
Last Transition Time: 2023-11-10T08:14:52Z
Message: Successfully scheduled resources for placement in aks-member-1 (affinity score: 0, topology spread score: 0): picked by scheduling policy
Observed Generation: 5
Reason: ScheduleSucceeded
Status: True
Type: ResourceScheduled
Last Transition Time: 2023-11-10T08:23:43Z
Message: Successfully Synchronized work(s) for placement
Observed Generation: 5
Reason: WorkSynchronizeSucceeded
Status: True
Type: WorkSynchronized
Last Transition Time: 2023-11-10T08:23:43Z
Message: Successfully applied resources
Observed Generation: 5
Reason: ApplySucceeded
Status: True
Type: ResourceApplied
Cluster Name: aks-member-2
Conditions:
Last Transition Time: 2023-11-10T08:14:52Z
Message: Successfully scheduled resources for placement in aks-member-2 (affinity score: 0, topology spread score: 0): picked by scheduling policy
Observed Generation: 5
Reason: ScheduleSucceeded
Status: True
Type: ResourceScheduled
Last Transition Time: 2023-11-10T08:23:43Z
Message: Successfully Synchronized work(s) for placement
Observed Generation: 5
Reason: WorkSynchronizeSucceeded
Status: True
Type: WorkSynchronized
Last Transition Time: 2023-11-10T08:23:43Z
Message: Successfully applied resources
Observed Generation: 5
Reason: ApplySucceeded
Status: True
Type: ResourceApplied
Selected Resources:
Kind: Namespace
Name: test
Version: v1
Kind: ConfigMap
Name: test-1
Namespace: test
Version: v1
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal PlacementScheduleSuccess 12m (x5 over 3d22h) cluster-resource-placement-controller Successfully scheduled the placement
Normal PlacementSyncSuccess 3m28s (x7 over 3d22h) cluster-resource-placement-controller Successfully synchronized the placement
Normal PlacementRolloutCompleted 3m28s (x7 over 3d22h) cluster-resource-placement-controller Resources have been applied to the selected clusters
Aktivační události změny umístění
Plánovač flotily upřednostňuje stabilitu stávajících umístění úloh. Toto stanovení priority může omezit počet změn, které způsobují odebrání a přeplánování úlohy. Následující scénáře můžou aktivovat změny umístění:
- Změny zásad umístění v objektu
ClusterResourcePlacement
můžou aktivovat odebrání a přeplánování úlohy.- Operace horizontálního navýšení kapacity (zvýšení
numberOfClusters
bez dalších změn) umístí úlohy pouze do nových clusterů a neovlivní stávající umístění.
- Operace horizontálního navýšení kapacity (zvýšení
- Změny clusteru, včetně:
- Nový cluster, který se stane způsobilým, může aktivovat umístění, pokud nový cluster splňuje zásady umístění, například zásadu
PickAll
. - Cluster s umístěním se odebere z flotily. V závislosti na zásadách se plánovač pokusí umístit všechny ovlivněné úlohy do zbývajících clusterů bez ovlivnění stávajících umístění.
- Nový cluster, který se stane způsobilým, může aktivovat umístění, pokud nový cluster splňuje zásady umístění, například zásadu
Změny pouze prostředků (aktualizace prostředků nebo aktualizace objektu ResourceSelector
ClusterResourcePlacement
) se postupně zavádět v existujících umístěních, ale neaktivují opětovné plánování úlohy.
Další kroky
Azure Kubernetes Service