NSX-OVS 및 업스트림 OVS 커널 모듈 간 전환
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로 변경합니다.
- Taintworker-node1 "evict-user-pods:NoExecute"를 실행하여 이 노드의 모든 사용자 포드를 다른 노드로 내보냅니다.kubectl taint nodes worker-node1 evict-user-pods:NoExecute
- Taintworker-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-logop.ko,vport-stt.ko,vport-vxlan.ko가 있는 경우/lib/modules/$(uname -r)/nsx/usr-ovs-kmod-backup디렉토리에서openvswitch.ko파일을/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"를 제거합니다. 부트스트랩과 node-agent를 시작할 수 있는지 확인합니다.
- 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로 변경합니다.
- Taintworker-node1 "evict-user-pods:NoExecute"를 실행하여 이 노드의 모든 사용자 포드를 다른 노드로 내보냅니다.kubectl taint nodes worker-node1 evict-user-pods:NoExecute
- Taintworker-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"를 제거합니다. 부트스트랩과 node-agent를 시작할 수 있는지 확인합니다.
- worker-node1에서taint"evict-user-pods:NoExecute"를 제거합니다. 이 노드의 모든 포드가 실행 중인지 확인합니다.
- 다른 노드에 대해 3-8단계를 반복합니다.
- 1단계에서 nsx-ncp-bootstrap 및 nsx-node-agent DaemonSets의tolerations를 복구합니다.