Propagacja zasobów kubernetes z klastra koncentratora do klastrów członkowskich
W tym artykule opisano koncepcję propagacji zasobów Kubernetes z klastrów piasty do klastrów członkowskich przy użyciu usługi Azure Kubernetes Fleet Manager (Fleet).
Administratorzy platformy często muszą wdrażać zasoby kubernetes w wielu klastrach z różnych powodów, na przykład:
- Zarządzanie kontrolą dostępu przy użyciu ról i powiązań ról w wielu klastrach.
- Uruchamianie aplikacji infrastruktury, takich jak Prometheus lub Flux, które muszą znajdować się we wszystkich klastrach.
Deweloperzy aplikacji często muszą wdrażać zasoby kubernetes w wielu klastrach z różnych powodów, na przykład:
- Wdrażanie aplikacji obsługującej wideo w wielu klastrach w różnych regionach w celu oglądania z małym opóźnieniem.
- Wdrażanie aplikacji koszyka zakupów w dwóch sparowanych regionach dla klientów w celu kontynuowania zakupów podczas awarii jednego regionu.
- Wdrażanie aplikacji obliczeniowej wsadowej w klastrach z dostępnymi niedrogimi pulami węzłów typu spot.
Żmudne jest ręczne tworzenie, aktualizowanie i śledzenie tych zasobów Kubernetes w wielu klastrach. Rozwiązanie Fleet zapewnia propagację zasobów Kubernetes w celu umożliwienia zarządzania zasobami Kubernetes na dużą skalę. Za pomocą rozwiązania Fleet możesz utworzyć zasoby kubernetes w klastrze koncentratora i propagować je do wybranych klastrów członkowskich za pośrednictwem zasobów niestandardowych Kubernetes: MemberCluster
i ClusterResourcePlacement
. Rozwiązanie Fleet obsługuje te zasoby niestandardowe na podstawie rozwiązania wieloklasowego natywnego dla chmury typu open source. Aby uzyskać więcej informacji, zobacz dokumentację nadrzędnej floty.
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.
Przepływ pracy propagacji zasobów
Co to jest MemberCluster
?
Po dołączeniu klastra do floty odpowiedni MemberCluster
zasób niestandardowy zostanie utworzony w klastrze koncentratora. Za pomocą tego zasobu niestandardowego można wybrać klastry docelowe w propagacji zasobów.
Następujące etykiety mogą służyć do wyboru klastra docelowego w propagacji zasobów i są automatycznie dodawane do wszystkich klastrów członkowskich:
fleet.azure.com/location
fleet.azure.com/resource-group
fleet.azure.com/subscription-id
Aby uzyskać więcej informacji, zobacz dokumentację interfejsu API MemberCluster.
Co to jest ClusterResourcePlacement
?
Obiekt ClusterResourcePlacement
służy do określania harmonogramu fleet, jak umieścić dany zestaw obiektów o zakresie klastra z klastra w klastrach członkowskich. Obiekty o zakresie przestrzeni nazw, takie jak Wdrożenia, StatefulSets, DaemonSets, ConfigMaps, Secrets i PersistentVolumeClaims, są uwzględniane podczas wybierania ich zawierającej przestrzeń nazw.
Za pomocą ClusterResourcePlacement
programu można wykonywać następujące czynności:
- Wybierz zasoby Kubernetes o zakresie klastra, które mają być propagowane do klastrów członkowskich.
- Określ zasady umieszczania, aby ręcznie lub automatycznie wybrać podzestaw lub wszystkie klastry członkowskie jako klastry docelowe.
- Określ strategie wdrażania, aby bezpiecznie wdrożyć wszystkie aktualizacje wybranych zasobów Kubernetes w wielu klastrach docelowych.
- Wyświetl postęp propagacji w każdym klastrze docelowym.
Obiekt ClusterResourcePlacement
obsługuje używanie obiektu ConfigMap do otaczania obiektu w celu propagowania ich do klastrów członkowskich bez niezamierzonych skutków ubocznych. Metody wyboru obejmują:
- Grupa, wersja i rodzaj: wybierz i umieść wszystkie zasoby danego typu.
- Grupa, wersja, rodzaj i nazwa: wybierz i umieść jeden konkretny zasób danego typu.
- Grupuj, wersję, rodzaj i etykiety: wybierz i umieść wszystkie zasoby danego typu zgodne z podanymi etykietami.
Aby uzyskać więcej informacji, zobacz dokumentację interfejsu ClusterResourcePlacement
API.
Podczas tworzenia ClusterResourcePlacement
elementu można określić następujące typy koligacji:
- requiredDuringSchedulingIgnoredDuringExecution: Ponieważ ta koligacja jest wymaganym typem podczas planowania, filtruje klastry na podstawie ich właściwości.
- preferredDuringSchedulingIgnoredDuringExecution: Ponieważ koligacja jest tylko preferowanym typem, ale nie jest wymagana podczas planowania, zapewnia preferencyjne klasyfikowanie klastrów na podstawie właściwości określonych przez Ciebie, takich jak koszt lub dostępność zasobów.
Dostępnych jest wiele typów umieszczania do kontrolowania liczby klastrów, do których należy propagować zasób Kubernetes:
PickAll
umieszcza zasoby we wszystkich dostępnych klastrach członkowskich. Te zasady są przydatne w przypadku umieszczania obciążeń infrastruktury, takich jak aplikacje do monitorowania klastra lub raportowania.PickFixed
umieszcza zasoby na określoną listę klastrów członkowskich według nazwy.PickN
jest najbardziej elastyczną opcją umieszczania i umożliwia wybór klastrów na podstawie ograniczeń koligacji lub topologii i jest przydatny podczas rozkładania obciążeń w wielu odpowiednich klastrach w celu zapewnienia dostępności.
PickAll
zasady umieszczania
Możesz użyć PickAll
zasad umieszczania, aby wdrożyć obciążenie we wszystkich klastrach członkowskich w floty (opcjonalnie pasujące do zestawu kryteriów).
W poniższym przykładzie pokazano, jak wdrożyć prod-deployment
przestrzeń nazw i wszystkie jej obiekty we wszystkich klastrach oznaczonych etykietą environment: production
:
apiVersion: placement.kubernetes-fleet.io/v1beta1
kind: ClusterResourcePlacement
metadata:
name: crp-1
spec:
policy:
placementType: PickAll
affinity:
clusterAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
clusterSelectorTerms:
- labelSelector:
matchLabels:
environment: production
resourceSelectors:
- group: ""
kind: Namespace
name: prod-deployment
version: v1
Te proste zasady pobierają prod-deployment
przestrzeń nazw i wszystkie zawarte w niej zasoby i wdrażają je we wszystkich klastrach członkowskich w flocie z daną environment
etykietą. Jeśli wszystkie klastry są pożądane, możesz całkowicie usunąć affinity
termin.
PickFixed
zasady umieszczania
Jeśli chcesz wdrożyć obciążenie w znanym zestawie klastrów członkowskich, możesz użyć PickFixed
zasad umieszczania, aby wybrać klastry według nazwy.
W poniższym przykładzie pokazano, jak wdrożyć test-deployment
przestrzeń nazw w klastrach cluster1
członkowskich i cluster2
:
apiVersion: placement.kubernetes-fleet.io/v1beta1
kind: ClusterResourcePlacement
metadata:
name: crp-2
spec:
policy:
placementType: PickFixed
clusterNames:
- cluster1
- cluster2
resourceSelectors:
- group: ""
kind: Namespace
name: test-deployment
version: v1
PickN
zasady umieszczania
Zasady umieszczania PickN
są najbardziej elastyczną opcją i umożliwiają umieszczanie zasobów w konfigurowalnej liczbie klastrów na podstawie ograniczeń rozkładu koligacji i topologii.
PickN
z koligacjami
Używanie koligacji z PickN
funkcjami zasad umieszczania podobnie do używania koligacji z planowaniem zasobników. Można ustawić zarówno wymagane, jak i preferowane koligacje. Wymagane koligacje uniemożliwiają umieszczanie w klastrach, które nie są zgodne z określonymi koligacjami, a preferowane koligacje umożliwiają porządkowanie zestawu prawidłowych klastrów podczas podejmowania decyzji o umieszczeniu.
W poniższym przykładzie pokazano, jak wdrożyć obciążenie w trzech klastrach. Tylko klastry z etykietą critical-allowed: "true"
są prawidłowymi miejscami docelowymi umieszczania, a preferencje są przekazywane klastrom z etykietą critical-level: 1
:
apiVersion: placement.kubernetes-fleet.io/v1beta1
kind: ClusterResourcePlacement
metadata:
name: crp
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
z ograniczeniami rozprzestrzeniania topologii
Za pomocą ograniczeń rozprzestrzeniania topologii można wymusić podział umieszczania klastrów w granicach topologii w celu spełnienia wymagań dotyczących dostępności, na przykład dzielenia umieszczania między regionami lub pierścieni aktualizacji. Można również skonfigurować ograniczenia rozprzestrzeniania topologii, aby zapobiec harmonogramowi, jeśli ograniczenie nie może być spełnione (whenUnsatisfiable: DoNotSchedule
) lub jak najlepiej (whenUnsatisfiable: ScheduleAnyway
).
W poniższym przykładzie pokazano, jak rozłożyć dany zestaw zasobów w wielu regionach i próbuje zaplanować harmonogram między klastrami członkowskimi z różnymi dniami aktualizacji:
apiVersion: placement.kubernetes-fleet.io/v1beta1
kind: ClusterResourcePlacement
metadata:
name: crp
spec:
resourceSelectors:
- ...
policy:
placementType: PickN
topologySpreadConstraints:
- maxSkew: 2
topologyKey: region
whenUnsatisfiable: DoNotSchedule
- maxSkew: 2
topologyKey: updateDay
whenUnsatisfiable: ScheduleAnyway
Aby uzyskać więcej informacji, zobacz dokumentację dotyczącą ograniczeń topologii nadrzędnej floty.
Strategia aktualizacji
Rozwiązanie Fleet używa strategii aktualizacji stopniowej do kontrolowania sposobu wdrażania aktualizacji w wielu miejscach klastra.
W poniższym przykładzie pokazano, jak skonfigurować strategię aktualizacji stopniowej przy użyciu ustawień domyślnych:
apiVersion: placement.kubernetes-fleet.io/v1beta1
kind: ClusterResourcePlacement
metadata:
name: crp
spec:
resourceSelectors:
- ...
policy:
...
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 25%
maxSurge: 25%
unavailablePeriodSeconds: 60
Harmonogram wdraża aktualizacje dla każdego klastra sekwencyjnie, czekając przynajmniej unavailablePeriodSeconds
między klastrami. Stan wdrożenia jest uznawany za pomyślny, jeśli wszystkie zasoby zostały poprawnie zastosowane do klastra. Sprawdzanie stanu wdrożenia nie powoduje kaskadowego użycia zasobów podrzędnych, na przykład nie potwierdza, że zasobniki utworzone przez wdrożenie staną się gotowe.
Aby uzyskać więcej informacji, zobacz dokumentację strategii wdrażania nadrzędnego Floty.
Stan umieszczania
Harmonogram floty aktualizuje szczegóły i stan decyzji dotyczących umieszczania ClusterResourcePlacement
na obiekcie. Te informacje można wyświetlić przy użyciu kubectl describe crp <name>
polecenia . Dane wyjściowe zawierają następujące informacje:
- Warunki, które są obecnie stosowane do umieszczania, które obejmują, jeśli umieszczanie zostało pomyślnie ukończone.
- Sekcja stanu umieszczania dla każdego klastra członkowskiego, która pokazuje stan wdrożenia w tym klastrze.
W poniższym przykładzie pokazano, ClusterResourcePlacement
że wdrożono test
przestrzeń nazw i test-1
ConfigMap w dwóch klastrach członkowskich przy użyciu polecenia PickN
. Umieszczanie zostało ukończone pomyślnie, a zasoby zostały umieszczone w aks-member-1
klastrach i aks-member-2
.
Name: crp-1
Namespace:
Labels: <none>
Annotations: <none>
API Version: placement.kubernetes-fleet.io/v1beta1
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
Zmiany umieszczania
Harmonogram floty określa priorytety stabilności istniejących umieszczania obciążeń. Ta priorytetyzacja może ograniczyć liczbę zmian, które powodują usunięcie obciążenia i jego ponowne utworzenie. Następujące scenariusze mogą wyzwalać zmiany umieszczania:
- Zmiany zasad umieszczania w
ClusterResourcePlacement
obiekcie mogą wyzwalać usuwanie i ponowne zmienianie obciążenia.- Skalowanie operacji w poziomie (zwiększanie
numberOfClusters
bez innych zmian) spowoduje umieszczenie obciążeń tylko w nowych klastrach i nie ma wpływu na istniejące umieszczanie.
- Skalowanie operacji w poziomie (zwiększanie
- Zmiany klastra, w tym:
- Nowy klaster kwalifikujący się może wyzwolić umieszczanie, jeśli spełnia zasady umieszczania
PickAll
, na przykład zasady. - Klaster z rozmieszczeniem zostanie usunięty z floty, podejmie próbę zastąpienia wszystkich obciążeń, których to dotyczy, bez wpływu na ich inne miejsca.
- Nowy klaster kwalifikujący się może wyzwolić umieszczanie, jeśli spełnia zasady umieszczania
Zmiany tylko dla zasobów (aktualizowanie zasobów lub aktualizowanie ResourceSelector
obiektu) są stopniowo wdrażane w ClusterResourcePlacement
istniejących miejscach, ale nie wyzwalają ponownej zmiany obciążenia.
Tolerancje
ClusterResourcePlacement
obiekty obsługują specyfikację tolerancji, które mają zastosowanie do ClusterResourcePlacement
obiektu. Każdy obiekt tolerancji składa się z następujących pól:
key
: klucz tolerancji.value
: wartość tolerancji.effect
: Efekt tolerancji, taki jakNoSchedule
.operator
: operator tolerancji, taki jakExists
lubEqual
.
Każda tolerancja jest używana do tolerowania co najmniej jednego konkretnego defektu stosowanego w obiekcie ClusterResourcePlacement
. Po tolerowaniu wszystkich defektów na obiekcie MemberCluster
harmonogram może następnie propagować zasoby do klastra. Nie można zaktualizować ani usunąć tolerancji z obiektu po jego utworzeniu ClusterResourcePlacement
.
Aby uzyskać więcej informacji, zobacz dokumentację nadrzędnej floty.
Uzyskiwanie dostępu do interfejsu API kubernetes klastra zasobów Fleet
Jeśli utworzono zasób usługi Azure Kubernetes Fleet Manager z włączonym klastrem koncentratora, możesz użyć go do centralnego sterowania scenariuszami, takimi jak propagacja obiektów Kubernetes. Aby uzyskać dostęp do interfejsu API kubernetes klastra zasobów Fleet, wykonaj kroki opisane w artykule Uzyskiwanie dostępu do interfejsu API kubernetes klastra zasobów Fleet za pomocą usługi Azure Kubernetes Fleet Manager.
Następne kroki
Skonfiguruj propagację zasobów Kubernetes z klastra koncentratora do klastrów członkowskich.
Azure Kubernetes Service