[AWS] EKS Node조인 실패 트러블슈팅(Nodes fail to join cluster)
IT/AWS

[AWS] EKS Node조인 실패 트러블슈팅(Nodes fail to join cluster)

반응형

Intro

  • EKS의 NodeGroup생성시 EC2 insatnce가 클러스터에 조인이 안되는 경우가 발생할 수 있습니다.
  • 클러스터 조인이 안돼는 이유에는 여러가지 케이스가 있겠지만 아래 상황에서 조인이 안돼는 이유와 트러블슈팅을 해보도록 하겠습니다.

이슈 상황

  • EKS NodeGroup을 Custom AMI로 사용하기 위해 eksctl로 EKS를 생성하였습니다. eksctl custom AMI생성 하기
  • 이 경우 LaunchTemplate이 자동으로 생성이되며, 그 안에는 eksctl yaml에 설정한 custom AMI 이미지 ID가 등록이 되어있습니다.
  • EKS Cluster 생성완료 후 NodeGroup Instance가 생성이 되었지만, Node생성 실패로 트러블슈팅이 필요한 상황입니다.

kubelet이 잘 동작하는지 확인

# kubelet동작 확인
ps -ef | grep kubelet
  • EKS Optimized AMI에는 부트스트랩 스크립트(/etc/eks/bootstrap.sh)가 포함되어있습니다.
  • 부트스트랩 스크립트를 까보면 그안에 kubelet 실행 명령어 systemctl start kubelet이 포함되어있습니다.
  • 기본적으로 WorkerNode가 시작될때 부트스트랩이 실행되도록 되어있으나 CustomAMI를 사용할 경우 UserData에 부트스트랩 실행 커맨드를 넣어주어야합니다.
  • 위 경우는 kubelet이 잘 동작하지 않은 상황이며,그 이유는 부트스트랩이 동작하지 않다고 판단할 수 있습니다.
  • 따라서 EC2가 실행될때 동작하는 UserData의 스크립트에 문제가 없었는지 확인이 필요합니다.

cloud-init-output.log 확인

  • cloud init output log는 UserData에서 실행된 shell script를 디버깅할 수 있습니다.
  • UserData에 넣어두었던 스크립트에 이상이 있었는지 확인해보겠습니다.

  • cat /var/log/cloud-intit-output.log
  • "No cluster found for Name" 이라는 메시지가 보이며
  • /var/lib/cloud/instance/scripts 의 실행이 실패되었다고 확인이 됩니다.

/var/lib/cloud/instance/scripts 확인

  • 해당 스크립트를 확인해보니 eksctl yaml에서 overrideBootstrapCommand 필드의 스크립트에 문제가 있었나 봅니다.
  • 뭐가 문제인지 확인해보니 실제 생성한 클러스터와 해당 스크립트에 클러스터의 이름이 일치하지가 않았습니다.

강제로 bootstrap실행

  • 클러스터 이름을 변경한 후 강제로 부트스트랩을 실행하였더니 잘 실행이 되며
  • 시간이 지나고 클러스터 조인이 잘되는 것을 확인하였습니다.
반응형