Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für: ✔️ Flottenmanager mit Hubcluster
Administratoren, die die Clusterressourcenplatzierung (Cluster Resource Placement, CRP) von Fleet Manager verwenden, müssen möglicherweise Ressourcen entfernen, die sie zuvor auf Memberclustern platziert haben. Außerdem müssen sie sicherstellen, dass sie die Platzierung wichtiger Ressourcen nicht beeinträchtigen.
In diesem Artikel wird erläutert, wie Sie die ClusterResourcePlacementEviction- und ClusterResourcePlacementDisruptionBudget-Objekte von Fleet Manager verwenden, um diese Ziele zu erreichen.
Note
Wenn Sie noch nicht mit der Clusterressourcenplatzierung von Fleet Manager (CRP) vertraut sind, lesen Sie die konzeptionelle Übersicht über die Ressourcenplatzierung , bevor Sie diesen Artikel lesen.
Räumen platzierter Ressourcen
Ein ClusterResourcePlacementEviction Objekt wird verwendet, um Ressourcen aus einem Mitgliedscluster zu entfernen, sobald die Ressourcen vom Fleet Manager-Hubcluster übertragen wurden.
Zum erfolgreichen Auslagern von Ressourcen aus einem Cluster müssen Sie Folgendes angeben:
- Der Name des
ClusterResourcePlacementObjekts, das Ressourcen an den Zielcluster verteilt hat. - Der Name des Zielclusters, aus dem ressourcen entfernt werden müssen.
Sie können für das Entfernen die Richtlinien PickAll und PickN der Clusterressourcenplatzierung verwenden.
PickedFixed wird nicht unterstützt, da Sie die Zielcluster bearbeiten und die CRP erneut anwenden können.
Note
Entfernung garantiert nicht, dass Ressourcen nicht erneut vom Flottenplaner an einen Mitgliedscluster verteilt werden. Sie müssenTaints anwenden, um zu verhindern, dass der Flottenplaner wieder einen bestimmten Cluster auswählt.
Betrachten Sie das folgende Beispiel-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
Nach der Anwendung dieses CRP können wir den Platzierungsstatus überprüfen , um zu bestimmen, für welche Cluster die Ressourcen bereitgestellt werden.
Angenommen, die Platzierung hat die beiden Cluster member-cluster-01 und member-cluster-02 ausgewählt, aber Sie möchten, dass die Ressourcen nicht in member-cluster-02 bereitgestellt werden und beschließen daher, sie zu entfernen.
Erstellen Sie einen
NoSchedule-Taint, um die Platzierungsanforderungen für den Mitgliedscluster zu blockieren. Weitere Informationen zur Verwendung von Taints finden Sie in der Dokumentation zu den Taints.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: NoScheduleErstellen Sie als Nächstes eine
ClusterResourcePlacementEviction, und wenden Sie sie an.apiVersion: placement.kubernetes-fleet.io/v1 kind: ClusterResourcePlacementEviction metadata: name: eviction-sample spec: placementName: crp-app-sample clusterName: member-cluster-02Überprüfen Sie, ob die angegebenen Ressourcen aus dem
member-cluster-02Cluster entfernt werden:kubectl get crpe eviction-sampleDies führt zu der folgenden Ausgabe, wobei
EXECUTEDTruezeigt.NAME VALID EXECUTED test-eviction True True
Nachdem Sie nun verstehen, wie Sie das Entfernen von platzierten Ressourcen aus Clustern erzwingen, sehen wir uns an, wie Sie wichtige Ressourcen vor Löschung schützen können.
Schutz vor Entfernung
Das ClusterResourcePlacementDisruptionBudget-Objekt schützt vor beabsichtigten Unterbrechungen, die auftreten, wenn Sie ein ClusterResourcePlacementEviction-Objekt auf eine platzierte Ressource anwenden. Es schützt nicht vor unbeabsichtigten Unterbrechungen.
Für die oben in diesem Artikel gezeigte Beispiel-Clusterressourcenplatzierung können Sie ein Budgetobjekt für Platzierungsunterbrechungen wie folgt definieren.
Der Name des Unterbrechungsbudgets muss mit dem CRP übereinstimmen.
apiVersion: placement.kubernetes-fleet.io/v1
kind: ClusterResourcePlacementDisruptionBudget
metadata:
name: crp-app-sample
spec:
minAvailable: 1
Geben Sie eines der folgenden beiden sich gegenseitig ausschließenden Felder in der Spezifikation an:
- maxUnavailable: Die maximale Anzahl von Clustern, in denen eine Platzierung aufgrund einer beliebigen Form von Unterbrechungen nicht verfügbar sein kann.
- minAvailable: Die Mindestanzahl der Cluster, in denen Platzierungen trotz jeglicher Form von Unterbrechungen verfügbar sind.
Beide Felder können entweder eine absolute Anzahl von Clustern als ganze Zahl oder ein Prozentsatz der Gesamtzahl der Cluster in der Flotte sein.
Wenn Sie ein Unterbrechungsbudget für eine bestimmte ClusterResourcePlacement Richtlinie angeben, lesen Sie die folgende Supportmatrix:
| CRP-Richtlinie |
minAvailable (ganze Zahl) |
minAvailable (%) |
maxUnavailable (ganze Zahl) |
MaxUnavailable (%) |
|---|---|---|---|---|
PickFixed |
❌ | ❌ | ❌ | ❌ |
PickAll |
✅ | ❌ | ❌ | ❌ |
PickN |
✅ | ✅ | ✅ | ✅ |
Note
Wenn Sie ein ungültiges Unterbrechungsbudgetobjekt für eine Platzierung erstellen, führen alle Entfernungsversuche zu Fehlern.
Überprüfen, ob die Zwangsräumung blockiert ist
Überprüfen Sie, ob ein konfiguriertes PodDisruptionBudget eine Eviction blockiert hat.
kubectl get crpe eviction-sample
Im EXECUTED-Feld wird False angezeigt, was bedeutet, dass die Entfernung nicht angewendet wurde.
NAME VALID EXECUTED
test-eviction True False
Führen Sie denselben kubectl-Befehl aus und fügen Sie -o yaml hinzu, um zu bestätigen, dass das Disruptions-Budget die Entfernung verhindert hat. Der message-Wert zeigt das Unterbrechungsbudget an, das die Entfernung blockiert hat.
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
Unfreiwillige Unterbrechung
Platzierungs-Disruptions-Budgets schützen nicht vor ungeplanten Unterbrechungen. Beispiele für unfreiwillige Unterbrechungen sind:
- Der Fleet Manager-Planer entfernt Ressourcen aus einem Mitgliedscluster aufgrund von Planungsrichtlinienänderungen.
- Sie löschen Workloadressourcen, die auf einem Mitgliedscluster ausgeführt werden, manuell (nicht durch Entfernung oder aktualisierte CRP).
- Sie löschen manuell ein
ClusterResourceBindingObjekt, bei dem es sich um eine interne Ressource handelt, die die Platzierung von Ressourcen in einem Membercluster darstellt. - Workloads werden aufgrund falscher Konfiguration oder clusterbezogener Probleme nicht ordnungsgemäß auf einem Membercluster ausgeführt.