IBM Cloud Docs
Podpriorität festlegen

Podpriorität festlegen

Mit Podpriorität und -zurückstellung können Sie Prioritätsklassen so konfigurieren, dass sie die relative Priorität der Pods angeben, aus denen die Workload in Ihrem Kubernetes-Cluster besteht. Der Kubernetes-Scheduler berücksichtigt die Priorität eines Pods und kann Pods mit niedrigerer Priorität zurückstellen (entfernen), um auf einem Workerknoten den erforderlichen Platz für Pods mit höherer Priorität zu schaffen.

Warum setze ich eine Pod-Priorität?
Als Clusteradministrator steuern Sie, welche Pods kritischer für Ihre Clusterauslastung sind. Prioritätsklassen können Ihnen helfen, die Entscheidungen des Kubernetes-Schedulers zu steuern, um Pods mit höherer Priorität gegenüber Pods mit niedrigerer Priorität zu bevorzugen. Der Kubernetes-Scheduler kann sogar Pods mit niedriger Priorität, die gerade ausgeführt werden, zurückstellen (entfernen), sodass anstehende Pods mit höherer Priorität geplant werden können.

Indem Sie die Podpriorität festlegen, können Sie verhindern, dass kritische Workloads in Ihrem Cluster von Workloads mit niedrigerer Priorität beeinträchtigt werden, insbesondere in den Fällen, in denen der Cluster seine Ressourcenkapazität erreicht.

Stellen Sie sicher, dass Sie den richtigen Benutzerzugriff auf Ihren Cluster und ggf. die Pod-Sicherheitsrichtlinien(PSPs)eingerichtet haben. Zugriffsrichtlinien und PSPs können dazu beitragen, nicht vertrauenswürdige Benutzer daran zu hindern, Pods mit hoher Priorität bereitzustellen, die die Planung anderer Pods verhindern.

Wie funktionieren Prioritätsplanung und Vorkaufsrecht?

Im Allgemeinen werden anstehende Pods, die eine höhere Priorität haben, vor Pods mit niedrigerer Priorität geplant. Wenn Sie nicht genügend Ressourcen auf Ihren Worker Nodes haben, kann der Kubernetes Scheduler Pods vorziehen (entfernen), um genügend Ressourcen für die höher priorisierten Pods freizugeben, die geplant werden sollen. Ordnungsgemäße Beendigung, Budgets für den Podausfall (Pod Disruption Budgets) und Workerknotenaffinität wirken sich ebenfalls auf die Zurückstellung aus.

Wenn Sie keine Priorität für Ihre Pod-Bereitstellung angeben, wird der Standardwert auf die Prioritätsklasse festgelegt, die als globalDefault festgelegt ist. Wenn Sie nicht über eine globalDefault-Prioritätsklasse verfügen, ist die Standardpriorität für alle Pods null (0). Standardmäßig legt IBM Cloud Kubernetes Service keinen Wert für globalDefault fest, d. h. die Standardpriorität des Pods ist null.

Wenn Sie wissen möchten, wie die Podpriorität und der Kubernetes-Scheduler zusammenarbeiten, sehen Sie sich die Szenarios in der folgenden Abbildung an. Sie müssen priorisierte Pods auf Workerknoten mit verfügbaren Ressourcen platzieren. Andernfalls kann es geschehen, dass Pods mit hoher Priorität in Ihrem Cluster weiter zur Verarbeitung anstehen, während gleichzeitig vorhandene Pods entfernt werden (siehe Szenario 3).

Szenarien mit Pod-Priorität.
Szenarien der Pod-Priorität

  1. Drei Pods mit hoher, mittlerer und niedriger Priorität stehen für die Planung an. Der Kubernetes-Scheduler sucht einen verfügbaren Workerknoten mit der Kapazität für alle drei Pods und plant sie in der Reihenfolge ihrer Priorität, wobei der Pod mit der höchsten Priorität zuerst geplant wird.
  2. Drei Pods mit hoher, mittlerer und niedriger Priorität stehen für die Planung an. Der Kubernetes-Scheduler findet einen verfügbaren Workerknoten, aber der Workerknoten verfügt nur über die Ressourcen, die zur Unterstützung der Pods mit hoher und mittlerer Priorität erforderlich sind. Der Pod mit niedriger Priorität wird nicht geplant und verbleibt im Status 'Anstehend'.
  3. Zwei Pods mit hoher und mittlerer Priorität stehen für die Planung an. Ein dritter Pod mit niedriger Priorität ist auf einem verfügbaren Workerknoten vorhanden. Der Workerknoten verfügt jedoch nicht über genügend Ressourcen, um einen der anstehenden Pods zu planen. Der Kubernetes-Scheduler stellt den Pod mit niedriger Priorität zurück (bzw. entfernt ihn), wodurch der Pod in den Status 'Anstehend' zurückgesetzt wird. Anschließend versucht der Kubernetes-Scheduler, den Pod mit hoher Priorität zu planen. Der Workerknoten verfügt jedoch nicht über genügend Ressourcen, um den Pod mit hoher Priorität zu planen. Der Kubernetes-Scheduler plant stattdessen den Pod mit mittlerer Priorität.

Weitere Informationen finden Sie in der Dokumentation Kubernetes über Pod-Priorität und Preemption.

Kann ich den Pod Priority Admission Controller deaktivieren?
Anzahl Wenn Sie die Podpriorität nicht verwenden wollen, legen Sie keine globalDefault fest oder schließen Sie keine Prioritätsklasse in Ihre Podbereitstellungen ein. Jeder Pod nimmt standardmäßig den Wert null an, mit Ausnahme der clusterkritischen Pods, die von IBM mit den Standardprioritätsklassen bereitgestellt werden. Da die Podpriorität relativ ist, stellt diese Basiskonfiguration sicher, dass die clusterkritischen Pods für Ressourcen priorisiert werden, und plant alle anderen Pods nach den bestehenden Planungsrichtlinien, die Sie eingerichtet haben.
Wie wirken sich die Ressourcenquoten auf die Pod-Priorität aus?
Sie können die Pod-Priorität in Kombination mit Ressourcenquoten, einschließlich Quotenbereichen, verwenden. Mithilfe von Quotenbereichen können Sie Ihre Ressourcenquoten für die Podpriorität einrichten. Die Pods mit höherer Priorität können Systemressourcen nutzen, die durch die Ressourcenquote eingeschränkt werden, bevor Pods mit niedrigerer Priorität darauf Zugriff erhalten.

Informationen zu den Standardprioritätsklassen

Ihre IBM Cloud® Kubernetes Service-Cluster verfügen bereits standardmäßig über bestimmte Prioritätsklassen.

Ändern Sie nicht die Standardklassen, die zur ordnungsgemäßen Verwaltung Ihres Clusters verwendet werden. Sie können diese Klassen in Ihren App-Bereitstellungen verwenden oder eigene Prioritätsklassen erstellen.

In der folgenden Tabelle werden die Prioritätsklassen, die in Ihrem Cluster standardmäßig vorhanden sind, und die Gründe für ihre Verwendung beschrieben.

Standardprioritätsklassen, die nicht geändert werden dürfen
Name Festgelegt durch Prioritätswert Zweck
system-node-critical Kubernetes 2000001000 Ausgewählte Pods, die beim Erstellen des Clusters in privilegierten System-Namensräumen bereitgestellt werden, verwenden diese Prioritätsklasse, um kritische Funktionen für Arbeitsknoten zu schützen, z. B. für Netzwerk-, Speicher-, Protokollierungs-, Überwachungs- und Metrik-Pods.
system-cluster-critical Kubernetes 2000000000 Ausgewählte Pods, die bei der Erstellung des Clusters in privilegierten System-Namensräumen bereitgestellt werden, verwenden diese Prioritätsklasse, um kritische Funktionen für Cluster zu schützen, z. B. für Netzwerk-, Speicher-, Protokollierungs-, Überwachungs- und Metrik-Pods.
ibm-app-cluster-critical IBM 900000000 Ausgewählte Pods, die bei der Erstellung des Clusters in privilegierten System-Namespaces bereitgestellt werden, verwenden diese Prioritätsklasse, um kritische Funktionen für Anwendungen zu schützen, wie z. B. die Load Balancer-Pods.

Sie können überprüfen, welche Pods die Prioritätsklassen verwenden, indem Sie den folgenden Befehl ausführen.

kubectl get pods --all-namespaces -o custom-columns=NAME:.metadata.name,PRIORITY:.spec.priorityClassName

Prioritätsklasse erstellen

Um die Podpriorität festzulegen, müssen Sie eine Prioritätsklasse verwenden.

Vorbereitende Schritte:

  1. Listen Sie die vorhandenen Prioritätsklassen auf. Sie können eine bestehende Prioritätsklasse als Vorlage für die neue Klasse verwenden.

    kubectl get priorityclasses
    
  2. Wählen Sie die Prioritätsklasse aus, die Sie kopieren möchten, und erstellen Sie eine lokale YAML-Datei.

    kubectl get priorityclass <priority_class> -o yaml > Downloads/priorityclass.yaml
    
  3. Erstellen Sie Ihre YAML-Datei für die Prioritätsklasse.

    apiVersion: scheduling.k8s.io/v1alpha1
    kind: PriorityClass
    metadata:
      name: <priority_class_name>
    value: <1000000>
    globalDefault: <false>
    description: "Use this class for XYZ service pods only."
    
    Erläuterungen zu den Komponenten der YAML-Datei
    Komponenten Beschreibung
    name Erforderlich: Der Name der Prioritätsklasse, die Sie erstellen möchten.
    value Erforderlich: Geben Sie eine ganze Zahl kleiner-gleich 1 Milliarde (1000000000) ein. Je höher der Wert, umso höher ist die Priorität. Die Werte sind relativ zu den Werten anderer Prioritätsklassen im Cluster. Reservieren Sie sehr hohe Zahlen für systemkritische Pods, die nicht zurückgestellt (entfernt) werden sollen.

    Beispiel: Die clusterkritischen Standardprioritätsklassen liegen im Wertebereich 900000000 - 2000001000. Geben Sie daher einen Wert, der kleiner als diese Zahlen ist, für neue Prioritätsklassen ein, sodass nichts eine höhere Priorität erhält als diese Pods.

    globalDefault Optional: Setzen Sie das Feld auf true, um diese Prioritätsklasse zum globalen Standard zu machen, der auf jeden Pod angewendet wird, der ohne den Wert priorityClassName geplant wird. Nur eine Prioritätsklasse in Ihrem Cluster kann als globaler Standardwert festgelegt werden. Wenn es keinen globalen Standardwert gibt, haben Pods ohne priorityClassName eine Priorität von null (0).

    Die Standardprioritätsklassen legen keinen globalDefault fest. Wenn Sie weitere Prioritätsklassen in Ihrem Cluster erstellt haben, können Sie zur Sicherheit überprüfen, dass sie keinen globalDefault festlegen, indem Sie kubectl describe priorityclass <name> ausführen.

    description Optional: Teilen Sie den Benutzern mit, warum diese Prioritätsklasse verwendet werden soll. Schließen Sie die Zeichenfolge in Anführungszeichen ein ("").
  4. Erstellen Sie die Prioritätsklasse in Ihrem Cluster.

    kubectl apply -f filepath/priorityclass.yaml
    
  5. Stellen Sie sicher, dass die Prioritätsklasse erstellt wurde.

    kubectl get priorityclasses
    

Super! Sie haben jetzt eine Prioritätsklasse erstellt. Informieren Sie Ihr Team über die Prioritätsklasse und teilen Sie ihm mit, welche Prioritätsklasse für die Podbereitstellungen verwendet werden muss.

Priorität für Pods zuweisen

Ordnen Sie Ihrer Podspezifikation eine Prioritätsklasse zu, um die Priorität des Pods in Ihrem IBM Cloud Kubernetes Service-Cluster festzulegen.

Vorbereitende Schritte:

Führen Sie die folgenden Schritte aus, um die Wichtigkeit anderer bereitgestellter Pods zu überprüfen, damit Sie die richtige Prioritätsklasse für Ihre Pods im Verhältnis zu den bereits bereitgestellten Pods wählen können.

  1. Zeigen Sie die Prioritätsklassen an, die andere Pods im Namensbereich verwenden.

    kubectl get pods -n <namespace> -o custom-columns=NAME:.metadata.name,PRIORITY:.spec.priorityClassName
    
  2. Rufen Sie die Details der Prioritätsklasse ab und notieren Sie die Zahl für value. Pods mit höheren Zahlen werden vor Pods mit niedrigeren Zahlen priorisiert. Wiederholen Sie diesen Schritt für jede Prioritätsklasse, die Sie prüfen wollen.

    kubectl describe priorityclass <priorityclass_name>
    
  3. Rufen Sie die Prioritätsklasse ab, die Sie verwenden möchten, oder erstellen Sie Ihre eigene Prioritätsklasse.

    kubectl get priorityclasses
    
  4. Fügen Sie in Ihrer Podspezifikation das Feld priorityClassName mit dem Namen der Prioritätsklasse hinzu, die Sie im vorherigen Schritt abgerufen haben.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: ibmliberty
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: ibmliberty
      template:
        metadata:
          labels:
            app: ibmliberty
        spec:
          containers:
          - name: ibmliberty
            image: icr.io/ibm/liberty:latest
            ports:
            - containerPort: 9080
          priorityClassName: <priorityclass_name>
    
  5. Erstellen Sie Ihre priorisierten Pods in dem Namensbereich, in dem sie bereitgestellt werden sollen.

    kubectl apply -f filepath/pod-deployment.yaml