Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy: ✔️ Fleet Manager z klastrem hubowym
Administratorzy korzystający z umieszczania zasobów klastra usługi Fleet Manager (CRP) mogą potrzebować usunąć zasoby, które zostały wcześniej umieszczone w klastrach członkowskich. Muszą również upewnić się, że nie zakłócają rozmieszczenia kluczowych zasobów.
W tym artykule wyjaśniono, jak używać obiektów usługi Fleet Manager ClusterResourcePlacementDisruptionBudget i ClusterResourcePlacementEviction do osiągnięcia tych celów.
Note
Jeśli nie znasz jeszcze rozmieszczania zasobów klastra (CRP) w usłudze Fleet Manager, zapoznaj się z koncepcyjnym omówieniem rozmieszczania zasobów przed przeczytaniem tego artykułu.
Usuń umieszczone zasoby
Obiekt ClusterResourcePlacementEviction służy do usuwania zasobów z klastra członkowskiego po propagacji zasobów z klastra centrum Fleet Manager.
Aby pomyślnie wykluczyć zasoby z klastra, należy określić:
- Nazwa
ClusterResourcePlacementobiektu, który propagował zasoby do klastra docelowego. - Nazwa klastra docelowego, z którego musimy eksmitować zasoby.
Eksmisję można używać z zasadami umieszczania zasobów klastra PickAll i PickN. Funkcja PickedFixed nie jest obsługiwana, ponieważ można edytować klastry docelowe i ponownie zastosować zasady CRP.
Note
Eksmisja nie gwarantuje, że zasoby nie są ponownie propagowane do klastra członkowskiego przez harmonogram floty. Należy zastosować skazy, aby zapobiec ponownemu wybraniu określonego klastra przez planistę floty.
Rozważmy następujący przykładowy CRP.
apiVersion: placement.kubernetes-fleet.io/v1
kind: ClusterResourcePlacement
metadata:
name: crp-app-sample
spec:
resourceSelectors:
- group: ""
kind: Namespace
name: test-namespace
version: v1
policy:
placementType: PickN
numberOfClusters: 2
affinity:
clusterAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
clusterSelectorTerms:
- labelSelector:
matchLabels:
fleet.azure.com/location: westus
Po zastosowaniu tego CRP możemy sprawdzić stan wdrożenia, aby określić, do jakich klastrów wdrażane są zasoby.
Załóżmy, że rozmieszczenie wybrało dwa klastry o nazwie member-cluster-01 i member-cluster-02, a my ustaliliśmy, że nie chcemy, aby zasoby były wdrożone na member-cluster-02 i chcemy go usunąć.
Utwórz
NoScheduleznak, aby zablokować żądania umieszczania dla klastra członkowskiego. Więcej informacji na temat używania taintów znajdziesz w dokumentacji taintów.apiVersion: placement.kubernetes-fleet.io/v1 kind: MemberCluster metadata: name: member-cluster-02 spec: identity: name: fleet-member-agent-cluster-2 kind: ServiceAccount namespace: fleet-system apiGroup: "" taints: - key: any-key value: any-value effect: NoScheduleNastępnie utwórz i zastosuj element
ClusterResourcePlacementEviction.apiVersion: placement.kubernetes-fleet.io/v1 kind: ClusterResourcePlacementEviction metadata: name: eviction-sample spec: placementName: crp-app-sample clusterName: member-cluster-02Sprawdź, czy określone zasoby są usuwane z klastra
member-cluster-02:kubectl get crpe eviction-sampleCo skutkuje następującym wynikiem, z
EXECUTEDpokazującymTrue.NAME VALID EXECUTED test-eviction True True
Teraz, gdy już wiesz, jak wymusić usunięcie umieszczonych zasobów z klastrów, zobaczmy, jak można chronić kluczowe zasoby przed eksmisji.
Chroń przed eksmisją
Obiekt ClusterResourcePlacementDisruptionBudget chroni przed zamierzonymi zakłóceniami występującymi podczas stosowania ClusterResourcePlacementEviction obiektu do umieszczonego zasobu. Nie chroni przed mimowolnymi zakłóceniami.
Dla przykładu rozmieszczenia zasobów klastra przedstawionego wcześniej w tym artykule, można zdefiniować obiekt budżetu reakcji na zakłócenia w następujący sposób.
Nazwa budżetu zakłóceń musi być zgodna z CRP.
apiVersion: placement.kubernetes-fleet.io/v1
kind: ClusterResourcePlacementDisruptionBudget
metadata:
name: crp-app-sample
spec:
minAvailable: 1
Określ jedno z następujących dwóch wzajemnie wykluczających się pól w specyfikacji:
- maxUnavailable: maksymalna liczba klastrów, w których umieszczanie może być niedostępne z powodu jakichkolwiek zakłóceń.
- minAvailable: minimalna liczba klastrów, w których umieszczanie jest dostępne pomimo jakiejkolwiek formy zakłóceń.
Oba pola mogą być bezwzględną liczbą klastrów jako liczbą całkowitą lub procentem całkowitej liczby klastrów w flocie.
Podczas określania budżetu zakłóceń dla określonej zasady ClusterResourcePlacement zapoznaj się z następującą macierzą obsługi:
| Zasady CRP |
minAvailable (liczba całkowita) |
minAvailable (%) |
maxUnavailable (liczba całkowita) |
MaxUnavailable (%) |
|---|---|---|---|---|
PickFixed |
❌ | ❌ | ❌ | ❌ |
PickAll |
✅ | ❌ | ❌ | ❌ |
PickN |
✅ | ✅ | ✅ | ✅ |
Note
Jeśli utworzysz nieprawidłowy obiekt budżetu zakłóceń dla lokalizacji, wszelkie próby eksmisji kończą się niepowodzeniem.
Sprawdź, czy eksmisja jest zablokowana
Sprawdź, czy skonfigurowany budżet zakłóceń zablokował usunięcie.
kubectl get crpe eviction-sample
W polu EXECUTED jest wyświetlana wartość False, co oznacza, że usunięcie nie zostało zastosowane.
NAME VALID EXECUTED
test-eviction True False
Aby potwierdzić, że budżet zakłóceń poda zablokował eksmisję poda, uruchom to samo kubectl polecenie i dodaj polecenie -o yaml. Wartość message pokazuje, że budżet zakłóceń zablokował eksmisję.
status:
conditions:
- lastTransitionTime: "2025-01-21T15:52:29Z"
message: Eviction is valid
observedGeneration: 1
reason: ClusterResourcePlacementEvictionValid
status: "True"
type: Valid
- lastTransitionTime: "2025-01-21T15:52:29Z"
message: 'Eviction is blocked by specified ClusterResourcePlacementDisruptionBudget,
availablePlacements: 1, totalPlacements: 1'
observedGeneration: 1
reason: ClusterResourcePlacementEvictionNotExecuted
status: "False"
type: Executed
Mimowolne zakłócenia
Budżety zakłóceń rozmieszczenia nie chronią przed mimowolnymi zakłóceniami. Przykłady nieumyślnych zakłóceń to:
- Harmonogramator Fleet Manager usuwa zasoby z klastra członkowskiego z powodu zmian zasad planowania.
- Ręcznie usuwasz zasoby obciążenia uruchomione w klastrze członkowskim (nie za pośrednictwem ewikcji lub zaktualizowanego protokołu CRP).
- Należy ręcznie usunąć obiekt
ClusterResourceBinding, który jest wewnętrznym zasobem reprezentującym umieszczanie zasobów w klastrze członkowskim. - Obciążenia nie działają prawidłowo w klastrze członkowskim z powodu błędnej konfiguracji lub problemów związanych z klastrem.