ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • K8S Worker Node Not Ready Trouble Shooting
    Trouble Shooting 2021. 7. 18. 14:58

    이번 포스팅은 worker node에서  생길 수 있는 kubelet issue에 대해서 다루고 이를 trouble shooting한다.

     

    kubelet issue는 다음과 같이 나눌 수 있다.

     

    - 워커노드의 kubelet이 죽은 경우 - inactive

    - 워커노드의 kubelet이 활성화되고 있는 중인 경우 - activating 

    - 워커노드의 kubelet이 동작 중인 경우 - active

     

     

     

     

    1. 워커노드의 kubelet이 죽은 경우 

     

    먼저 노드 상태를 확인한다.

     

     

    node01의 상태가 not ready다. 어떤 문제가 있는 듯 하다.

     

    좀 더 구체적인 정보를 위해 node01을 inspect 해본다. 

     

     

     

    노드의 상태를 알 수 없다고 한다.

     

    node의 agent인 kubelet으로부터 필요한 데이터를 받아오지 못하는 듯 하다.

     

    노드에 접속해서 kubelet상태를 확인 해보자.

     

     

    inactive(dead) 상태다

     

    우선 kubelet을 동작시켜 보자.   

     

     

    이제 마스터 노드로 돌아와서 node01의 상태를 확인해본다. 

     

     

    node01이 잘 동작한다. 

     

     

     

     

    2.  워커노드의 kubelet이 activating 상태를 유지하는 경우 

     

    1번 트러블 슈팅의 node01에 접속하는 부분까지는 동일하다. 

     

    이번엔 kubelet 상태를 체크해보니 좀 다르다. 

     

     

    이번엔 activating 상태다. (auto-restart)

     

    kubelet이 동작 중에 이슈가 발생한 경우이므로 journalctl로 로그를 확인해보자.

     

    (shift+g 커맨드로 제일 최근 로그를 볼 수 있다. )

     

     

    확인해보니 다음과 같은 에러가 발생한다.  

    unable to load client CA file /etc/kubernetes/pki/WRONG-CA-FILE.crt: open /etc/kubernetes/pki/WRONG-CA-FILE.crt: no such file or directory

     

    해당 경로의 crt파일을 읽어올 수 없다는 에러다.

     

    실제 경로로 들어가서 확인해보니까 파일명이 잘못되었다. 

     

     

    Kubelet의 config에서 경로를 변경해주어야 한다.

     

    systemctl status kubelet의 drop-in 항목에서 보면

    kubelet이 서비스를 실행할때 필요한 환경변수 값들이 저장되어 있는 파일을 참조해서 실행하는 것을 알 수 있다.  

     

    /etc/systemd/system/kubelet.service.d/10-kubeadm.conf 에서 kubelet에 대한 configure를 찾아보자.

     

     

    /var/lib/kueblet/config.yaml 에서 위에서 확인했던 crt파일에 대한 경로를 수정한다.

    (/etc/kubernetes/pki/ca.crt로 변경한다.)

     

    변경 후, systemctl restart kubelet 

     

     

    마스터 노드에서 node의 상태를 확인해본다. 

     

     

     

     

     

    3.  워커노드의 kubelet이 active인 경우 

     

    마찬가지로 1번 트러블 슈팅의 node01에 접속하는 부분까지는 동일하다. 

     

    kubelet 상태를 확인해본다. 

     

     

    kubelet이 동작 중이지만 node01은 not ready 상태다. 

     

    원인을 구체적으로 파악하기 위해 로그를 확인해본다. 

     

     

    에러 확인 결과 node01을 API 서버에 등록할 수 없다는 에러가 발생한다. 

     

     

    address가 잘못되어 있는 듯 하다. 

     

    마스터 노드로 가서 api 서버의 endpoint를 확인해보면 

     

     

    172.17.0.24:6443가 올바른 주소이며 

    172.17.0.24:6553에서 172.17.0.24:6443으로 변경해주어야 한다.  

     

     

    워커노드의 /etc/kubernetes/kubelet.conf로 가서 

     

    172.17.0.24:6553에서 172.17.0.24:6443로 변경해준 후, systemctl restart kubelet을 해준다. 

     

     

    마스터 노드에서 node01의 상태를 확인해 본 결과.

     

     

    node01이 정상적으로 동작한다. 

    반응형

    댓글

Designed by Tistory.