由於最新核心版本不支援 NSX-OVS,因此在將核心升級至最新版本前,您可以將 NSX-OVS 核心模組切換至上游 OVS 核心模組。如果在核心升級後,NCP 無法與最新的核心搭配使用,則可以執行復原 (切換回 NSX-OVS 並對核心進行降級)。

以下第一個程序會說明在升級核心後,如何將 NSX-OVS 核心模組切換至上游 OVS 核心模組。第二個程序會說明對核心進行降級後,如何切換回 NSX-OVS 核心模組。

兩個程序都涉及 Kubernetes 概念 taintstolerations。如需有關這些概念的詳細資訊,請參閱https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration

切換至上游 OVS 核心模組

  1. 修改 daemonset.apps/nsx-ncp-bootstrapdaemonset.apps/nsx-node-agenttolerations。將下列項目:
          - effect: NoExecute
            operator: Exists
    變更為:
          - effect: NoExecute
            key: evict-user-pods
  2. 修改 nsx-node-agent configmap。將 use_nsx_ovs_kernel_module 變更為 False
  3. 執行 Taint worker-node1 "evict-user-pods:NoExecute",以將此節點中的所有使用者網繭收回至其他節點:
    kubectl taint nodes worker-node1 evict-user-pods:NoExecute
  4. 執行 Taint worker-node1 "evict-ncp-pods:NoExecute",以將此節點中的 nsx-node-agent 和 nsx-ncp-bootstrap 網繭收回至其他節點:
    kubectl taint nodes worker-node1 evict-ncp-pods:NoExecute
  5. 解除安裝 ovs-kernel 模組,並在 worker-node1 上還原上游 OVS 核心模組。
    1. /lib/modules/$(uname -r)/weak-updates/openvswitch 目錄中,刪除 kmod 檔案 vport-geneve.kovport-gre.kovport-lisp.kovport-stt.kovport-vxlan.koopenvswitch.ko
    2. 如果 vport-geneve.kovport-gre.kovport-lisp.kovport-stt.kovport-vxlan.koopenvswitch.ko 檔案存在於目錄 /lib/modules/$(uname -r)/nsx/usr-ovs-kmod-backup,請將其移至目錄 /lib/modules/$(uname -r)/weak-updates/openvswitch
    3. 刪除目錄 /lib/modules/$(uname -r)/nsx
  6. 將 worker-node1 的核心升級至最新版本,並將其重新開機。

    注意:如果 containerd 和 kubelet 無法執行,請在 worker-node1 上將 SELinux 設定為容許模式。

  7. 重新啟動 kubelet。
  8. 從 worker-node1 中移除 taint "evict-ncp-pods:NoExecute"。確認執行啟動程序和節點代理程式都可以啟動。
  9. 從 worker-node1 中移除 taint "evict-user-pods:NoExecute"。確認此節點中的所有網繭都正在執行。
  10. 對其他節點重複步驟 3-9。
  11. 復原步驟 1 中 nsx-ncp-bootstrap 和 nsx-node-agent DaemonSets 的 tolerations

切換回 NSX-OVS 核心模組

  1. 修改 daemonset.apps/nsx-ncp-bootstrapdaemonset.apps/nsx-node-agenttolerations。將下列項目:
          - effect: NoExecute
            operator: Exists
    變更為:
          - effect: NoExecute
            key: evict-user-pods
  2. 修改 nsx-node-agent configmap。將 use_nsx_ovs_kernel_module 變更為 True
  3. 執行 Taint worker-node1 "evict-user-pods:NoExecute",以將此節點中的所有使用者網繭收回至其他節點:
    kubectl taint nodes worker-node1 evict-user-pods:NoExecute
  4. 執行 Taint worker-node1 "evict-ncp-pods:NoExecute",以將此節點中的 nsx-node-agent 和 nsx-ncp-bootstrap 網繭收回至其他節點:
    kubectl taint nodes worker-node1 evict-ncp-pods:NoExecute
  5. 將 worker-node1 的核心降級至支援的版本,並將其重新開機。

    注意:如果 containerd 和 kubelet 無法執行,請在 worker-node1 上將 SELinux 設定為容許模式。

  6. 重新啟動 kubelet。
  7. 從 worker-node1 中移除 taint "evict-ncp-pods:NoExecute"。確認執行啟動程序和節點代理程式都可以啟動。
  8. 從 worker-node1 中移除 taint "evict-user-pods:NoExecute"。確認此節點中的所有網繭都正在執行。
  9. 對其他節點重複步驟 3-8。
  10. 復原步驟 1 中 nsx-ncp-bootstrap 和 nsx-node-agent DaemonSets 的 tolerations