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:

Gehen Sie wie folgt vor, um Pods auf das Ausführen bestimmter automatisch skalierter Worker-Pools zu beschränken:

  1. 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.

  2. Stimmen Sie in der Podspezifikationsvorlage (spec template) den Wert von nodeSelector oder nodeAffinity auf 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
    
  3. Gleichen Sie in der Podspezifikationsvorlage den Wert für toleration mit dem Taint ab, den Sie für Ihren Worker-Pools festlegen.

    Beispiel für NoExecute-Tolerierung:

    tolerations:
      - key: use
        operator: "Exists"
        effect: "NoExecute"
    
  4. 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.