본문으로 건너뛰기
  1. Ocp/

OVN-kubernetes network migration

·
Kubernetes Openshift
목차

Overview
#

오랜만에 작성하는 openshift관련 포스팅입니다.
최근 관리하는 클러스터(4.15)를 4.16으로 업그레이드 할 일이 생겨서 작업 중 아래와 같은 에러를 만났습니다.

Cluster operator network should not be upgraded between minor versions: OpenShiftSDNConfigured: Cluster is configured with OpenShiftSDN, which is not supported in the next version. Please follow the documented steps to migrate from OpenShiftSDN to OVN-Kubernetes in order to be able to upgrade.

하여튼한번에잘되는법이없음

무슨일인고 하니 바로 4.14버전부터 OpenshiftSDN이 deprecated되어 4.16부터는 사용불가가 되어버린것…
따라서 Openshift 네트워크 세팅을 OVN-Kubernetes로 마이그레이션 해줘야 업그레이드가 가능합니다.

이번 포스팅에서는 마이그레이션 방법과, 대체 이녀석들이 뭐하는 녀석들인지 간단히 알아보도록 하겠습니다.

OpenshiftSDN vs OVN-Kubernetes
#

OpenshiftSDN

  • Software-Defined networking(SDN)방식을 사용하여 OpenShift 컨테이너 플랫폼 클러스터에서 파드 간 통신을 가능하게 하는, 통합 클러스터 네트워크를 제공하는 CNI plugin
  • OpenVSwitch(OVS)기반의 오버레이 네트워크를 구성
  • ocp 4.14부터 deprecated되고 4.15 부터는 설치옵션에서 지원하지 않음

SDN : 네트워크 트래픽을 기존의 네트워크 장치가 아닌 별도의 소프트웨어에 의해 제어되는 네트워크
OVS : 오픈소스 가상 스위치로, 물리 스위치와 연결되어 가상 네트워크의 스위칭 스택 및 네트워크 프로토콜을 제공

OVN-Kubernetes Network

  • OVN기반의 CNI plugin
  • OVN(Open Virtual Network)
    • OVS는 하나의 스위치로서의 기능들을 제공하고있고 전체 네트워크 환경을 구성하려면 SDN protocol을 통해 관리해야함
    • 기존 OVS의 기능을 보완, 가상 네트워크 추상화를 제공(논리 스위치, router, security group, L2/L3/L4 ACL 등)
    • OVN이 OVS의 상위개념은 아니고 OVS의 데몬처럼 동작하게 된다
    • OVS와 같은 커뮤니티에서 개발되는 오픈소스
  • kubernetes network policy지원
  • VXLAN기반의 OpenshiftSDN과 다르게 Geneve(Generic Network Virtualization Encapsulation)프로토콜을 사용

둘 다 이름과 기능만 약간 다르다뿐이지 OVS기반으로 가상 네트워크의 추상화를 제공하는 SDN솔루션입니다.

그럼 왜 RedHat에선 OpenshiftSDN대신 OVN-Kubernetes를 default SDN으로 선정한 것일까요?

reference : OpenShiftSDN CNI removal in OCP 4.17

Why has Red Hat chosen to remove the openshift-sdn CNI?
Since the release of OpenShift 4.1, all new SDN feature development has been focused on the ovn-kubernetes CNI plug-in, while the openshift-sdn CNI plug-in has been feature frozen. The focus on ovn-kubernetes development has resulted in a long and growing list of features and advantages of ovn-kubernetes over its predecessor, openshift-sdn

대충 요약하면 OVN-Kubernetes에 더 집중하겠다는 뜻입니다.

(뇌피셜) Openshift4 초기부터 ovn-kubernetes를 지원하고 있었지만 default network setting으로 쓰지 않았던 이유는 오픈소스였던 ovn이 충분히 성숙하지 않았을 수도 있고,
근데 지금은 ovn이 충분히 안정적이 되니 굳이 개발 인력을 openshift sdn으로 돌리지 않았을 수도 있고,
오픈소스인 ovn을 씀으로써 벤더락인을 줄이기 위해서일수도? 있지 않을까 생각해봅미다…

두 CNI plugin의 기능 비교표입니다.
OVN-Kubernetes가 IPv6, IPsec, 데이터 처리 오프로딩 등 더 많은 기능을 지원하고 있습니다.

참고 : About the OVN-Kubernetes network plugin

OpenshiftSDN to OVN-Kubernetes
#

그럼 이제 OVN-Kubernetes로 마이그레이션 하는 방법에 대해서 알아보겠습니다.

본문에서는 가장 기본적인 마이그레이션 방법에 대해서만 서술하오니, 주의사항과 더 자세한 설명은 아래 공식문서 링크를 참고해주시기 바랍니다.

Migrating from the OpenShift SDN network plugin

1.네트워크 기존 설정 백업

$ oc get Network.config.openshift.io cluster -o yaml > cluster-openshift-sdn.yaml

apiVersion: config.openshift.io/v1
kind: Network
metadata:
    creationTimestamp: "2023-09-22T05:37:59Z"
    generation: 2
    name: cluster
    resourceVersion: "10880"
    uid: 02803a48-aefe-4bfd-bd72-9190bbe9a98a
spec:
    clusterNetwork:
    - cidr: 10.254.0.0/16
    hostPrefix: 24
    externalIP:
    policy: {}
    networkType: OpenShiftSDN
    serviceNetwork:
    - 172.30.0.0/16
status:
    clusterNetwork:
    - cidr: 10.254.0.0/16
    hostPrefix: 24
    clusterNetworkMTU: 1450
    networkType: OpenShiftSDN
    serviceNetwork:
- 172.30.0.0/16

2.Network.operator.openshift.io CR의 migration필드를 OVNKubernetes로 변경

$ oc patch Network.operator.openshift.io cluster --type='merge' --patch '{ "spec": { "migration": { "networkType": "OVNKubernetes" } } }'
network.operator.openshift.io/cluster patched

3.노드들이 재시작 될 때까지 대기

4.아래 명령어로 configuration이 적용되었는지 확인

$ oc describe node | egrep "hostname|machineconfig"

일단 이 단계까지만 와도 pending되었던 cluster upgrade가 진행이 됩니다.
cluster upgrade 도중에 migration을 진행하고 있었다면 모든 작업이 종료된 이후에 마저 migration을 진행하는 것이 좋을 것 같습니다.

$ oc describe node | egrep "hostname|Done"
   kubernetes.io/hostname=master0.wxai.garagekr.com
   machineconfiguration.openshift.io/state: Done
   kubernetes.io/hostname=master1.wxai.garagekr.com
   machineconfiguration.openshift.io/state: Done
   kubernetes.io/hostname=master2.wxai.garagekr.com
   machineconfiguration.openshift.io/state: Done
   kubernetes.io/hostname=worker0.red01.wxai.garagekr.com
   machineconfiguration.openshift.io/state: Done
   kubernetes.io/hostname=worker1.red02.wxai.garagekr.com
   machineconfiguration.openshift.io/state: Done
   kubernetes.io/hostname=worker2.blue02.wxai.garagekr.com
   machineconfiguration.openshift.io/state: Done
   kubernetes.io/hostname=worker3.blue03.wxai.garagekr.com
   machineconfiguration.openshift.io/state: Done
   kubernetes.io/hostname=worker4.blue04.wxai.garagekr.com
   machineconfiguration.openshift.io/state: Done
   kubernetes.io/hostname=worker5.green01.wxai.garagekr.com
   machineconfiguration.openshift.io/state: Done
   kubernetes.io/hostname=worker6.green04.wxai.garagekr.com
   machineconfiguration.openshift.io/state: Done

5.migration 스타트

$ oc patch Network.config.openshift.io cluster --type='merge' --patch '{ "spec": { "networkType": "OVNKubernetes" } }'
network.config.openshift.io/cluster patched

6.끝나면 모든 노드 리부트(수동)

7.확인

$ oc get network.config/cluster -o jsonpath='{.status.networkType}{"\n"}'
OVNKubernetes

$oc get co ->에러없어야함

8.뒷정리

migration 끄기

$ oc patch Network.operator.openshift.io cluster --type='merge' --patch '{ "spec": { "migration": null } }'
network.operator.openshift.io/cluster patched

SDNConfig를 null로 바꾸기

$ oc patch Network.operator.openshift.io cluster --type='merge' --patch '{ "spec": { "defaultNetwork": { "openshiftSDNConfig": null } } }'
network.operator.openshift.io/cluster patched (no change)

openshift-sdn namespace 지우기

$ oc delete namespace openshift-sdn
namespace "openshift-sdn" deleted

관련 글

OperatorHub를 위한 Custom Catalog만들기 (feat. Restricted Network)
Kubernetes Openshift
Overview # 대략 2년전 비슷한 내용으로 포스팅을 한 적이 있었는데, 내용에 변경이 있어서 업데이트된 내용으로 다시 작성하고자 합니다.
호다닥 톺아보는 SSL/TLS (feat. Openshift)
Kubernetes Openshift Security
Overview # 2년전쯤에 X509에 관한 포스팅을 한 적이 있었는데요, 이번 포스팅은 그 후속편이라고 봐주시면 될 것 같습니다.
OpenShift Assisted Installer로 설치해보기!
Kubernetes Openshift
Overview # 최근엔 OpenShift 설치를 해볼일이 많지 않아서 그냥 예전에 해왔던 방식대로, PXE부팅으로 CoreOS를 구성하거나 직접 콘솔로 들어가서 network 세팅해주고 OS 파라미터 설정해주는 등의 일들을 해왔었는데…. 해보신 분들은 아시겠지만 매우매우매우 귀찮습니다. 콘솔 권한이 있다면 문제가 생기더라도 트러블슈팅하면서 할 수 있겠지만, 권한마저 없다면 거기서부터는 난감한 일들 투성이죠.