Support for service mesh and performance improvements when using the VCN-Native CNI plugin
업데이트 사항
Release Notes - Support for VCN-native pod networking 출시 이후 기능이 업데이드되어 VCN-Native Pod Networking CNI 2.0이 출시 되었습니다.
VCN-Native Pod Networking CNI에서 OCI Service Mesh, Istio, Linkerd 같은 Service Mesh 제품을 이제 지원합니다.
- Worker Node의 이미지를 Oracle Linux 7를 사용해야 합니다. (Oracle Linux 8은 지원 예정)
VCN-Native Pod Networking CNI 1.0 대비하여 네트워크 성능 향상
단, Worker Node의 버전이 Kubernetes 1.26 이상이어야 합니다.
VCN-Native CNI 2.0에서 Service Mesh 지원
VCN-Native CNI 2.0에서 네트워크 성능 향상
테스트할 경우의 수가 여러가지 있을 수 있지만, 여기에서는 컨테이너 서비스간의 호출하는 경우에서, 두 컨테이너 Pod가 같은 Worker Node에 있을 때랑 서로 다른 Worker Node 상에 있는 CNI간 성능을 비교해 봅니다.
Flannel CNI 사용시
Flannel CNI를 사용하는 OKE Cluster를 준비합니다.
테스트용 nginx 컨테이너를 설치합니다.
kubectl create deploy nginx --image=nginx kubectl scale deploy nginx --replicas=3 kubectl run ol1 --image=oraclelinux:8 --command -- tail -f /dev/null
설치 결과
$ kubectl get pod -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx-76d6c9b8c-l4tpk 1/1 Running 0 25s 10.244.1.7 10.0.10.134 <none> <none> nginx-76d6c9b8c-rvcln 1/1 Running 0 28s 10.244.0.4 10.0.10.52 <none> <none> nginx-76d6c9b8c-s67x2 1/1 Running 0 25s 10.244.0.134 10.0.10.244 <none> <none> ol1 1/1 Running 0 19s 10.244.0.6 10.0.10.52 <none> <none>
같은 Worker Node에 있는 Pod간 테스트 - 같은 Node(10.0.10.52)에 있는 Pod(10.244.0.6) -> Pod(10.244.0.4)간 테스트
$ kubectl exec -it ol1 -- ping -c 10 10.244.0.4 PING 10.244.0.4 (10.244.0.4) 56(84) bytes of data. 64 bytes from 10.244.0.4: icmp_seq=1 ttl=64 time=0.081 ms ... 64 bytes from 10.244.0.4: icmp_seq=10 ttl=64 time=0.065 ms --- 10.244.0.4 ping statistics --- 10 packets transmitted, 10 received, 0% packet loss, time 9227ms rtt min/avg/max/mdev = 0.065/0.069/0.081/0.007 ms
다른 Worker Node에 있는 Pod간 테스트 - Pod(10.244.0.6) on Node(10.0.10.52) -> Pod(10.244.0.134) on Node(10.0.10.244)
$ kubectl exec -it ol1 -- ping -c 10 10.244.0.134 PING 10.244.0.134 (10.244.0.134) 56(84) bytes of data. 64 bytes from 10.244.0.134: icmp_seq=1 ttl=62 time=0.623 ms ... 64 bytes from 10.244.0.134: icmp_seq=10 ttl=62 time=0.572 ms --- 10.244.0.134 ping statistics --- 10 packets transmitted, 10 received, 0% packet loss, time 9229ms rtt min/avg/max/mdev = 0.461/0.543/0.623/0.052 ms
VCN-Native CNI 2.0 사용시
VCN-Native CNI 2.0 사용하는 OKE Cluster v1.26 버전, Node Pool 이미지 Oracle Linux 7를 준비합니다.
테스트용 nginx 컨테이너를 설치합니다.
kubectl create deploy nginx --image=nginx kubectl scale deploy nginx --replicas=3 kubectl run ol1 --image=oraclelinux:8 --command -- tail -f /dev/null
설치 결과
$ kubectl get pod -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx-748c667d99-cddnv 1/1 Running 0 68m 10.0.40.26 10.0.10.213 <none> <none> nginx-748c667d99-prmcb 1/1 Running 0 68m 10.0.40.152 10.0.10.93 <none> <none> nginx-748c667d99-rf47h 1/1 Running 0 68m 10.0.40.207 10.0.10.156 <none> <none> ol1 1/1 Running 0 36m 10.0.40.227 10.0.10.93 <none> <none>
같은 Worker Node에 있는 Pod간 테스트 - 같은 Node(10.0.10.93)에 있는 Pod(10.0.40.227) -> Pod(10.0.40.152)간 테스트
$ kubectl exec -it ol1 -- ping -c 10 10.0.40.152 PING 10.0.40.152 (10.0.40.152) 56(84) bytes of data. 64 bytes from 10.0.40.152: icmp_seq=1 ttl=63 time=0.084 ms ... 64 bytes from 10.0.40.152: icmp_seq=10 ttl=63 time=0.057 ms --- 10.0.40.152 ping statistics --- 10 packets transmitted, 10 received, 0% packet loss, time 9241ms rtt min/avg/max/mdev = 0.039/0.060/0.084/0.014 ms
다른 Worker Node에 있는 Pod간 테스트 - Pod(10.0.40.227) on Node(10.0.10.93) -> Pod(10.0.40.207) on Node(10.0.10.156)
$ kubectl exec -it ol1 -- ping -c 10 10.0.40.207 PING 10.0.40.207 (10.0.40.207) 56(84) bytes of data. 64 bytes from 10.0.40.207: icmp_seq=1 ttl=62 time=0.355 ms ... 64 bytes from 10.0.40.207: icmp_seq=10 ttl=62 time=0.351 ms --- 10.0.40.207 ping statistics --- 10 packets transmitted, 10 received, 0% packet loss, time 9247ms rtt min/avg/max/mdev = 0.304/0.352/0.373/0.028 ms
테스트 결과 - 10번 단순 테스트라 절대적인 성능 결과가 아닌 참고치로 보시기 바랍니다.
Flannel CNI VCN-Native 2.0 CNI 같은 Worker Node에 있는 Pod간 평균 Ping 속도 0.069 ms 0.060 ms 다른 Worker Node에 있는 Pod간 평균 Ping 속도 0.543 ms 0.352 ms
이 글은 개인으로서, 개인의 시간을 할애하여 작성된 글입니다. 글의 내용에 오류가 있을 수 있으며, 글 속의 의견은 개인적인 의견입니다.