[DIAMANTI] Network SR-IOV
디아만티 2가지 핵심 기능(SR-IOV, Local NVMe Disk) 중 첫번째 Network SR-IOV을 소개해 드리겠습니다.
쿠버네티스 환경에서 네트워크를 구성하려면 3rd party CNI(Container Network Interface) 솔루션 (Calico, Flannel 등)을 사용합니다. 모든 CNI는 기본적으로 아래와 같이 호스트 서버의 물리 NIC를 컨테이너 NIC로 iptables 등의 기능을 통하여 매핑하는 구조를 사용 합니다. (VM 환경 동일)
이런 경우 중간 Bridge layer 단 NAT를 사용하는데 그 과정에서 성능이 저하합니다. 그리고 추가로 한단계 거치면서 추상화 과정을 진행하니 네트워크에 익숙하지 않은 개발자 분들은 사실 이해하기도 어렵습니다. 무엇보다 문제가 발생할 경우 Troubleshooting이 용이하지 않습니다. (실제 쿠버네티스 환경에서 네트워크 문제는 늘 쉽지 않은 이슈 입니다.) 흔히 POD에서 나가는 것은 알겠는데, POD로 들어오는 건 이해하기 어렵다는 말을 합니다.
이를 해결하기 위하여 DIAMANTI는 VM 환경 시절부터 적용되어 비교적 오래된, 표준 기술인 SR-IOV(single root input/output virtualization)를 이용하였습니다. 물리 NIC를 가상화하고 이를 POD에 직접 할당합니다. (SR-IOV 참조 Intel Multus, https://github.com/intel/multus-cni ) DIAMANTI 에서는 자체 FPGA (Field-Programmable Gate Array) Chip 기반으로 (DIAMANTI 특허) SR-IOV 기능을 구현하여 성능이 뛰어나며 CPU의 성능 저하가(Offload) 없습니다.
이 경우 3rd Party CNI Solution에 비하여 관리가 용이 합니다. 별도의 Bridge/Overlay 네트워크를 사용하지 않고 기존 Baremetal 서버에 사용하는 IP 대역 그대로 POD에 적용하므로 훨씬 직관적이라 Troubleshooting 이 매우 용이합니다. 또한 3rd party 가 아닌 DIAMANTI 에서 직접 CNI Driver를 제공하므로 외부 업체에 맡기는 것이 아니라(혹은 별도 Enterprise Level Support 계약 체결) 소스 코드 업데이트 및 쿠베 버전 호환 등의 유지 보수 책임 역시 벤더가 가져가므로 안정적인 운영이 가능합니다.
당연히 물리 가상 NIC를 POD에 직접 할당(POD NIC MAC 주소와 Host Virtual MAC 주소 동일)하므로 latency가 빠르고 Host NIC의 물리 최대 성능(10Gbps)까지 POD에서 사용 가능합니다.
그럼, Demo 를 통하여 확인해 보겠습니다.
DIAMANTI 네트워크 구성spkr@erdia22:~/02.k8s_code/90.Demo$ dctl network list
NAME TYPE START ADDRESS TOTAL USED GATEWAY VLAN NETWORK-GROUP ZONE
blue (default) public 10.10.100.11 90 10 10.10.100.1 100
red public 10.10.110.11 90 0 10.10.110.1 110
DIAMANTI 에서는 위와 같이 사전에 네트워크 대역을 구분하고 해당 네트워크 IP 대역을 개별 POD에 할당 가능 합니다. 일반적으로 기업 환경에서 WEB/WAS/DB/DMZ 등의 Zone 으로 구분되는데, 적용 가능 합니다.
Deployment YAML File 예제spkr@erdia22:~/02.k8s_code/90.Demo$ cat 02.busybox-network-deploy.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: busybox-deployment
labels:
app: busybox
spec:
replicas: 3
selector:
matchLabels:
app: busybox
template:
metadata:
labels:
app: busybox
annotations:
diamanti.com/endpoint0: '{"network":"blue","perfTier":"high"}'
spec:
containers:
- name: busybox
image: busybox
command:
- sleep
- "3600"
위 Bold 체에서 확인 하듯이 DIAMANTI 에서는 사전에 정의된 네트워크 대역을 POD YAML 파일 annotations으로 지정합니다. (생략할 경우, Default Network IP 대역 할당) Apply 후 확인하면 아래와 같이 blue zone 으로 할당한 네트워크 대역 대의 IP(10.10.100.0/24)가 신규 생성한 busybox POD에 할당 되었습니다.
spkr@erdia22:~/02.k8s_code/90.Demo$ kc get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
busybox-deployment-5b6f86bdc4-bxbg7 1/1 Running 16 16h 10.10.100.16 dia02 <none> <none>
busybox-deployment-5b6f86bdc4-kn78k 1/1 Running 16 16h 10.10.100.15 dia03 <none> <none>
busybox-deployment-5b6f86bdc4-sl9nb 1/1 Running 16 16h 10.10.100.17 dia04 <none> <none>
해당 POD 에 접속하여 POD NIC 의 MAC 정보와 Baremetal Node 의 가상 NIC(vf) 의 MAC 정보 확인이 가능합니다.
위와 같이 POD NIC 의 MAC 정보( 8e:a2:00:28:60:31)가 물리 NODE(dia02)의 가상 NIC(vf 1)의 MAC 정보와 일치합니다. (DIAMANTI 에서는 내부적으로 POD 생성 시 NIC를 Node 의 가상 NIC에서 가져옵니다.)
다음으로 외부에서 POD로 바로 접속해 보겠습니다. 이번에는 편의를 위하여 NGINX 웹서버를 구동(apply) 하였습니다.
spkr@erdia22:~/02.k8s_code/90.Demo$ kc get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-deployment-5c8bd85d6-n7sh2 1/1 Running 0 16h 10.10.100.20 dia02 <none> <none>
nginx-deployment-5c8bd85d6-rdmmc 1/1 Running 0 16h 10.10.100.19 dia03 <none> <none>
해당 POD IP 로 사무실(데이터센터) 내 외부 관리자 PC 에서 바로 접속 하겠습니다.
spkr@erdia22:~/02.k8s_code/90.Demo$ kc get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 4d23hspkr@erdia22:~/02.k8s_code/90.Demo$ ip a show wifi0
3: wifi0: <BROADCAST,MULTICAST,UP> mtu 1500 group default qlen 1
link/ieee802.11 d0:c6:37:a4:55:56
inet 172.17.19.47/20 brd 172.17.31.255 scope global dynamic
valid_lft 14396sec preferred_lft 14396sec
inet6 fe80::e0b8:2d60:926b:9174/64 scope link dynamic
valid_lft forever preferred_lft forever
위와 같이 Kubernetes 별도 Service (NodePort) 구성을 하지 않았음에도 외부 IP (172.17.19.47) 대역에서 해당 POD (10.10.100.20)로 바로 접속이 가능합니다. Host 의 가상 NIC 가 POD 로 직접 할당이 되므로 호스트 내부의 POD 접속이 마치 또 다른 Baremetal 서버에 접속 하듯이 가능합니다.
오늘은 DIAMANTI 에서 제공하는 Network SR-IOV 기능을 알아 보았습니다. 추가로 SR-IOV 적용시 성능 향상 부문은 다른 POST에서 전달해 드리 겠습니다.
DIAMANTI 제품 관련 문의 : sales@spkr.co.kr