由於最新核心版本不支援 NSX-OVS,因此在將核心升級至最新版本前,您可以將 NSX-OVS 核心模組切換至上游 OVS 核心模組。如果在核心升級後,NCP 無法與最新的核心搭配使用,則可以執行復原 (切換回 NSX-OVS 並對核心進行降級)。
以下第一個程序會說明在升級核心後,如何將 NSX-OVS 核心模組切換至上游 OVS 核心模組。第二個程序會說明對核心進行降級後,如何切換回 NSX-OVS 核心模組。
兩個程序都涉及 Kubernetes 概念 taints 和 tolerations。如需有關這些概念的詳細資訊,請參閱https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration。
切換至上游 OVS 核心模組
- 修改 daemonset.apps/nsx-ncp-bootstrap 和 daemonset.apps/nsx-node-agent 的 tolerations。將下列項目:
- effect: NoExecute operator: Exists
變更為:- effect: NoExecute key: evict-user-pods
- 修改 nsx-node-agent configmap。將 use_nsx_ovs_kernel_module 變更為
False
。 - 執行 Taint worker-node1 "evict-user-pods:NoExecute",以將此節點中的所有使用者網繭收回至其他節點:
kubectl taint nodes worker-node1 evict-user-pods:NoExecute
- 執行 Taint worker-node1 "evict-ncp-pods:NoExecute",以將此節點中的 nsx-node-agent 和 nsx-ncp-bootstrap 網繭收回至其他節點:
kubectl taint nodes worker-node1 evict-ncp-pods:NoExecute
- 解除安裝 ovs-kernel 模組,並在 worker-node1 上還原上游 OVS 核心模組。
- 在 /lib/modules/$(uname -r)/weak-updates/openvswitch 目錄中,刪除 kmod 檔案 vport-geneve.ko、vport-gre.ko、vport-lisp.ko、vport-stt.ko、vport-vxlan.ko 和 openvswitch.ko。
- 如果 vport-geneve.ko、vport-gre.ko、vport-lisp.ko、vport-stt.ko、vport-vxlan.ko 和 openvswitch.ko 檔案存在於目錄 /lib/modules/$(uname -r)/nsx/usr-ovs-kmod-backup,請將其移至目錄 /lib/modules/$(uname -r)/weak-updates/openvswitch。
- 刪除目錄 /lib/modules/$(uname -r)/nsx。
- 將 worker-node1 的核心升級至最新版本,並將其重新開機。
注意:如果 containerd 和 kubelet 無法執行,請在 worker-node1 上將 SELinux 設定為容許模式。
- 重新啟動 kubelet。
- 從 worker-node1 中移除 taint "evict-ncp-pods:NoExecute"。確認執行啟動程序和節點代理程式都可以啟動。
- 從 worker-node1 中移除 taint "evict-user-pods:NoExecute"。確認此節點中的所有網繭都正在執行。
- 對其他節點重複步驟 3-9。
- 復原步驟 1 中 nsx-ncp-bootstrap 和 nsx-node-agent DaemonSets 的 tolerations。
切換回 NSX-OVS 核心模組
- 修改 daemonset.apps/nsx-ncp-bootstrap 和 daemonset.apps/nsx-node-agent 的 tolerations。將下列項目:
- effect: NoExecute operator: Exists
變更為:- effect: NoExecute key: evict-user-pods
- 修改 nsx-node-agent configmap。將 use_nsx_ovs_kernel_module 變更為
True
。 - 執行 Taint worker-node1 "evict-user-pods:NoExecute",以將此節點中的所有使用者網繭收回至其他節點:
kubectl taint nodes worker-node1 evict-user-pods:NoExecute
- 執行 Taint worker-node1 "evict-ncp-pods:NoExecute",以將此節點中的 nsx-node-agent 和 nsx-ncp-bootstrap 網繭收回至其他節點:
kubectl taint nodes worker-node1 evict-ncp-pods:NoExecute
- 將 worker-node1 的核心降級至支援的版本,並將其重新開機。
注意:如果 containerd 和 kubelet 無法執行,請在 worker-node1 上將 SELinux 設定為容許模式。
- 重新啟動 kubelet。
- 從 worker-node1 中移除 taint "evict-ncp-pods:NoExecute"。確認執行啟動程序和節點代理程式都可以啟動。
- 從 worker-node1 中移除 taint "evict-user-pods:NoExecute"。確認此節點中的所有網繭都正在執行。
- 對其他節點重複步驟 3-8。
- 復原步驟 1 中 nsx-ncp-bootstrap 和 nsx-node-agent DaemonSets 的 tolerations。