Freigeben über


Steuern von Entfernungs- und Unterbrechungsbudgets für die Azure Kubernetes Fleet Manager-Clusterressourcenplatzierung (Vorschau)

Administratoren, die die Clusterressourcenplatzierung (Cluster Resource Placement, CRP) von Fleet Manager verwenden, können feststellen, dass sie Ressourcen entfernen müssen, die zuvor auf Mitgliedsclustern platziert wurden, und gleichzeitig sicherstellen, dass wichtige Ressourcenplatzierungen nicht unterbrochen werden.

In diesem Artikel erfahren Sie, wie Sie fleet Manager ClusterResourcePlacementEviction und ClusterResourcePlacementDisruptionBudget Objekte verwenden können, um diese Ziele zu erreichen.

Hinweis

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.

Von Bedeutung

Previewfunktionen von Azure Kubernetes Fleet Manager sind auf Self-Service-Basis per Aktivierung verfügbar. Vorschauversionen werden „im Istzustand“ und „wie verfügbar“ bereitgestellt und sind von den Service Level Agreements und der eingeschränkten Garantie ausgeschlossen. Vorschauversionen von Azure Kubernetes Fleet Manager sind auf Best-Effort-Basis teilweise durch den Kundensupport abgedeckt. Daher sind diese Funktionen nicht für die Verwendung in der Produktion vorgesehen.

Unsere Datenebenenvorschauen werden über unsere v1beta1-API veröffentlicht. Wenn keine Vorschauobjekte angezeigt werden, überprüfen Sie, ob Sie die v1beta1-API anfordern, wenn Sie mit dem Fleet Manager-Hubcluster interagieren.

Entfernen von platzierten Ressourcen (Vorschau)

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 ClusterResourcePlacement Objekts, 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.

Hinweis

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/v1beta1
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.

  1. 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/v1beta1
    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: NoSchedule
    
  2. Erstellen Sie als Nächstes eine ClusterResourcePlacementEviction, und wenden Sie sie an.

    apiVersion: placement.kubernetes-fleet.io/v1beta1
    kind: ClusterResourcePlacementEviction
    metadata:
      name: eviction-sample
    spec:
      placementName: crp-app-sample
      clusterName: member-cluster-02
    
  3. Überprüfen Sie, ob die angegebenen Ressourcen aus dem member-cluster-02 Cluster entfernt werden:

    kubectl get crpe eviction-sample
    

    Dies führt zu der folgenden Ausgabe, wobei EXECUTEDTrue zeigt.

    NAME            VALID   EXECUTED
    test-eviction   True    True 
    

Jetzt verstehen Sie, wie Sie die Entfernung von platzierten Ressourcen aus Clustern erzwingen, und sehen wir uns an, wie Sie wichtige Ressourcen vor Löschung schützen können.

Schutz vor Vertreibung (Vorschau)

Das ClusterResourcePlacementDisruptionBudget Objekt schützt vor freiwilligen Unterbrechungen, die auftreten, wenn ein ClusterResourcePlacementEviction Objekt gegen eine platzierte Ressource angewendet wird. Unfreiwillige Störungen sind nicht geschützt.

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/v1beta1
kind: ClusterResourcePlacementDisruptionBudget
metadata:
  name: crp-app-sample
spec:
  minAvailable: 1

Sie können eines der folgenden beiden sich gegenseitig ausschließenden Felder in der Spezifikation angeben:

  • 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 als Prozentsatz der Gesamtzahl der Cluster in der Flotte sein.

Wenn Sie ein Unterbrechungsbudget für eine bestimmte ClusterResourcePlacement Richtlinie angeben, können Sie sich auf die folgende Supportmatrix beziehen:

CRP-Richtlinie minAvailable (ganze Zahl) minAvailable (%) maxUnavailable (ganze Zahl) MaxUnavailable (%)
PickFixed
PickAll
PickN

Hinweis

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

Sie können wie folgt überprüfen, ob ein konfiguriertes Unterbrechungsbudget eine Entfernung blockiert.

kubectl get crpe eviction-sample

Beachten Sie, dass das Feld EXECUTED False anzeigt, was angibt, dass die Entfernung nicht angewendet wurde.

NAME            VALID   EXECUTED
test-eviction   True    False

Um zu bestätigen, dass das Unterbrechungsbudget die Entfernung blockiert hat, geben Sie denselben Befehl kubectl aus und fügen -o yaml hinzu. 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

Budgets für Platzierungsstörungen schützen nicht vor unfreiwilligen Störungen. Beispiele für unfreiwillige Unterbrechungen sind:

  • Entfernen von Ressourcen aus einem Mitgliedscluster durch den Fleet Manager Scheduler aufgrund von Planungsrichtlinienänderungen.
  • Manuelles Löschen von Workloadressourcen, die in einem Mitgliedscluster ausgeführt werden (nicht über eine Entfernung oder eine aktualisierte CRP)
  • Manuelles Löschen eines ClusterResourceBinding Objekts, bei dem es sich um eine interne Ressource handelt, die die Platzierung von Ressourcen in einem Membercluster darstellt.
  • Workloads, die aufgrund falscher Konfiguration oder clusterbezogener Probleme nicht ordnungsgemäß auf einem Membercluster ausgeführt werden.

Nächste Schritte