Podpriorität festlegen
Mit Podpriorität und Zurückstellung können Sie Prioritätsklassen konfigurieren, um die relative Priorität der Pods anzugeben, aus denen die Workload Ihres Red Hat OpenShift-Clusters besteht. Der Red Hat OpenShift-Controller berücksichtigt die Priorität eines Pods und kann Pods mit niedrigerer Priorität zurückstellen (entfernen), um in einem Workerknoten den erfordrelichen Platz für Pods mit höherer Priorität zu schaffen. Weitere Informationen finden Sie in der Dokumentation Red Hat OpenShift.
- Warum lege ich die Pod-Priorität fest?
- Als Clusteradministrator steuern Sie, welche Pods kritischer für Ihre Clusterauslastung sind. Prioritätsklassen können Ihnen helfen, die Entscheidungen des Red Hat OpenShift-Controllers zu steuern, um Pods mit höherer Priorität gegenüber Pods mit niedrigerer Priorität Vorrang zu geben. Der Red Hat OpenShift-Controller kann sogar Pods mit niedrigerer Pods, die gerade ausgeführt werden, zurückstellen (entfernen), damit 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 gegebenenfalls Sicherheitskontexteinschränkungen eingerichtet haben. Zugriffsrichtlinien und Sicherheitskontexteinschränkungen 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 Präemption?
Im Allgemeinen werden anstehende Pods, die eine höhere Priorität haben, vor Pods mit niedrigerer Priorität geplant. Wenn auf Ihren Worker-Knoten nicht genügend Ressourcen verfügbar sind, kann der „ Red Hat OpenShift “-Controller Pods vorzeitig beenden (entfernen), um genügend Ressourcen freizugeben, damit Pods mit höherer Priorität eingeplant werden können. 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 über keine globalDefault-Prioritätsklasse verfügen,
ist die Standardpriorität für alle Pods null (0). Standardmäßig legt Red Hat OpenShift on IBM Cloud keinen Wert für globalDefault fest, sodass die Standardpriorität des Pods null ist.
Wenn Sie wissen möchten, wie die Podpriorität und der Red Hat OpenShift-Controller 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).
- Drei Pods mit hoher, mittlerer und niedriger Priorität stehen für die Planung an. Der Red Hat OpenShift-Controller findet 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.
- Drei Pods mit hoher, mittlerer und niedriger Priorität stehen für die Planung an. Der Red Hat OpenShift-Controller findet einen verfügbaren Workerknoten, aber der Workerknoten verfügt nur über die Ressourcen, um die Pods mit hoher und mittlerer Priorität zu unterstützen. Der Pod mit niedriger Priorität wird nicht geplant und verbleibt im Status 'Anstehend'.
- 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 Red Hat OpenShift-Controller stellt den Pod mit niedriger Priorität zurück (entfernt ihn), wodurch der Pod in den Status "Anstehend" zurückgesetzt wird. Anschließend versucht der Red Hat OpenShift-Controller, den Pod mit hoher Priorität zu planen. Im Workerknoten sind jedoch nicht genügend Ressourcen verfügbar, um den Pod mit hoher Priorität zu planen. Stattdessen plant der Red Hat OpenShift-Controller den Pod mit mittlerer Priorität.
Weitere Informationen finden Sie in der Dokumentation zu „ Kubernetes “ unter den Themen „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
globalDefaultfest 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.
Informationen zu den Standardprioritätsklassen
Ihre Red Hat® OpenShift® on IBM Cloud®-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.
| Name | Festgelegt durch | Prioritätswert | Zweck |
|---|---|---|---|
system-node-critical |
Kubernetes | 2000001000 | Wählen Sie diese Prioritätsklasse für Pods aus, die beim Erstellen des Clusters in privilegierten System-Namespaces bereitgestellt werden, um kritische Funktionen für Worker-Knoten zu schützen, beispielsweise Pods für Netzwerk, Speicher, Protokollierung, Überwachung und Metriken. |
system-cluster-critical |
Kubernetes | 2000000000 | Wählen Sie diese Prioritätsklasse für Pods aus, die beim Erstellen des Clusters in privilegierten System-Namespaces bereitgestellt werden, um kritische Funktionen des Clusters zu schützen, beispielsweise Pods für Netzwerk, Speicher, Protokollierung, Überwachung und Metriken. |
ibm-app-cluster-critical |
IBM | 900000000 | Wählen Sie diese Prioritätsklasse für Pods aus, die beim Erstellen des Clusters in privilegierten System-Namespaces bereitgestellt werden, um kritische Funktionen für Anwendungen zu schützen, beispielsweise die Load-Balancer-Pods. |
Sie können überprüfen, welche Pods die Prioritätsklassen verwenden, indem Sie den folgenden Befehl ausführen.
oc 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:
- Rufen Sie Ihren Red Hat OpenShift-Cluster auf.
- Stellen Sie sicher, dass Sie über die IAM-Zugriffsrolle „Writer“ oder „Manager“ IBM Cloud für den Namespace „
default“ verfügen.
-
Listen Sie die vorhandenen Prioritätsklassen auf. Sie können eine bereits vorhandene Prioritätsklasse als Vorlage für die neue Klasse verwenden.
oc get priorityclasses -
Wählen Sie die Prioritätsklasse aus, die Sie kopieren möchten, und erstellen Sie eine lokale YAML-Datei.
oc get priorityclass <priority_class> -o yaml > Downloads/priorityclass.yaml -
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 nameErforderlich: Der Name der Prioritätsklasse, die Sie erstellen möchten. valueErforderlich: 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: Der Bereich für Standardklassen für clusterkritische Priorität im Wert von 900000000–2000001000. Geben Sie daher einen Wert ein, der kleiner als diese Zahlen für neue Prioritätsklassen ist, sodass nichts höher priorisiert wird als diese Pods.
globalDefaultOptional: Setzen Sie das Feld auf true, um diese Prioritätsklasse zum globalen Standard zu machen, der auf jeden Pod angewendet wird, der ohne den WertpriorityClassNamegeplant wird. Nur eine Prioritätsklasse in Ihrem Cluster kann als globaler Standardwert festgelegt werden. Wenn es keinen globalen Standardwert gibt, haben Pods ohnepriorityClassNameeine Priorität von null (0).Die Standardprioritätsklassen legen keinen
globalDefaultfest. Wenn Sie weitere Prioritätsklassen in Ihrem Cluster erstellt haben, können Sie zur Sicherheit überprüfen, dass sie keinenglobalDefaultfestlegen, indem Sieoc describe priorityclass <name>ausführen.descriptionOptional: Teilen Sie den Benutzern mit, warum diese Prioritätsklasse verwendet werden soll. Schließen Sie die Zeichenfolge in Anführungszeichen ein ( ""). -
Erstellen Sie die Prioritätsklasse in Ihrem Cluster.
oc apply -f filepath/priorityclass.yaml -
Stellen Sie sicher, dass die Prioritätsklasse erstellt wurde.
oc 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 Red Hat OpenShift on IBM Cloud-Cluster festzulegen.
Vorbereitende Schritte:
- Rufen Sie Ihren Red Hat OpenShift-Cluster auf.
- Stellen Sie sicher, dass Sie über die IAM-Zugriffsrolle „Writer“ oder „Manager“ IBM Cloud in dem Namespace verfügen, in dem Sie die Pods bereitstellen möchten.
- Machen Sie sich damit vertraut, wie die Planung anhand der Priorität funktioniert, da die Priorität die Zurückstellung vorhandener Pods bewirken und außerdem beeinflussen kann, wie die Ressourcen Ihres Clusters genutzt werden.
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 auswählen können.
-
Zeigen Sie die Prioritätsklassen an, die andere Pods im Namensbereich verwenden.
oc get pods -n <namespace> -o custom-columns=NAME:.metadata.name,PRIORITY:.spec.priorityClassName -
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.
oc describe priorityclass <priorityclass_name> -
Rufen Sie die Prioritätsklasse ab, die Sie verwenden möchten, oder erstellen Sie Ihre eigene Prioritätsklasse.
oc get priorityclasses -
Fügen Sie in Ihrer Podspezifikation das Feld
priorityClassNamemit 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> -
Erstellen Sie Ihre priorisierten Pods in dem Namensbereich, in dem sie bereitgestellt werden sollen.
oc apply -f filepath/pod-deployment.yaml