Leistung für Red Hat CoreOS-Workerknoten optimieren

Satellite

Unterstützte Betriebssysteme für Workerknoten
Red Hat CoreOS (RHCOS)

Sie können die Leistung Ihrer Red Hat CoreOS Worker Nodes optimieren, indem Sie CPU-Pinning, ungleichmäßigen Speicherzugriff (NUMA) und große Seiten aktivieren. Diese Konfigurationen können für Anwendungen mit strengen Leistungsanforderungen von Vorteil sein. Diese Anpassungen können jedoch zu Problemen bei der Arbeitslastplanung führen.

Anstatt die Leistung der Arbeitsknoten mit MachineConfig Dateien in Red Hat OpenShift zu optimieren, können Sie den Host mit einer daemonset Datei ändern. Weitere Informationen finden Sie unter Ändern der Calico MTU oder Tuning der Leistung für Red Hat CoreOS Worker Nodes.

Erkennungsoperator für Node Feature implementieren

Satellite

Bevor Sie NUMA, CPU-Pinning und Huge Pages auf Ihren Workerknoten aktivieren können, müssen Sie Node Feature Discovery Operator bereitstellen. Weitere Informationen finden Sie unter Node Feature Discovery Operator.

Uneinheitlichen Speicherzugriff (NUMA), CPU-Pinning und Huge Pages auf Ihren Workerknoten aktivieren

Satellite

Stellen Sie zunächst sicher, dass Sie den Node Feature Discovery Operator implementiert haben.

  1. Speichern Sie die folgende Datei DaemonSet in einer Datei namens customize.yaml.

    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      name: ibm-user-custom-configurator-privileged
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: system:openshift:scc:privileged
    subjects:
      - kind: ServiceAccount
        name: ibm-user-custom-configurator
        namespace: kube-system
    ---
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: ibm-user-custom-configurator
      namespace: kube-system
    ---
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: ibm-user-custom-configurator
      namespace: kube-system
    data:
      89-hugepages.conf: |
        vm.nr_hugepages=<<NUMBER_OF_HUGEPAGES>>
      configure.sh: |
        #!/usr/bin/env bash
        set -x
        cp -f /scripts/ibm-user-custom-configuration.sh /host-usr-local-bin/ibm-user-custom-configuration.sh
        chmod 0755 /host-usr-local-bin/ibm-user-custom-configuration.sh
        cp -f /scripts/ibm-user-custom-configuration.service /host-etc-systemd-dir/ibm-user-custom-configuration.service
        chmod 0644 /host-etc-systemd-dir/ibm-user-custom-configuration.service
        if [[ -f /scripts/89-hugepages.conf ]]; then
          cp -f /scripts/89-hugepages.conf /host-etc-systctld-dir/89-hugepages.conf
        fi
        nsenter -t 1 -m -u -i -n -p -- systemctl daemon-reload
        nsenter -t 1 -m -u -i -n -p -- systemctl enable ibm-user-custom-configuration.service
        nsenter -t 1 -m -u -i -n -p -- systemctl start ibm-user-custom-configuration.service
      ibm-user-custom-configuration.sh: |
        #!/usr/bin/env bash
        set -x
        GIGABYTES_RESERVED_MEMORY=$(echo $SYSTEM_RESERVED_MEMORY | awk -F 'Gi' '{print $1}')
        GIGABYTES_RESERVED_MEMORY_ROUNDED_UP=$(echo $GIGABYTES_RESERVED_MEMORY | awk '{print int($1+0.999)}')
        sed -i "s/SYSTEM_RESERVED_MEMORY=.*/SYSTEM_RESERVED_MEMORY=${GIGABYTES_RESERVED_MEMORY_ROUNDED_UP}Gi/g" /etc/node-sizing.env
        TOTAL_NUMA_MEMORY_TO_ALLOCATE=$(echo "$GIGABYTES_RESERVED_MEMORY_ROUNDED_UP" "1024" | awk '{print $1 * $2 + 100}')
        if cat /etc/kubernetes/kubelet.conf | jq -r .; then
          cat >/tmp/ibm-user-config.conf.json <<EOF
          {
            "topologyManagerPolicy": "<<TOPOLOGY_MANAGER_POLICY_VALUE>>",
            "memoryManagerPolicy": "Static",
            "cpuManagerPolicy": "static",
            "reservedMemory": [
              {
                "numaNode": 0,
                "limits": {
                "memory": "${TOTAL_NUMA_MEMORY_TO_ALLOCATE}Mi"
                  }
              }
            ]
          }
        EOF
          if ! cat /tmp/ibm-user-config.conf.json | jq -r .; then
            exit 1
          fi
          if ! jq -s '.[0] * .[1]' /tmp/ibm-user-config.conf.json /etc/kubernetes/kubelet.conf > /etc/kubernetes/tmp-kubelet.conf; then
            exit 1
          fi
          mv -f /etc/kubernetes/tmp-kubelet.conf /etc/kubernetes/kubelet.conf
          else
            cat >/tmp/ibm-user-config.conf <<EOF
        #START USER CONFIG
        topologyManagerPolicy: <<TOPOLOGY_MANAGER_POLICY_VALUE>>
        memoryManagerPolicy: Static
        cpuManagerPolicy: static
        reservedMemory:
          - numaNode: 0
            limits:
              memory: ${TOTAL_NUMA_MEMORY_TO_ALLOCATE}Mi
        #END USER CONFIG
        EOF
          sed -i '/#START USER CONFIG/,/#END USER CONFIG/d' /etc/kubernetes/kubelet.conf
          cat /tmp/ibm-user-config.conf >>/etc/kubernetes/kubelet.conf
        fi
      ibm-user-custom-configuration.service: |
        [Unit]
        Description=Add custom user config to kubelet
        Before=kubelet.service
        After=kubelet-auto-node-size.service
        [Service]
        Type=oneshot
        RemainAfterExit=yes
        EnvironmentFile=/etc/node-sizing.env
        ExecStart=/usr/local/bin/ibm-user-custom-configuration.sh
        [Install]
        WantedBy=multi-user.target
    ---
    apiVersion: apps/v1
    kind: DaemonSet
    metadata:
      labels:
        app: ibm-user-custom-configurator
      name: ibm-user-custom-configurator
      namespace: kube-system
    spec:
      selector:
        matchLabels:
          app: ibm-user-custom-configurator
      template:
        metadata:
          labels:
            app: ibm-user-custom-configurator
        spec:
          nodeSelector:
            feature.node.kubernetes.io/memory-numa: "true"
            ibm-cloud.kubernetes.io/os: RHCOS
          tolerations:
            - operator: "Exists"
          hostPID: true
          serviceAccount: ibm-user-custom-configurator
          initContainers:
            - name: configure
              image: "registry.access.redhat.com/ubi8/ubi:8.6"
              command: ['/bin/bash', '-c', 'mkdir /cache && cp /scripts/configure.sh /cache && chmod +x /cache/configure.sh && /bin/bash /cache/configure.sh']
              securityContext:
                privileged: true
              volumeMounts:
                - mountPath: /scripts
                  name: script-config
                - mountPath: /host-etc-systemd-dir
                  name: etc-systemd-dir
                - mountPath: /host-usr-local-bin
                  name: usr-local-bin
                - mountPath: /host-etc-systctld-dir
                  name: etc-systctld-dir
          containers:
            - name: pause
              image: us.icr.io/armada-master/pause:3.2
          volumes:
            - name: etc-systemd-dir
              hostPath:
                path: /etc/systemd/system
            - name: etc-systctld-dir
              hostPath:
                path: /etc/sysctl.d
            - name: usr-local-bin
              hostPath:
                path: /usr/local/bin
            - name: script-config
              configMap:
                name: ibm-user-custom-configurator
    
  2. Bearbeiten Sie die Werte für DaemonSet, um die Leistung zu optimieren.

NUMBER_OF_HUGEPAGES

Geben Sie die Anzahl der Huge Pages ein, die Sie zuordnen wollen. Beispiel: 2048. Wenn Sie Huge Pages nicht aktivieren möchten, geben Sie 0 ein. Je mehr Huge Pages Sie zuordnen, desto weniger Gesamtspeicher steht Ihren Anwendungen zur Verfügung.

TOPOLOGY_MANAGER_POLICY_VALUE

Geben Sie die zu verwendende Topologiemanager-Richtlinie ein. Die Richtlinie best-effort wird empfohlen, um eine maximale Verfügbarkeit von Terminen zu gewährleisten. Sie können jedoch auch andere Richtlinien für eine strengere Anforderungsüberprüfung verwenden und dabei die Verfügbarkeit der Workload-Planung reduzieren. Weitere Informationen finden Sie unter Topologie-Manager.

Sie können den Abschnitt nodeSelector bearbeiten, um die Konfiguration nur auf eine Untergruppe Ihrer Workerknoten anzuwenden.

  1. Führen Sie den folgenden Befehl aus, um die „ DaemonSet “ anzuwenden.
    kubectl replace --force -f customize.yaml
    
  2. Überprüfen Sie, dass die Pods in den Zustand Running eingetreten sind.
    kubectl get pods -n kube-system -l app=ibm-user-custom-configurator -o wide
    
  3. Nachdem die Pods ausgeführt werden, starten Sie jeden Workerknoten neu.
    1. Stellen Sie einen Debug-Pod auf Ihrem Worker-Knoten bereit.
        oc debug node/NODE_NAME
        ```
    1. Führen Sie nach dem Start der Debugsitzung den folgenden Befehl aus.
    ```sh {: pre}
        nsenter -t 1 -m -u -i -n -p -- reboot
        ```
    1. Wiederholen Sie diese Schritte für jeden Worker-Knoten, den Sie neu starten möchten.
    
    
    

CPU-Pinning und Huge Pages auf Ihren Workerknoten aktivieren

Satellite

Stellen Sie zunächst sicher, dass Sie den Node Feature Discovery Operator implementiert haben.

  1. Speichern Sie die folgende Datei DaemonSet in einer Datei namens cpu-pinning.yaml.

    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      name: ibm-user-custom-configurator-privileged
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: system:openshift:scc:privileged
    subjects:
      - kind: ServiceAccount
        name: ibm-user-custom-configurator
        namespace: kube-system
    ---
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: ibm-user-custom-configurator
      namespace: kube-system
    ---
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: ibm-user-custom-configurator
      namespace: kube-system
    data:
      89-hugepages.conf: |
        vm.nr_hugepages=<<NUMBER_OF_HUGEPAGES>>
      configure.sh: |
        #!/usr/bin/env bash
        set -x
        cp -f /scripts/ibm-user-custom-configuration.sh /host-usr-local-bin/ibm-user-custom-configuration.sh
        chmod 0755 /host-usr-local-bin/ibm-user-custom-configuration.sh
        cp -f /scripts/ibm-user-custom-configuration.service /host-etc-systemd-dir/ibm-user-custom-configuration.service
        chmod 0644 /host-etc-systemd-dir/ibm-user-custom-configuration.service
        if [[ -f /scripts/89-hugepages.conf ]]; then
          cp -f /scripts/89-hugepages.conf /host-etc-systctld-dir/89-hugepages.conf
        fi
        nsenter -t 1 -m -u -i -n -p -- systemctl daemon-reload
        nsenter -t 1 -m -u -i -n -p -- systemctl enable ibm-user-custom-configuration.service
        nsenter -t 1 -m -u -i -n -p -- systemctl start ibm-user-custom-configuration.service
      ibm-user-custom-configuration.sh: |
        #!/usr/bin/env bash
        set -x
        if cat /etc/kubernetes/kubelet.conf | jq -r .; then
          cat >/tmp/ibm-user-config.conf.json <<EOF
          {
            "cpuManagerPolicy": "static"
          }
        EOF
          if ! cat /tmp/ibm-user-config.conf.json | jq -r .; then
            exit 1
          fi
          if ! jq -s '.[0] * .[1]' /tmp/ibm-user-config.conf.json /etc/kubernetes/kubelet.conf > /etc/kubernetes/tmp-kubelet.conf; then
            exit 1
          fi
          mv -f /etc/kubernetes/tmp-kubelet.conf /etc/kubernetes/kubelet.conf
        else
          cat >/tmp/ibm-user-config.conf <<EOF
        #START USER CONFIG
        cpuManagerPolicy: static
        #END USER CONFIG
        EOF
          sed -i '/#START USER CONFIG/,/#END USER CONFIG/d' /etc/kubernetes/kubelet.conf
          cat /tmp/ibm-user-config.conf >>/etc/kubernetes/kubelet.conf
        fi
      ibm-user-custom-configuration.service: |
        [Unit]
        Description=Add custom user config to kubelet
        Before=kubelet.service
        After=kubelet-auto-node-size.service
        [Service]
        Type=oneshot
        RemainAfterExit=yes
        EnvironmentFile=/etc/node-sizing.env
        ExecStart=/usr/local/bin/ibm-user-custom-configuration.sh    
        [Install]
        WantedBy=multi-user.target
    ---
    apiVersion: apps/v1
    kind: DaemonSet
    metadata:
      labels:
        app: ibm-user-custom-configurator
      name: ibm-user-custom-configurator
      namespace: kube-system
    spec:
      selector:
        matchLabels:
          app: ibm-user-custom-configurator
      template:
        metadata:
          labels:
            app: ibm-user-custom-configurator
        spec:
          nodeSelector:
            ibm-cloud.kubernetes.io/os: RHCOS
          tolerations:
            - operator: "Exists"
          hostPID: true
          serviceAccount: ibm-user-custom-configurator
          initContainers:
            - name: configure
              image: "registry.access.redhat.com/ubi8/ubi:8.6"
              command: ['/bin/bash', '-c', 'mkdir /cache && cp /scripts/configure.sh /cache && chmod +x /cache/configure.sh && /bin/bash /cache/configure.sh']
              securityContext:
                privileged: true
              volumeMounts:
                - mountPath: /scripts
                  name: script-config
                - mountPath: /host-etc-systemd-dir
                  name: etc-systemd-dir
                - mountPath: /host-usr-local-bin
                  name: usr-local-bin
                - mountPath: /host-etc-systctld-dir
                  name: etc-systctld-dir
          containers:
            - name: pause
              image: us.icr.io/armada-master/pause:3.2
          volumes:
            - name: etc-systemd-dir
              hostPath:
                path: /etc/systemd/system
            - name: etc-systctld-dir
              hostPath:
                path: /etc/sysctl.d
            - name: usr-local-bin
              hostPath:
                path: /usr/local/bin
            - name: script-config
              configMap:
                name: ibm-user-custom-configurator
    
  2. Bearbeiten Sie die Werte für DaemonSet, um die Leistung zu optimieren.

NUMBER_OF_HUGEPAGES

Geben Sie die Anzahl der Huge Pages ein, die Sie zuordnen wollen. Beispiel: 2048. Wenn Sie Huge Pages nicht aktivieren möchten, geben Sie 0 ein. Je mehr Huge Pages Sie zuordnen, desto weniger Gesamtspeicher steht Ihren Anwendungen zur Verfügung.

Sie können den Abschnitt nodeSelector bearbeiten, um die Konfiguration nur auf eine Untergruppe Ihrer Workerknoten anzuwenden.

  1. Führen Sie den folgenden Befehl aus, um die „ DaemonSet “ anzuwenden.
    kubectl replace --force -f cpu-pinnning.yaml
    
  2. Überprüfen Sie, dass die Pods in den Zustand Running eingetreten sind.
    kubectl get pods -n kube-system -l app=ibm-user-custom-configurator -o wide
    
  3. Nachdem die Pods ausgeführt werden, starten Sie jeden Workerknoten neu.
    1. Stellen Sie einen Debug-Pod auf Ihrem Worker-Knoten bereit.
        oc debug node/NODE_NAME
        ```
    1. Führen Sie nach dem Start der Debugsitzung den folgenden Befehl aus.
    ```sh {: pre}
        nsenter -t 1 -m -u -i -n -p -- reboot
        ```
    1. Wiederholen Sie diese Schritte für jeden Worker-Knoten, den Sie neu starten möchten.
    
    

kernel-devel-Pakete aktivieren

Satellite

Möglicherweise müssen Sie kernel-devel-Pakete für die Verwendung von Satellite-Services oder -Speicher wie Spectrum Scale Fusion aktivieren.

Führen Sie die folgenden Schritte aus, um kernel-devel zu aktivieren, indem Sie eine angepasste Konfigurationszuordnung und eine Maschinenkonfiguration auf Ihre Workerknoten anwenden.

  1. Führen Sie den folgenden Befehl aus, um die „ MachineConfig “ anzuwenden.

    ibmcloud ks cluster config --cluster CLUSTERID
    cat >"/tmp/kernel-devel-payload.yaml" <<EOF
    apiVersion: v1
    kind: List
    metadata:
      name: pvg-machine-config-tester
      annotations:
    items:
      - apiVersion: v1
        kind: Namespace
        metadata:
          name: ibm-machine-config
      - apiVersion: v1
        data:
          config: |+
            apiVersion: machineconfiguration.openshift.io/v1
            kind: MachineConfig
            metadata:
              name: 97-kerneldevel
              labels:
                machineconfiguration.openshift.io/role: worker
            spec:
              config:
                ignition:
                  version: 3.2.0
              extensions:
              - kernel-devel
        kind: ConfigMap
        metadata:
          labels:
            ibm-cloud.kubernetes.io/user-specified-config: "true"
          name: user-ignition-config-97-kerneldevel
          namespace: ibm-machine-config
    EOF
    kubectl apply -f /tmp/kernel-devel-payload.yaml
    
  2. Warten Sie, bis die Ressourcen bereitgestellt sind. Dies kann 5 Minuten oder länger dauern.

  3. Überprüfen Sie die Details der Konfigurationszuordnung, um sicherzustellen, dass die Implementierung erfolgreich war.

    1. Vergewissern Sie sich, dass das Feld config-validation="valid" vorhanden ist.
        kubectl get cm -n ibm-machine-config user-ignition-config-97-kerneldevel -o yaml | grep config-validation
        ```
    1. Stellen Sie sicher, dass `user-ignition-config-97-kerneldevel` in der Konfigurationsübersicht vorhanden ist.
    ```sh {: pre}
        kubectl get cm -n ibm-machine-config -l ibm-cloud.kubernetes.io/nodepoolfeedback="true" -o yaml | grep user-ignition-config-97-kerneldevel
        ```
    
  4. Fügen Sie Ihrem Cluster Worker-Knoten hinzu. Für Workerknoten, die Sie hinzufügen, ist kernel-devel aktiviert.

  5. Stellen Sie sicher, dass „ kernel-devel “ aktiviert ist.

    1. Starten Sie einen Debug-Pod auf einem Ihrer Knoten.
        oc debug node/NODEIP
        ```
    1. Führen Sie den folgenden Befehl „ `nsenter` “ aus.
    ```sh {: pre}
        nsenter -t 1 -m -u -i -n -p -- rpm -qa | grep kernel-devel
        ```
    
  6. Optional: Wenn Sie kernel-devel nicht mehr benötigen, können Sie es entfernen, indem Sie den folgenden Befehl ausführen:

    kubectl delete cm -n ibm-machine-config user-ignition-config-97-kerneldevel
    

Leistungsanpassungen entfernen

Satellite

Wenn Sie Anpassungen von Ihren Workerknoten entfernen und auf die Standardkonfigurationen zurücksetzen wollen, wenden Sie die folgende DaemonSet an.

  1. Speichern Sie die folgende Datei DaemonSet in einer Datei namens remove-custom.yaml.

    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      name: ibm-user-custom-configurator-privileged
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: system:openshift:scc:privileged
    subjects:
      - kind: ServiceAccount
        name: ibm-user-custom-configurator
        namespace: kube-system
    ---
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: ibm-user-custom-configurator
      namespace: kube-system
    ---
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: ibm-user-custom-configurator
      namespace: kube-system
    data:
      89-hugepages.conf: |
        vm.nr_hugepages=0
      configure.sh: |
        #!/usr/bin/env bash
        set -x
        cp -f /scripts/ibm-user-custom-configuration.sh /host-usr-local-bin/ibm-user-custom-configuration.sh
        chmod 0755 /host-usr-local-bin/ibm-user-custom-configuration.sh
        cp -f /scripts/ibm-user-custom-configuration.service /host-etc-systemd-dir/ibm-user-custom-configuration.service
        chmod 0644 /host-etc-systemd-dir/ibm-user-custom-configuration.service
        if [[ -f /scripts/89-hugepages.conf ]]; then
          cp -f /scripts/89-hugepages.conf /host-etc-systctld-dir/89-hugepages.conf
        fi
        nsenter -t 1 -m -u -i -n -p -- systemctl daemon-reload
        nsenter -t 1 -m -u -i -n -p -- systemctl enable ibm-user-custom-configuration.service
        nsenter -t 1 -m -u -i -n -p -- systemctl start ibm-user-custom-configuration.service
      ibm-user-custom-configuration.sh: |
        #!/usr/bin/env bash
        set -x
        if cat /etc/kubernetes/kubelet.conf | jq -r .; then
          if ! jq 'del(.topologyManagerPolicy, .memoryManagerPolicy, .cpuManagerPolicy, .reservedMemory)' /etc/kubernetes/kubelet.conf > /etc/kubernetes/tmp-kubelet.conf; then
            exit 1
          fi
          mv -f /etc/kubernetes/tmp-kubelet.conf /etc/kubernetes/kubelet.conf
        else
          sed -i '/#START USER CONFIG/,/#END USER CONFIG/d' /etc/kubernetes/kubelet.conf
        fi
      ibm-user-custom-configuration.service: |
        [Unit]
        Description=Add custom user config to kubelet
        Before=kubelet.service
        After=kubelet-auto-node-size.service
        [Service]
        Type=oneshot
        RemainAfterExit=yes
        EnvironmentFile=/etc/node-sizing.env
        ExecStart=/usr/local/bin/ibm-user-custom-configuration.sh
        [Install]
        WantedBy=multi-user.target
    ---
    apiVersion: apps/v1
    kind: DaemonSet
    metadata:
      labels:
        app: ibm-user-custom-configurator
      name: ibm-user-custom-configurator
      namespace: kube-system
    spec:
      selector:
        matchLabels:
          app: ibm-user-custom-configurator
      template:
        metadata:
          labels:
            app: ibm-user-custom-configurator
        spec:
          nodeSelector:
            ibm-cloud.kubernetes.io/os: RHCOS
          tolerations:
            - operator: "Exists"
          hostPID: true
          serviceAccount: ibm-user-custom-configurator
          initContainers:
            - name: configure
              image: "registry.access.redhat.com/ubi8/ubi:8.6"
              command: ['/bin/bash', '-c', 'mkdir /cache && cp /scripts/configure.sh /cache && chmod +x /cache/configure.sh && /bin/bash /cache/configure.sh']
              securityContext:
                privileged: true
              volumeMounts:
                - mountPath: /scripts
                  name: script-config
                - mountPath: /host-etc-systemd-dir
                  name: etc-systemd-dir
                - mountPath: /host-usr-local-bin
                  name: usr-local-bin
                - mountPath: /host-etc-systctld-dir
                  name: etc-systctld-dir
          containers:
            - name: pause
              image: us.icr.io/armada-master/pause:3.2
          volumes:
            - name: etc-systemd-dir
              hostPath:
                path: /etc/systemd/system
            - name: etc-systctld-dir
              hostPath:
                path: /etc/sysctl.d
            - name: usr-local-bin
              hostPath:
                path: /usr/local/bin
            - name: script-config
              configMap:
                name: ibm-user-custom-configurator
    
  2. Wenden Sie die „ DaemonSet “ auf Ihren Cluster an, indem Sie den folgenden Befehl ausführen.

    kubectl replace --force -f remove-custom.yaml
    
  3. Überprüfen Sie, ob die Pods in den Status Running eingetreten sind.

    kubectl get pods -n kube-system -l app=ibm-user-custom-configurator -o wide
    
  4. Nachdem die Pods ausgeführt werden, starten Sie jeden Workerknoten neu.

    1. Stellen Sie einen Debug-Pod auf Ihrem Worker-Knoten bereit.
        oc debug node/NODE_NAME
        ```
    1. Führen Sie nach dem Start der Debugsitzung den folgenden Befehl aus.
    ```sh {: pre}
        nsenter -t 1 -m -u -i -n -p -- reboot
        ```
    1. Wiederholen Sie diese Schritte für jeden Worker-Knoten, den Sie neu starten möchten.