Question

EKS에서 노드를 kubectl delete node 명령어로 노드 리소스에서 삭제를 진행했습니다. 

하지만 kubectl로 삭제한 노드와 eks의 노드그룹 Desired size의 싱크가 맞지 않습니다.

예 ) 실제 가용 노드는 4개로 확인되는데 콘솔 상 Desired size 는 5개로 확인됩니다. 

해당 현상을 개선하거나 해결 할 수 있는 방안이 있는지 궁금합니다. 


Answer


문의주신 현상은 예상된 동작방식으로 'kubectl delete node' 명령어를 통해 실제 EC2 인스턴스를 종료시킬 수 없습니다. 

'kubectl delete node' 명령을 수행 시 Kubernetes API server에 노드 삭제 API를 요청하고 Kubernetes 클러스터 내에서 해당 노드가 더 이상 사용되지 않게 제거됩니다. 하지만 AWS 서비스에서는 EC2 인스턴스에 대해 Terminate 요청을 받지 않았기 때문에 인스턴스는 계속 구동중인 상태를 유지합니다.

'kubectl delete node' 외에도 'kubectl cordon node', 'kubectl drain node' 등 노드와 관련된 명령어들이 있지만 kubectl 명령으로는 "클러스터 내에서의 리소스 삭제 + AWS EC2 인스턴스 종료"를 동시에 수행할 수는 없습니다. 

임의로 노드가 삭제되었을 때 노드와 워크로드에 대한 가용성 테스트를 진행하시는 것이 목적이라면 'kubectl delete node' 명령으로 노드를 삭제하시는 것보다 노드그룹에 속한 EC2 인스턴스를 강제로 Terminate 시키시기를 제안드립니다.

임의로 인스턴스가 종료되었을 때 Kubernetes 클러스터에서 노드가 종료된 것을 인지하고 해당 노드에 있던 Pod 들이 다른 가용노드를 찾아 스케쥴되는지, Auto Scaling group에 의해 신규 노드가 추가되는지 등을 확인하실 수 있습니다.