NSX-OVS カーネル モジュールとアップストリーム OVS カーネル モジュールの切り替え
NSX-OVS は最新のカーネル バージョンではサポートされていないため、カーネルを最新バージョンにアップグレードする前に、NSX-OVS カーネル モジュールをアップストリーム OVS カーネル モジュールに切り替えることができます。カーネルのアップグレード後に NCP が最新のカーネルで動作しない場合は、ロールバック(NSX-OVS に切り替えてカーネルをダウングレード)を実行できます。
次の最初の手順では、カーネルをアップグレードするときに NSX-OVS カーネル モジュールをアップストリーム OVS カーネル モジュールに切り替える方法について説明します。2 番目の手順では、カーネルをダウングレードするときに 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に変更します。
- worker-node1 に "evict-user-pods:NoExecute" のTaintを付与し、このノードのすべてのユーザー ポッドを他のノードに退避させます。kubectl taint nodes worker-node1 evict-user-pods:NoExecute
- worker-node1 に "evict-ncp-pods:NoExecute" のTaintを付与し、このノードの 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を削除します。
- /lib/modules/$(uname -r)/nsx/usr-ovs-kmod-backupディレクトリにvport-geneve.ko、vport-gre.ko、vport-lisp.ko、vport-stt.ko、vport-vxlan.ko、openvswitch.koファイルがある場合は、それらを/lib/modules/$(uname -r)/weak-updates/openvswitchディレクトリに移動します。
- /lib/modules/$(uname -r)/nsxディレクトリを削除します。
- worker-node1 のカーネルを最新バージョンにアップグレードし、再起動します。注:containerd と kubelet を実行できない場合は、worker-node1 で SELinux を Permissive モードに設定します。
- kubelet を再起動します。
- worker-node1 から "evict-ncp-pods:NoExecute" のtaintを削除します。bootstrap と node-agent が起動できることを確認します。
- worker-node1 から "evict-user-pods:NoExecute" のtaintを削除します。このノードのすべてのポッドが実行されていることを確認します。
- 他のノードに対して手順 3 ~ 9 を繰り返します。
- 手順 1 で nsx-ncp-bootstrap と nsx-node-agent DaemonSet の両方の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に変更します。
- worker-node1 に "evict-user-pods:NoExecute" のTaintを付与し、このノードのすべてのユーザー ポッドを他のノードに退避させます。kubectl taint nodes worker-node1 evict-user-pods:NoExecute
- worker-node1 に "evict-ncp-pods:NoExecute" のTaintを付与し、このノードの nsx-node-agent および nsx-ncp-bootstrap ポッドを他のノードに退避させます。kubectl taint nodes worker-node1 evict-ncp-pods:NoExecute
- worker-node1 のカーネルをサポートされているバージョンにダウングレードし、再起動します。注:containerd と kubelet を実行できない場合は、worker-node1 で SELinux を Permissive モードに設定します。
- kubelet を再起動します。
- worker-node1 から "evict-ncp-pods:NoExecute" のtaintを削除します。bootstrap と node-agent が起動できることを確認します。
- worker-node1 から "evict-user-pods:NoExecute" のtaintを削除します。このノードのすべてのポッドが実行されていることを確認します。
- 他のノードに対して手順 3 ~ 8 を繰り返します。
- 手順 1 で nsx-ncp-bootstrap と nsx-node-agent DaemonSet の両方のtolerationsをリカバリします。