Cluster-Autoscaler debuggen

Informieren Sie sich über die Optionen, die Ihnen für das Debuggen Ihres Cluster-Autoscalers und zum Eingrenzen der jeweiligen Fehlerquelle zur Verfügung stehen.

Vorbereitende Schritte: Greifen Sie auf Ihren Red Hat OpenShift-Cluster zu.

Schritt 1: Version überprüfen

  1. Stellen Sie sicher, dass das Add-on „Cluster Autoscaler“ installiert und einsatzbereit ist.
    ibmcloud oc cluster addon ls --cluster CLUSTER_NAME
    
    Beispielausgabe
    Name                 Version   Health State   Health Status   
    cluster-autoscaler   1.0.4     normal         Addon Ready
    
  2. Vergleichen Sie die Version, die in Ihrem Cluster ausgeführt wird, mit der neuesten Version im Änderungsprotokoll des Cluster-Autoscaler-Add-ons.
  3. Wenn Ihre Version veraltet ist, stellen Sie die neueste Version des Cluster-Autoscalers in Ihrem Cluster bereit.

Schritt 2: Konfiguration überprüfen

Stellen Sie sicher, dass der Cluster-Autoscaler korrekt konfiguriert ist.

  1. Rufen Sie die YAML-Konfigurationsdatei der Konfigurationszuordnung des Cluster-Autoscalers ab.

    oc get cm iks-ca-configmap -n kube-system -o yaml > iks-ca-configmap.yaml
    
  2. Stellen Sie im Feld data.workerPoolsConfig.json sicher, dass die richtigen Worker-Pools mit der Mindestgröße und der maximalen Größe pro Worker-Pool aktiviert sind.

    • "name": "<worker_pool_name>": Der Name des Worker-Pools in der ConfigMap muss exakt mit dem Namen des Worker-Pools in Ihrem Cluster übereinstimmen. Mehrere Worker-Pools müssen durch Kommas getrennt werden. Führen Sie ibmcloud oc worker-pool ls -c <cluster_name_or_ID> aus, um den Namen der Cluster-Worker-Pools zu überprüfen.
    • "minSize": 2: Im Allgemeinen muss minSize den Wert 2 haben oder größer sein.
    • "maxSize": 3: Der Wert für maxSize muss größer oder gleich dem Wert für minSize sein.
    • "enabled": true: Legen Sie den Wert true fest, um die automatische Skalierung des Worker-Pools zu aktivieren.
    data:
        workerPoolsConfig.json: |
            [{"name": "default", "minSize": 2, "maxSize": 3, "enabled": true }]
    
  3. Prüfen Sie, ob im Feld metadata.annotations.workerPoolsConfigStatus die Fehlernachricht FAILED CODE enthalten ist. Führen Sie alle Fehlerbehebungsmaßnahmen aus, die in der Fehlernachricht aufgeführt sind. Beispiel: Sie erhalten möglicherweise eine Nachricht ähnlich der folgenden. Dabei müssen Sie über die richtigen Berechtigungen für die Ressourcengruppe verfügen, in der sich der Cluster befindet.

    annotations:
        workerPoolsConfigStatus: '{"1:3:default":"FAILED CODE: 400
        ...
        \"description\":\"Unable
        to validate the request with resource group manager.\",\"type\":\"Authentication\\"recoveryCLI\":\"To
        list available resource groups, run ''ibmcloud resource groups''. Make sure
        that your cluster and the other IBM Cloud resources that you are trying to use
        are in the same resource group. Verify that you have permissions to work with
        the resource group. If you think that the resource group is set up correctly
        and you still can't use it, contact IBM Cloud support.\"}"}'
    

Schritt 3: Status des Cluster-Autoscalers überprüfen

Überprüfen Sie den Status des Cluster-Autoscalers.

oc describe cm -n kube-system cluster-autoscaler-status
  • status: Prüfen Sie die Statusnachricht auf weitere Fehlerbehebungsinformationen (falls vorhanden).
  • Health: Überprüfen Sie den Gesamtzustand des Cluster-Autoscaler hinsichtlich Fehler oder Störungen.
  • ScaleUp: Überprüfen Sie den Stand der Skalierungsmaßnahmen. Im Allgemeinen gilt: Wenn die Anzahl der bereiten und registrierten Worker-Knoten übereinstimmt, ist die Skalierung nach oben „ NoActivity “, da Ihr Worker-Pool über genügend Worker-Knoten verfügt.
  • ScaleDown: Überprüfen Sie den Stand der Maßnahmen zur Verkleinerung. Wenn der Cluster-Autoscaler NoCandidates angibt, wird Ihr Worker-Pool nicht herunterskaliert, weil keiner der Workerknoten entfernt werden kann, ohne die für Ihre Workloads erforderlichen Ressourcen zu mindern.
  • Events: Prüfen Sie die Ereignisse auf weitere Fehlerbehebungsinformationen (falls vorhanden).

Beispiel für einen einwandfreien Status des Cluster-Autoscalers

Data
====
status:
----
Cluster-autoscaler status at 2020-02-04 19:51:50.326683568 +0000 UTC:
Cluster-wide:
Health:      Healthy (ready=2 unready=0 notStarted=0 longNotStarted=0 registered=2longUnregistered=0)
            LastProbeTime:      2020-02-04 19:51:50.324437686 +0000 UTC m=+9022588.836540262
            LastTransitionTime: 2019-10-23 09:36:25.741087445 +0000 UTC m=+64.253190008
ScaleUp:     NoActivity (ready=2 registered=2)
            LastProbeTime:      2020-02-04 19:51:50.324437686 +0000 UTC m=+9022588.836540262
            LastTransitionTime: 2019-10-23 09:36:25.741087445 +0000 UTC m=+64.253190008
ScaleDown:   NoCandidates (candidates=0)
            LastProbeTime:      2020-02-04 19:51:50.324437686 +0000 UTC m=+9022588.836540262
            LastTransitionTime: 2019-10-23 09:36:25.741087445 +0000 UTC m=+64.253190008
Events:  none

Schritt 4: Cluster-Autoscaler-Pod überprüfen

Prüfen Sie den Zustand des Cluster-Autoscaler-Pods.

  1. Rufen Sie den Cluster-Autoscaler-Pod ab. Wenn der Status nicht Running ist, beschreiben Sie den Pod.

    oc get pods -n kube-system | grep ibm-iks-cluster-autoscaler
    
  2. Beschreiben Sie den Cluster-Autoscaler-Pod. Prüfen Sie den Abschnitt Events auf weitere Fehlerbehebungsinformationen.

    oc describe pod -n kube-system <pod_name>
    
  3. Prüfen Sie im Abschnitt Command, ob die angepasste Cluster-Autoscaler-Konfiguration mit den von Ihnen erwarteten Werten übereinstimmt, z. B. scale-down-delay-after-add.

    Command:
        ./cluster-autoscaler
        --v=4
        --balance-similar-node-groups=true
        --alsologtostderr=true
        --stderrthreshold=info
        --cloud-provider=IKS
        --skip-nodes-with-local-storage=true
        --skip-nodes-with-system-pods=true
        --scale-down-unneeded-time=10m
        --scale-down-delay-after-add=10m
        --scale-down-delay-after-delete=10m
        --scale-down-utilization-threshold=0.5
        --scan-interval=1m
        --expander=random
        --leader-elect=false
        --max-node-provision-time=120m
    

Schritt 5: Podprotokolle durchsuchen

Durchsuchen Sie die Protokolle des Cluster-Autoscaler-Pods nach relevanten Meldungen, beispielsweise Fehlermeldungen wie „ lastScaleDownFailTime “, „ Final scale-up plan “ oder Ereignissen des Cluster-Autoscalers.

Falls Ihr Cluster-Autoscaler-Pod nicht ordnungsgemäß funktioniert und keine Protokolle übertragen kann, überprüfen Sie Ihre „ IBM Cloud Logs “-Instanz auf die Protokolle des Pods. Möglicherweise stehen keine Protokolle zur Überprüfung zur Verfügung, wenn Ihr Clusteradministrator IBM Cloud Logs nicht für Ihren Cluster aktiviert hat.

oc logs -n kube-system <pod_name> -c ibm-iks-cluster-autoscaler > logs.txt

Schritt 6: Starten Sie den Pod neu

Wenn Sie keine Fehler oder Fehlernachrichten finden und die Protokollierung bereits aktiviert ist, starten Sie den Cluster-Autoscaler-Pod erneut. Bei der Bereitstellung wird der Pod erneut erstellt.

oc delete pod -n kube-system <pod_name>

Schritt 6: Inaktivieren und erneut aktivieren

Optional: Wenn Sie die Debugschritte ausgeführt haben und Ihr Cluster immer noch nicht skaliert wird, können Sie den Autoscaler inaktivieren und erneut aktivieren, indem Sie die Konfigurationszuordnung bearbeiten.

  1. Bearbeiten Sie die Konfigurationszuordnung iks-ca-configmap.

    oc edit cm iks-ca-configmap -n kube-system
    

    Beispielausgabe:

    apiVersion: v1
    data:
    workerPoolsConfig.json: |
        [{"name": "default", "minSize": 2, "maxSize": 5, "enabled": true }]
    kind: ConfigMap
    metadata:
    annotations:
        workerPoolsConfigStatus: '{"2:5:default":"SUCCESS"}'
    creationTimestamp: "2020-03-24T17:44:35Z"
    name: iks-ca-configmap
    namespace: kube-system
    resourceVersion: "40964517"
    selfLink: /api/v1/namespaces/kube-system/configmaps/iks-ca-configmap
    uid: 11a1111a-aaaa-1a11-aaa1-aa1aaaa11111
    
  2. Legen Sie den Parameter enabled auf false fest und speichern Sie Ihre Änderungen.

  3. Bearbeiten Sie die Datei iks-ca-configmap erneut. Setzen Sie den Parameter "enabled" auf true und speichern Sie Ihre Änderungen.

    oc edit cm iks-ca-configmap -n kube-system
    
  4. Wenn Ihr Cluster nach dem Inaktivieren und erneuten Aktivieren des Cluster-Autoscalers weiterhin nicht skaliert wird, können Sie die Parameter minSize oder maxSize in iks-ca-configmap bearbeiten. Manchmal wird der Cluster-Autoscaler durch das Bearbeiten der Workerparameter minSize und maxSize erfolgreich erneut gestartet.

    oc edit cm iks-ca-configmap -n kube-system
    
  5. Bearbeiten Sie die Parameter minSize oder maxSize und speichern Sie Ihre Änderungen.

Schritt 7: Überprüfen Sie, ob das Problem behoben ist

Überwachen Sie die Cluster-Autoscaler-Aktivitäten in Ihrem Cluster, um festzustellen, ob das Problem behoben ist. Wenn weiterhin Fehler auftreten, finden Sie weitere Informationen unter Feedback, Fragen und Unterstützung.