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 커널 모듈로 전환

  1. daemonset.apps/nsx-ncp-bootstrap
    daemonset.apps/nsx-node-agent
    둘 다에서
    tolerations
    를 수정합니다. 다음을
    - effect: NoExecute operator: Exists
    다음으로 변경하십시오.
    - effect: NoExecute key: evict-user-pods
  2. nsx-node-agent configmap을 수정합니다.
    use_nsx_ovs_kernel_module
    False
    로 변경합니다.
  3. Taint
    worker-node1 "evict-user-pods:NoExecute"를 실행하여 이 노드의 모든 사용자 포드를 다른 노드로 내보냅니다.
    kubectl taint nodes worker-node1 evict-user-pods:NoExecute
  4. Taint
    worker-node1 "evict-ncp-pods:NoExecute"를 실행하여 이 노드의 nsx-node-agent 및 nsx-ncp-bootstrap 포드를 다른 노드로 내보냅니다.
    kubectl taint nodes worker-node1 evict-ncp-pods:NoExecute
  5. ovs-kernel 모듈을 제거하고 worker-node1에서 업스트림 OVS 커널 모듈을 복원합니다.
    1. /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
      를 삭제합니다.
    2. 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
      디렉토리로 이동합니다.
    3. /lib/modules/$(uname -r)/nsx
      디렉토리를 삭제합니다.
  6. worker-node1의 커널을 최신 버전으로 업그레이드하고 재부팅합니다.
    참고: containerd 및 kubelet을 실행할 수 없는 경우 worker-node1에서 SELinux를 허용 모드로 설정합니다.
  7. kubelet을 다시 시작합니다.
  8. worker-node1에서
    taint
    "evict-ncp-pods:NoExecute"를 제거합니다. 부트스트랩과 node-agent를 시작할 수 있는지 확인합니다.
  9. worker-node1에서
    taint
    "evict-user-pods:NoExecute"를 제거합니다. 이 노드의 모든 포드가 실행 중인지 확인합니다.
  10. 다른 노드에 대해 3-9단계를 반복합니다.
  11. 1단계에서 nsx-ncp-bootstrap 및 nsx-node-agent DaemonSets의
    tolerations
    를 복구합니다.

NSX-OVS 커널 모듈로 다시 전환

  1. daemonset.apps/nsx-ncp-bootstrap
    daemonset.apps/nsx-node-agent
    둘 다에서
    tolerations
    를 수정합니다. 다음을
    - effect: NoExecute operator: Exists
    다음으로 변경하십시오.
    - effect: NoExecute key: evict-user-pods
  2. nsx-node-agent configmap을 수정합니다.
    use_nsx_ovs_kernel_module
    True
    로 변경합니다.
  3. Taint
    worker-node1 "evict-user-pods:NoExecute"를 실행하여 이 노드의 모든 사용자 포드를 다른 노드로 내보냅니다.
    kubectl taint nodes worker-node1 evict-user-pods:NoExecute
  4. Taint
    worker-node1 "evict-ncp-pods:NoExecute"를 실행하여 이 노드의 nsx-node-agent 및 nsx-ncp-bootstrap 포드를 다른 노드로 내보냅니다.
    kubectl taint nodes worker-node1 evict-ncp-pods:NoExecute
  5. worker-node1의 커널을 지원되는 버전으로 다운그레이드하고 재부팅합니다.
    참고: containerd 및 kubelet을 실행할 수 없는 경우 worker-node1에서 SELinux를 허용 모드로 설정합니다.
  6. kubelet을 다시 시작합니다.
  7. worker-node1에서
    taint
    "evict-ncp-pods:NoExecute"를 제거합니다. 부트스트랩과 node-agent를 시작할 수 있는지 확인합니다.
  8. worker-node1에서
    taint
    "evict-user-pods:NoExecute"를 제거합니다. 이 노드의 모든 포드가 실행 중인지 확인합니다.
  9. 다른 노드에 대해 3-8단계를 반복합니다.
  10. 1단계에서 nsx-ncp-bootstrap 및 nsx-node-agent DaemonSets의
    tolerations
    를 복구합니다.