INTRO
RHOCP(RedHat OpenShift Container Platform)에서 기본으로 제공하는 CNI는 OVN-Kubernetes입니다.
이 글에서는 OVN-Kubernetes에 대한 내용을 소개드립니다.
OVN-Kubernetes에 대한 자세한 내용은 아래의 문서를 참고 바랍니다.
Overlay Network란?
OVN-Kubernetes가 OVN을 기반으로 Overlay Network 구현을 제공하는 기술이어서 Overlay Network 용어를 간단하게 알아보려고 합니다.
Overlay Network란 물리적 네트워크(Underlay Network) 위에 성립되는 가상의 네트워크입니다.
Underlay Network 환경에서는 확장성이나 신규 장비 추가 등 어려움을 겪고 있었는데 이러한 한계를 가상화된 Tunnel을 통해 데이터를 전송하는 방식인 Overlay Network 기술로 극복할 수 있었습니다. (Ex. VLAN --> VXLAN)
Overlay Network는 아래의 그림과 같이 물리적 네트워킹을 기반으로 가상화하는 것이기 때문에 물리적 인프라가 구성되어 있어야 합니다.
OVN-Kubernetes이란?
OVN-Kubernetes CNI 플러그인은 OVN을 기반으로 Overlay Network 구현을 제공해 줍니다. OVN은 선언된 네트워크 구성을 구현하기 위해 각 node에 OVS(Open vSwitch)를 구성합니다.
※ CNI(Container Network Interface): 컨테이너의 Network Interface를 설정할 수 있도록 도와주는 라이브러리 등으로 구성 (https://github.com/containernetworking/cni)
※ OVN(Open Virtual Network): OVS에 대한 가상 네트워킹을 제공하는 오픈소스 SDN
( OVN을 이용하여 스위치, 라우터 등 네트워크를 구성할 수 있음 )
※ OVS(OpenVSwitch): Virtual 스위치로 VM들 간의 트래픽 통합, 격리, 보안을 위한 기능을 제공하는 SW
OVN-Kubernetes는 각 노드에서 데몬을 실행하고 모든 노드에 실행되는 DB 및 OVN Controller 용도의 daemonset이 존재합니다. 이 부분을 확인하기 위해 openshit-ovn-kubernetes 네임스페이스에 실행중인 모든 리소스를 조회합니다.
ovnkube-master, ovnkube-node라는 daemonset이 실행되고 있습니다.
# oc get all,ep,cm -n openshift-ovn-kubernetes
NAME READY STATUS RESTARTS AGE
pod/ovnkube-master-6n5xq 6/6 Running 7 (4d3h ago) 5d9h
pod/ovnkube-master-7z7sc 6/6 Running 10 5d9h
pod/ovnkube-master-rhxsh 6/6 Running 7 5d9h
pod/ovnkube-node-gmjrk 5/5 Running 9 (4d3h ago) 5d9h
pod/ovnkube-node-j4kpl 5/5 Running 9 (4d3h ago) 5d9h
pod/ovnkube-node-jqn7k 5/5 Running 1 (2d ago) 2d
pod/ovnkube-node-lswzh 5/5 Running 1 (2d ago) 2d
pod/ovnkube-node-lvlnl 5/5 Running 9 (4d3h ago) 5d9h
pod/ovnkube-node-njnpf 5/5 Running 1 (2d ago) 2d
pod/ovnkube-node-qgwlj 5/5 Running 9 (4d3h ago) 5d8h
pod/ovnkube-node-zbx2t 5/5 Running 9 (4d3h ago) 5d8h
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/ovn-kubernetes-master ClusterIP None <none> 9102/TCP 5d9h
service/ovn-kubernetes-node ClusterIP None <none> 9103/TCP,9105/TCP 5d9h
service/ovnkube-db ClusterIP None <none> 9641/TCP,9642/TCP 5d9h
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
daemonset.apps/ovnkube-master 3 3 3 3 3 beta.kubernetes.io/os=linux,node-role.kubernetes.io/master= 5d9h
daemonset.apps/ovnkube-node 8 8 8 8 8 beta.kubernetes.io/os=linux 5d9h
NAME ENDPOINTS AGE
endpoints/ovn-kubernetes-master 192.168.56.32:9102,192.168.56.33:9102,192.168.56.34:9102 5d9h
endpoints/ovn-kubernetes-node 192.168.56.32:9105,192.168.56.33:9105,192.168.56.34:9105 + 13 more... 5d9h
endpoints/ovnkube-db 192.168.56.32:9642,192.168.56.33:9642,192.168.56.34:9642 + 3 more... 5d9h
NAME DATA AGE
configmap/control-plane-status 1 5d9h
configmap/kube-root-ca.crt 1 5d9h
configmap/openshift-service-ca.crt 1 5d9h
configmap/ovn-ca 1 5d9h
configmap/ovnkube-config 1 5d9h
configmap/signer-ca 1 5d9h
ovnkube-master, ovnkube-node라는 daemonset이 실행되고 있습니다.
이 demonset에 대한 pod가 어떠한 역할을 하는지 파악하기 위해 불특정 node 1개에 접속하여 crictl ps 명령을 통해 OVN을 이용한 Container가 무엇인지 확인합니다.
ovn-controller, db(sbdb, nbdb) 등이 실행중인 것으로 확인되었습니다.
<ControlPlane(master) node>
# ssh core@master1 "sudo crictl ps -a |egrep 'POD|Running' |egrep 'POD|ovn'"
CONTAINER IMAGE CREATED STATE NAME ATTEMPT POD ID POD
50c21a746d392 419638546f595270c03a22f5c0a2d4359faaafd73d270c17d0fc3582359fde0f 3 days ago Running ovnkube-master 2 25e915db9cc03 ovnkube-master-6n5xq
dd9bb0e0fab49 419638546f595270c03a22f5c0a2d4359faaafd73d270c17d0fc3582359fde0f 3 days ago Running ovn-dbchecker 1 25e915db9cc03 ovnkube-master-6n5xq
47f61a947b11b 419638546f595270c03a22f5c0a2d4359faaafd73d270c17d0fc3582359fde0f 3 days ago Running sbdb 1 25e915db9cc03 ovnkube-master-6n5xq
9b7512aa0a4c9 419638546f595270c03a22f5c0a2d4359faaafd73d270c17d0fc3582359fde0f 3 days ago Running ovn-acl-logging 3 c2b231fef79fb ovnkube-node-j4kpl
a5ed3036d01c9 419638546f595270c03a22f5c0a2d4359faaafd73d270c17d0fc3582359fde0f 3 days ago Running ovn-controller 3 c2b231fef79fb ovnkube-node-j4kpl
684f143a80fdc 2ce6069a1ff3090350135318dc1cef42bd57451b3317d1efe3d25ef12f4b32bf 3 days ago Running kube-rbac-proxy 1 25e915db9cc03 ovnkube-master-6n5xq
643951a19ec89 419638546f595270c03a22f5c0a2d4359faaafd73d270c17d0fc3582359fde0f 3 days ago Running ovnkube-node 1 c2b231fef79fb ovnkube-node-j4kpl
ac3bbc08b7217 2ce6069a1ff3090350135318dc1cef42bd57451b3317d1efe3d25ef12f4b32bf 3 days ago Running kube-rbac-proxy-ovn-metrics 1 c2b231fef79fb ovnkube-node-j4kpl
f4382a2422aa5 2ce6069a1ff3090350135318dc1cef42bd57451b3317d1efe3d25ef12f4b32bf 3 days ago Running kube-rbac-proxy 1 c2b231fef79fb ovnkube-node-j4kpl
357e488419f39 419638546f595270c03a22f5c0a2d4359faaafd73d270c17d0fc3582359fde0f 3 days ago Running nbdb 1 25e915db9cc03 ovnkube-master-6n5xq
2eabfc8cb5295 419638546f595270c03a22f5c0a2d4359faaafd73d270c17d0fc3582359fde0f 3 days ago Running northd
<Compute(worker) node>
# ssh core@worker1 "sudo crictl ps -a |egrep 'POD|Running' |egrep 'POD|ovn'"
CONTAINER IMAGE CREATED STATE NAME ATTEMPT POD ID POD
0546ec5331178 419638546f595270c03a22f5c0a2d4359faaafd73d270c17d0fc3582359fde0f 3 days ago Running ovn-acl-logging 3 6bc4e017cf305 ovnkube-node-zbx2t
865dcacb2af8d 419638546f595270c03a22f5c0a2d4359faaafd73d270c17d0fc3582359fde0f 3 days ago Running ovn-controller 3 6bc4e017cf305 ovnkube-node-zbx2t
46d12d490f13d 419638546f595270c03a22f5c0a2d4359faaafd73d270c17d0fc3582359fde0f 3 days ago Running ovnkube-node 1 6bc4e017cf305 ovnkube-node-zbx2t
c925974b20309 2ce6069a1ff3090350135318dc1cef42bd57451b3317d1efe3d25ef12f4b32bf 3 days ago Running kube-rbac-proxy-ovn-metrics 1 6bc4e017cf305 ovnkube-node-zbx2t
f4bfa77540f6b 2ce6069a1ff3090350135318dc1cef42bd57451b3317d1efe3d25ef12f4b32bf 3 days ago Running kube-rbac-proxy 1 6bc4e017cf305 ovnkube-node-zbx2t
위에 실행중인 daemonset을 실행하기 위해 사용중인 Container를 무엇인지 확인하기 위해 OVN-Kubernetes의 Architecture를 확인합니다.
구성 요소 | 설명 |
CMS(Cloud Management System) | 클러스터용 네트워킹을 설정하기 위해 OVN 리소스를 관리하는 플러그인 |
OVN/CMS plugin | CMS 구성 DB에 CMS 관련 형식으로 저장된 논리 네트워크 구성에 대한 CMS 개념을 OVN에서 이해할 수 있는 표현으로 변환함 |
OVN Northbound database (nbdb) | CMS 플러그인이 전달한 논리 네트워크 구성을 저장 |
OVN Southbound database (sbdb) | 바인딩하는 테이블(논리 네트워크 구성 요소들의 위치, 물리네트워크 link 등)을 포함하여 각 노드의 OVS 시스템에 대한 물리 네트워크 및 논리 네트워크의 구성 상태를 저장 |
ovn-northd | nbdb와 sbdb를 연결하는 중간 클라이언트 |
ovn-controller | sbdb에 필요한 모든 정보 또는 업데이트를 위해 OVS 및 Hypervisor와 상호 작용하는 OVN 에이전트 |
아래의 그림에서 클러스터의 OVN-Kubernetes 논리적 아키텍처를 확인합니다.
스위치와 라우터는 상호 연결되어 네트워크 토폴로지를 생성합니다. 아래의 그림은 라우터와 스위치가 연결하는 방법을 파악할 수 있습니다.
'Linux > OpenShift' 카테고리의 다른 글
RHOCP) OpenShift Logging (2) - Operator 설치 (0) | 2023.08.01 |
---|---|
RHOCP) OpenShift Logging (1) - 개요 (0) | 2023.08.01 |
RHOCP) Infra node 구성과 워크로드 격리 (0) | 2023.07.29 |
RHOCP) Disconnected OperatorHub 구성 (0) | 2023.07.28 |
RHOCP) Machine Config를 이용한 Chrony 설정 (0) | 2023.07.26 |