mingming

kubernetes node NotReady 본문

kubernetes

kubernetes node NotReady

mingming_96 2023. 9. 25. 13:48

실습 환경 

Virtualbox : 6.1.44 

OS : Ubuntu 20.04

Network Adapter : Nat , Hostonly 

CNI : Weavenet , CIDR : 10.32.0.0/12

 

장애상황 

vagrant로 구성한 쿠버네티스 클러스터 환경에서 노드 하나를 추가해주려 했지만 join 할 때 nat 어댑터를 인식해 join 실패

root@master:~# root@master:~# kubectl get nodes -o wide
NAME      STATUS     ROLES           AGE   VERSION   INTERNAL-IP      EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION      CONTAINER-RUNTIME
master    Ready      control-plane   16d   v1.28.1   192.168.56.103   <none>        Ubuntu 20.04.6 LTS   5.4.0-163-generic   containerd://1.6.22
worker    Ready      <none>          16d   v1.28.1   192.168.56.104   <none>        Ubuntu 20.04.6 LTS   5.4.0-162-generic   containerd://1.6.22
worker2   NotReady   <none>          16m   v1.28.1   10.0.2.15        <none>        Ubuntu 20.04.6 LTS   5.4.0-162-generic   containerd://1.6.22

 

pod가 정상적으로 실행되지 못하고 있습니다.

root@master:~# kubectl get pods -n kube-system
NAME                             READY   STATUS              RESTARTS       AGE
coredns-5dd5756b68-gszpl         1/1     Running             9 (82m ago)    16d
coredns-5dd5756b68-n97fg         1/1     Running             9 (82m ago)    16d
etcd-master                      1/1     Running             9 (82m ago)    16d
kube-apiserver-master            1/1     Running             9 (82m ago)    16d
kube-controller-manager-master   1/1     Running             9 (82m ago)    16d
kube-proxy-c6pr8                 0/1     ContainerCreating   0              24m
kube-proxy-ppdfl                 1/1     Running             9 (82m ago)    16d
kube-proxy-zc2cj                 1/1     Running             9 (82m ago)    16d
kube-scheduler-master            1/1     Running             9 (82m ago)    16d
weave-net-cbxfg                  2/2     Running             19 (82m ago)   16d
weave-net-ll68j                  2/2     Running             18 (82m ago)   16d
weave-net-mps5t                  0/2     Init:0/1            0              24m

 

해결방안

호스트 전용 어댑터로 상호 통신이 가능한 것은 확인했습니다. join 할 때 사용할 네트워크 어댑터를 지정할 수 있는지 찾아봤지만 아쉽게도 그런 기능은 지원하지 않는 것 같았습니다.

 

 

쿠버네티스 기술 문서에서도 해당 상황에서 ip 라우팅 설정하는 것을 권장하고 있습니다. 

 

1. 라우팅 설정 

master node 로 가는 통신을 Hostonly 어댑터를 사용하게 설정 

sudo ip route add <목적지_네트워크> via <게이트웨이>
root@worker2:~# sudo ip route add 192.168.56.0/24 via 192.168.56.1
RTNETLINK answers: File exists

이미 존재하는 라우팅 경로라고 나옵니다. 이 접근방법은 아닌 것 같습니다.

 

2. 네트워크 어댑터 우선순위 

네트워크 어댑터 설정은 아래의 경로에서 설정할 수 있습니다.

/etc/netplan/
root@worker2:~# vim /etc/netplan/0
00-installer-config.yaml  01-installer-config.yaml

앞의 숫자는 우선순위를 나타냅니다. 

00-installer-config.yaml

network:
  version: 2
  ethernets:
    enp0s8:
      addresses:
      - 192.168.56.107/24
      gateway4: 192.168.56.1
      nameservers:
        addresses:
        - 8.8.8.8
        search: []
  version: 2

01-installer-config.yaml

network:
  ethernets:
    enp0s3:
      dhcp4: true
      nameservers:
        addresses:
        - 8.8.8.8
        search: []

위와 같이 구성한 뒤 netplan apply 로 해당 네트워크 설정을 적용시킵니다.

 

다시 클러스터에 조인을 시킨 후 노드를 확인해보니 여전히 같은 증상입니다.

worker2   NotReady   <none>          8s    v1.28.1   10.0.2.15        <none>        Ubuntu 20.04.6 LTS   5.4.0-162-generic   containerd://1.6.22

 

3. 네트워크 어댑터 순서 변경 

Virtualbox의 물리적인 어댑터 순서를 바꿔보도록 하겠습니다. 첫 번째 어댑터를 호스트온리 두 번째 어댑터를 Nat로 설정 합니다.

/etc/netplan/ 파일을 수정해 다음과 같이 네트워크 순서를 바꿨습니다.

2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:8e:18:3d brd ff:ff:ff:ff:ff:ff
    inet 192.168.56.107/24 brd 192.168.56.255 scope global enp0s3
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fe8e:183d/64 scope link 
       valid_lft forever preferred_lft forever
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:b4:83:e5 brd ff:ff:ff:ff:ff:ff
    inet 10.0.3.15/24 brd 10.0.3.255 scope global dynamic enp0s8
       valid_lft 86361sec preferred_lft 86361sec
    inet6 fe80::a00:27ff:feb4:83e5/64 scope link 
       valid_lft forever preferred_lft forever

 

kubeadm join

root@master:~# kubectl get nodes -o wide
NAME      STATUS   ROLES           AGE   VERSION   INTERNAL-IP      EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION      CONTAINER-RUNTIME
master    Ready    control-plane   16d   v1.28.1   192.168.56.103   <none>        Ubuntu 20.04.6 LTS   5.4.0-163-generic   containerd://1.6.22
worker    Ready    <none>          16d   v1.28.1   192.168.56.104   <none>        Ubuntu 20.04.6 LTS   5.4.0-162-generic   containerd://1.6.22
worker2   Ready    <none>          5s    v1.28.1   192.168.56.107   <none>        Ubuntu 20.04.6 LTS   5.4.0-162-generic   containerd://1.6.22

노드가 정상적으로 ready 상태인걸 확인할 수 있습니다. 

 

물리적 네트워크 어댑터 순서를 바꿔주니 정상적으로 작동했습니다. 정확한 기준은 모르겠지만 어댑터를 인식하는 우선순위가 존재하는 것 같았습니다.