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 をリカバリします。