Wechseln zwischen NSX-OVS- und Upstream-OVS-Kernelmodulen

Da NSX-OVS in der neuesten Kernelversion nicht unterstützt wird, können Sie das NSX-OVS-Kernelmodul auf das Upstream-OVS-Kernelmodul umstellen, bevor Sie den Kernel auf die neueste Version aktualisieren. Wenn NCP nach einem Kernel-Upgrade nicht mit dem neuesten Kernel funktioniert, können Sie ein Rollback durchführen (zurück zu NSX-OVS und Downgrade des Kernels).
Im ersten Verfahren unten wird beschrieben, wie Sie das NSX-OVS-Kernelmodul auf das Upstream-OVS-Kernelmodul umstellen, wenn Sie den Kernel aktualisieren. Das zweite Verfahren beschreibt, wie Sie beim Downgrade des Kernels wieder zum NSX-OVS-Kernelmodul wechseln.
Diese Verfahren umfassen die Kubernetes-Konzepte
taints
und
tolerations
. Weitere Informationen zu diesen Konzepten finden Sie unter https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration.

Zum Upstream-OVS-Kernelmodul wechseln

  1. Ändern Sie die
    tolerations
    von
    daemonset.apps/nsx-ncp-bootstrap
    und
    daemonset.apps/nsx-node-agent
    . Ändern Sie Folgendes:
    - effect: NoExecute operator: Exists
    bis:
    - effect: NoExecute key: evict-user-pods
  2. Ändern Sie die nsx-node-agent-Configmap.
    use_nsx_ovs_kernel_module
    in
    False
    ändern.
  3. Taint
    worker-node1 „evict-user-pods:NoExecute“, um alle Benutzer-Pods auf diesem Knoten auf andere Knoten zu verlagern:
    kubectl taint nodes worker-node1 evict-user-pods:NoExecute
  4. Taint
    worker-node1 „evict-ncp-pods:NoExecute“, um „nsx-node-agent“ und „nsx-ncp-bootstrap“-Pods auf diesem Knoten auf andere Knoten zu verlagern:
    kubectl taint nodes worker-node1 evict-ncp-pods:NoExecute
  5. Deinstallieren Sie das „ovs-kernel“-Modul und stellen Sie das Upstream-OVS-Kernelmodul auf „worker-node1“ wieder her.
    1. Löschen Sie die kmod-Dateien
      vport-geneve.ko
      ,
      vport-gre.ko
      ,
      vport-lisp.ko
      ,
      vport-stt.ko
      ,
      vport-vxlan.ko
      ,
      openvswitch.ko
      im Verzeichnis
      /lib/modules/$(uname -r)/weak-updates/openvswitch
      .
    2. Wenn sich die Dateien
      vport-geneve.ko
      ,
      vport-gre.ko
      ,
      vport-lisp.ko
      ,
      vport-stt.ko
      ,
      vport-vxlan.ko
      ,
      openvswitch.ko
      im Verzeichnis
      /lib/modules/$(uname -r)/nsx/usr-ovs-kmod-backup
      befinden, verschieben Sie sie in das Verzeichnis
      /lib/modules/$(uname -r)/weak-updates/openvswitch
      .
    3. Löschen Sie das Verzeichnis
      /lib/modules/$(uname -r)/nsx
      .
  6. Aktualisieren Sie den Kernel von „worker-node1“ auf die neueste Version und starten Sie ihn neu.
    Hinweis: Legen Sie für SELinux den Modus „Permissive“ auf „worker-node1“ fest, wenn „containerd“ und „kubelet“ nicht ausgeführt werden können.
  7. Starten Sie „kubelet“ neu.
  8. Entfernen Sie
    taint
    „evict-ncp-pods:NoExecute“ aus Work-node1. Stellen Sie sicher, dass Bootstrap und „node-agent“ gestartet werden können.
  9. Entfernen Sie
    taint
    „evict-user-pods:NoExecute“ aus Work-node1. Stellen Sie sicher, dass alle Pods in diesem Knoten ausgeführt werden.
  10. Wiederholen Sie die Schritte 3 bis 9 für andere Knoten.
  11. Stellen Sie
    tolerations
    der DaemonSets „nsx-ncp-bootstrap“ und „nsx-node-agent“ in Schritt 1 wieder her.

Zum NSX-OVS-Kernelmodul zurückwechseln

  1. Ändern Sie die
    tolerations
    von
    daemonset.apps/nsx-ncp-bootstrap
    und
    daemonset.apps/nsx-node-agent
    . Ändern Sie Folgendes:
    - effect: NoExecute operator: Exists
    bis:
    - effect: NoExecute key: evict-user-pods
  2. Ändern Sie die nsx-node-agent-Configmap.
    use_nsx_ovs_kernel_module
    in
    True
    ändern.
  3. Taint
    worker-node1 „evict-user-pods:NoExecute“, um alle Benutzer-Pods auf diesem Knoten auf andere Knoten zu verlagern:
    kubectl taint nodes worker-node1 evict-user-pods:NoExecute
  4. Taint
    worker-node1 „evict-ncp-pods:NoExecute“, um „nsx-node-agent“ und „nsx-ncp-bootstrap“-Pods auf diesem Knoten auf andere Knoten zu verlagern:
    kubectl taint nodes worker-node1 evict-ncp-pods:NoExecute
  5. Stufen Sie den Kernel von „worker-node1“ auf eine unterstützte Version herunter und starten Sie ihn neu.
    Hinweis: Legen Sie für SELinux den Modus „Permissive“ auf „worker-node1“ fest, wenn „containerd“ und „kubelet“ nicht ausgeführt werden können.
  6. Starten Sie „kubelet“ neu.
  7. Entfernen Sie
    taint
    „evict-ncp-pods:NoExecute“ aus Work-node1. Stellen Sie sicher, dass Bootstrap und „node-agent“ gestartet werden können.
  8. Entfernen Sie
    taint
    „evict-user-pods:NoExecute“ aus Work-node1. Stellen Sie sicher, dass alle Pods in diesem Knoten ausgeführt werden.
  9. Wiederholen Sie die Schritte 3 bis 8 für andere Knoten.
  10. Stellen Sie
    tolerations
    der DaemonSets „nsx-ncp-bootstrap“ und „nsx-node-agent“ in Schritt 1 wieder her.