TheKoguryo's 기술 블로그

 Version 2024.05.05

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 사용시

  1. Flannel CNI를 사용하는 OKE Cluster를 준비합니다.

  2. 테스트용 nginx 컨테이너를 설치합니다.

    kubectl create deploy nginx --image=nginx
    kubectl scale deploy nginx --replicas=3
    kubectl run ol1 --image=oraclelinux:8 --command -- tail -f /dev/null
    
  3. 설치 결과

    $ 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>
    
  4. 같은 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
    
  5. 다른 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 사용시

  1. VCN-Native CNI 2.0 사용하는 OKE Cluster v1.26 버전, Node Pool 이미지 Oracle Linux 7를 준비합니다.

  2. 테스트용 nginx 컨테이너를 설치합니다.

    kubectl create deploy nginx --image=nginx
    kubectl scale deploy nginx --replicas=3
    kubectl run ol1 --image=oraclelinux:8 --command -- tail -f /dev/null
    
  3. 설치 결과

    $ 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>
    
  4. 같은 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
    
  5. 다른 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
    
  6. 테스트 결과 - 10번 단순 테스트라 절대적인 성능 결과가 아닌 참고치로 보시기 바랍니다.

    Flannel CNIVCN-Native 2.0 CNI
    같은 Worker Node에 있는 Pod간 평균 Ping 속도0.069 ms0.060 ms
    다른 Worker Node에 있는 Pod간 평균 Ping 속도0.543 ms0.352 ms


이 글은 개인으로서, 개인의 시간을 할애하여 작성된 글입니다. 글의 내용에 오류가 있을 수 있으며, 글 속의 의견은 개인적인 의견입니다.