JUST WRITE

[Error Reporting] Worker Node join 에러 - CNI 이슈 본문

MLOps/Kubernetes

[Error Reporting] Worker Node join 에러 - CNI 이슈

천재보단범재 2023. 6. 26. 23:42

[Error Reporting] Kubernetes

Worker Node join 에러 - CNI 이슈

Kubernetes Cluster를 구성하고 Server를 다시 세팅해야 돼서 Worker Node를 제거한 적이 있습니다.

Server를 다시 세팅하고 해당 Server를 다시 Worker Node로 추가하였습니다.

하지만 무슨 이유인지 아래와 같은 에러가 나면서 해당 Node에서 Pod이 실행되지 않았습니다.

Failed to create pod sandbox: rpc error: code = Unknown desc = failed to set up sandbox container "c630e66c3967b10c2d0069117b719d6241c9a0a68b6f21b89f7f90f55c425bc4" 
network for pod "continuous-image-puller-6bkgh": networkPlugin cni failed to set up pod "continuous-image-puller-6bkgh_jupyterhub" 
network: failed to set bridge addr: "cni0" already has an IP address different from 10.244.6.1/24

위 로그 마지막 줄을 보면 cni0 bridge가 이미 존재한다는 메시지를 확인할 수 있습니다.

Worker Node에서 제거할 때 cni까지는 제대로 제거를 하지 않아서 생긴 오류였습니다.

What is CNI?!?!

CNI에 대해서 잠깐 정리하고 넘어가려 합니다.

CNI는 Container Network Interface로 Container 간의 Networking을 제어하는 플러그인입니다.

 

문제

Kubernetes Cluster에서 Worker Node를 삭제했지만 삭제한 Server에 관련 Network가 남아있었습니다.

flannel.1, cni0 Network interface가 남아있었습니다.

# interface 확인
$ ip a

...
...
10: flannel.1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UNKNOWN group default
    link/ether 1e:3c:dc:97:4d:71 brd ff:ff:ff:ff:ff:ff
    inet 10.***.***.***/32 brd 10.244.9.0 scope global flannel.1
       valid_lft forever preferred_lft forever
    inet6 fe80::1c3c:dcff:fe97:4d71/64 scope link
       valid_lft forever preferred_lft forever
11: cni0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether 26:88:39:8c:71:3d brd ff:ff:ff:ff:ff:ff
    inet 10.***.***.***/24 brd 10.***.***.*** scope global cni0
       valid_lft forever preferred_lft forever
    inet6 fe80::2488:39ff:fe8c:713d/64 scope link
       valid_lft forever preferred_lft forever

그래서 해당 Server를 다시 Worker Node로 Join하고 해당 Node에 Pod이 띄워질 때 문제가 생긴 거였습니다.

해결방안

Kubernetes Cluster에서 Worker Node를 제거할 때 drain, delete 명령어로 끝나지 않고,

해당 Server에서 Network Interface를 정리해줘야 합니다.

Network Interface를 정리하는 command는 아래와 같습니다.

$ kubeadm reset
$ systemctl stop kubelet
$ systemctl stop docker

$ rm -rf /var/lib/cni
$ rm -rf /etc/cni
$ rm -rf /var/lib/kubelet/*

$ ifconfig flannel.1 down
$ ifconfig cni0 down
$ ifconfig docker0 down

$ ip link delete flannel.1
$ ip link delete cni0

혹시나 Kubernetes Cluster 운영 시 Server 문제로 잠시 Node에서 뺐다가 조인하려면

Network Interface를 꼭 확인하시길 바랍니다.

[참고사이트]

728x90
반응형
Comments