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-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
로 변경합니다. - 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"를 제거합니다. 부트스트랩과 node-agent를 시작할 수 있는지 확인합니다.
- worker-node1에서 taint "evict-user-pods:NoExecute"를 제거합니다. 이 노드의 모든 포드가 실행 중인지 확인합니다.
- 다른 노드에 대해 3-8단계를 반복합니다.
- 1단계에서 nsx-ncp-bootstrap 및 nsx-node-agent DaemonSets의 tolerations를 복구합니다.