본문 바로가기
K8s/Practices

[K8s] 쿠버네티스 클러스터 재시작 오류 해결하기

by okms1017 2024. 11. 21.
728x90

✍ Posted by Immersive Builder  Seong

 

쿠버네티스 클러스터 재시작 오류 해결하기

오늘의 주제는 쿠버네티스 트러블슈팅입니다. 

 

로컬 환경에서 쿠버네티스 클러스터를 재시작할 때 종종 오류가 발생하는 경우가 있습니다. 

오류가 발생하는 원인은 여러가지일 수 있지만 몇 가지 해결한 방법을 소개하고자 합니다. 

 

방법 1. 노드 재시작 순서 

클러스터 재시작 시 아래의 순서에 따라 진행합니다. 

 

  • 종료 : Worker Node → Control Plane 순으로 종료합니다. 
  • 시작 : Control Plane → Worker Node 순으로 시작합니다. 

 

방법 2. 스왑 메모리(Swap) 비활성화

kubelet은 스왑 메모리까지 고려하여 리소스를 할당하지 않습니다. 

스왑 메모리가 활성화되어 있으면 시스템 부팅 시 kubelet 오류가 발생합니다. 

 

  • Swap 비활성화 

$ sudo swapoff -a

$ sudo systemctl restart kubelet

 

  • Swap 영구 비활성화 

$ sudo sed -i '/swap/s/^/#/' /etc/fstab

 

방법 3. kubelet 트러블슈팅

각 노드의 kubelet의 상태와 로그를 확인하여 트러블슈팅을 진행합니다. 

 

  • kubelet 상태 및 로그 확인 

$ sudo systemctl status kubelet

$ journalctl -f

$ journalctl -u kubelet

 

 

방법 4. etcd 트러블슈팅 

Control Plane 노드의 etcd의 상태와 로그를 확인하여 트러블슈팅을 진행합니다. 

 

  • etcd 상태 및 로그 확인 

$ sudo systemctl status etcd.service

$ journalctl -xeu etcd.service

 

아래 발생한 오류는 로그를 통해 쿠버네티스 클러스터 종료 시 etcd의 정상적이지 않은 종료로 인해 etcd가 정상적으로 실행되지 않는 현상으로 원인을 추정하였습니다.

 

 

해결하기 위한 방법으로 etcd 백업 파일을 복구하는 방법과 etcd 데이터를 리셋하는 방법 두 가지를 고려하였고, 당시에는 etcd 내에 복구를 위한 중요 데이터가 없었기 때문에 etcd 데이터 디렉토리(/var/etcd/data)를 삭제하여 오류를 해결하였습니다. 

 

$ rm -rf /var/etcd/data

$ rm -rf /var/lib/etcd/member

$ systemctl restart etcd.service

 

방법 5. 클러스터 재구성

에러가 불분명하거나 복잡하게 작업이 꼬인 경우 클러스터 재구성을 시도할 수 있습니다. 테스트 환경에서만 가능한 방법으로 운영 환경에서는 권장하지 않습니다. 

 

  • 클러스터 삭제 (kubespray)

$ ansible-playbook -i inventory/mycluster/hosts.yml --become --become-user=root reset.yml

 

  • 클러스터 설치 (kubespray)

$ ansible-playbook -i inventory/mycluster/hosts.yml --become --become-user=root -v cluster.yml

 

 

728x90