Apps in Workerpools bereitstellen, in denen die automatische Skalierung aktiviert ist
Wenn Sie eine Podbereitstellung auf einen bestimmten Worker-Pool beschränken möchten, der vom Cluster-Autoscaler verwaltet wird, verwenden Sie eine Kombination aus Bezeichnungen (Labels) und der Angabe nodeSelector oder nodeAffinity,
damit Apps nur in den Worker-Pools mit automatischer Skalierung bereitgestellt werden. Mit nodeAffinity haben Sie mehr Kontrolle über die Funktionsweise des Planungsverhaltens beim Zuordnen von Pods zu Workerknoten. Verwenden Sie
anschließend Taints und Tolerierungen, sodass nur diese Apps auf Ihren Worker-Pools mit automatischer Skalierung ausgeführt werden können.
Weitere Informationen enthalten die folgenden Kubernetes-Dokumente:
Vorbereitende Schritte:
- Installieren Sie das Plug-in
ibm-iks-cluster-autoscaler. - Rufen Sie Ihren Red Hat OpenShift-Cluster auf.
Gehen Sie wie folgt vor, um Pods auf das Ausführen bestimmter automatisch skalierter Worker-Pools zu beschränken:
-
Stellen Sie sicher, dass Sie Ihren Worker-Pool mit automatischer Skalierung wie in Cluster für die automatische Skalierung vorbereiten beschrieben mit Bezeichnungen (Labels) und Taints versehen haben.
-
Stimmen Sie in der Podspezifikationsvorlage (spec template) den Wert von
nodeSelectorodernodeAffinityauf die Bezeichnung ab, die Sie in Ihrem Worker-Pool verwendet haben.Beispiel für
nodeSelector:... spec: containers: - name: nginx image: nginx imagePullPolicy: IfNotPresent nodeSelector: app: nginx ...Beispiel für
nodeAffinity:spec: containers: - name: nginx image: nginx imagePullPolicy: IfNotPresent affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: use operator: In values: - autoscale -
Gleichen Sie in der Podspezifikationsvorlage den Wert für
tolerationmit dem Taint ab, den Sie für Ihren Worker-Pools festlegen.Beispiel für
NoExecute-Tolerierung:tolerations: - key: use operator: "Exists" effect: "NoExecute" -
Stellen Sie den Pod bereit. Durch die übereinstimmende Bezeichnung wird der Pod auf einem Workerknoten geplant, der sich in dem Worker-Pool mit der Bezeichnung befindet. Aufgrund der übereinstimmenden Tolerierung kann der Pod auf dem mit Taint versehenen Worker-Pool ausgeführt werden.
oc apply -f pod.yaml
Scale-up von Workerknoten durchführen, bevor der Worker-Pool unzureichende Ressourcen hat
Wie im Thema "Verstehen der Funktionsweise des Cluster-Autoscalers" und in den häufig gestellten Fragen zum Cluster-Autoscaler unter Kubernetes beschrieben, skaliert der Cluster-Autoscaler Ihre Arbeitspools als Reaktion auf die von Ihnen angeforderten Ressourcen der Arbeitslast im Vergleich zu den verfügbaren Ressourcen des Arbeitspools. Es kann jedoch wünschenswert sein, dass der Cluster-Autoscaler Workerknoten durch ein Scale-up hinzufügt, bevor der Worker-Pool über zu wenig Ressourcen verfügt. In diesem Fall muss Ihre Workload nicht so lange auf die Bereitstellung von Workerknoten warten, weil der Worker-Pool bereits durch ein Scale-up vergrößert wurde, um die Ressourcenanforderungen zu erfüllen.
Der Cluster-Autoscaler unterstützt eine frühzeitige Skalierung (Überbereitstellung) von Worker-Pools nicht. Sie haben jedoch die Möglichkeit, andere Kubernetes-Ressourcen mit Verwaltung durch den Cluster-Autoscaler zu konfigurieren, um eine frühzeitige Skalierung zu erreichen.
Pods anhalten
Sie können eine Bereitstellung erstellen, die Pausencontainer in Pods mit bestimmten Ressourcenanforderungen bereitstellt, und der Bereitstellung eine niedrige Pod-Priorität zuweisen. Wenn diese Ressourcen von Workloads höherer Priorität benötigt werden, wird der Pausenpod präemptiv vom Workerknoten entfernt und wird zu einem anstehenden Pod. Dieses Ereignis löst ein Scale-up durch den Cluster-Autoscaler aus.
Weitere Informationen zur Einrichtung einer Pause-Pod-Bereitstellung finden Sie in den FAQ unter Kubernetes. Sie können diese Beispiel-Konfigurationsdatei für die Überbereitstellung verwenden, um die Prioritätsklasse, das Dienstkonto und die Bereitstellungen zu erstellen.
Wenn Sie diese Methode verwenden, stellen Sie sicher, dass Sie mit der Funktionsweise der Podpriorität und der Vorgehensweise zum Festlegen der Podpriorität für Ihre Bereitstellungen
vertraut sind. Wenn der Pausenpod zum Beispiel nicht genügend Ressourcen für einen Pod höherer Priorität zur Verfügung hat, wird der Pod nicht präemptiv entfernt. Die Workload mit der höheren Priorität verbleibt im anstehenden Status, sodass
ein Scale-up durch den Cluster-Autoscaler ausgelöst wird. In diesem Fall ist die Scale-up-Aktion jedoch nicht zu früh, da die Workload, die Sie ausführen wollen, aufgrund unzureichender Ressourcen nicht terminiert werden kann. Der Pausenpod
muss den übereinstimmenden Wert für nodeAffinity oder nodeSelector enthalten und die entsprechenden Tolerierungen, die Sie für Ihren Worker-Pool festgelegt haben.
Horizontale automatische Podskalierung (HPA)
Da die horizontale automatische Podskalierung auf der durchschnittlichen CPU-Auslastung der Pods basiert, wird die Begrenzung der CPU-Auslastung, die Sie festlegen, erreicht, bevor der Worker-Pool zu wenig Ressourcen hat.
Es werden mehr Pods angefordert, was wiederum ein Scale-up des Worker-Pools durch den Cluster-Autoscaler auslöst. Weitere Informationen zur Einrichtung von HPA finden Sie in den Dokumenten unter Kubernetes.