Kubernetes 클러스터 업그레이드 후, API 서버와 etcd가 CrashLoopBackOff 상태?

Proxmox VE에서 실행 중인 Ubuntu 가상 머신에 자체 호스팅된 Kubernetes 클러스터가 버전 업그레이드 이후 반복적으로 충돌하고 있습니다.

API 서버(kube-apiserver)가 지속적으로 충돌하고 재시작을 시도하고 있습니다. 현재까지 약 90회 재시작되었으며, 각 인스턴스는 3분도 채 되지 않아 종료됩니다.

초기 조사 결과, 근본 원인은 etcd 컨테이너가 CrashLoopBackOff 상태에 빠져 안정적으로 실행되지 못하기 때문으로 보입니다. 이로 인해 kube-apiserver가 etcd(127.0.0.1:2379 또는 :2379)에 연결하지 못하고 있습니다. 추가로 Flannel과 CoreDNS 파드도 CrashLoopBackOff 상태이며, 중복된 nameserver 설정으로 인해 DNS 구성 문제로 네트워크 연결에도 영향을 주고 있는 상황입니다.

Proxmox VE에 호스팅된 Ubuntu VM 환경에서 etcd를 안정화시키고 클러스터 기능을 복구할 수 있는 방법이나 조언을 받을 수 있을까요?

2 Likes

저도 궁금해서 전문가들 의견이 궁금했었는데… 아직…

[CloudBro AI Bot Response]
Kubernetes 클러스터 업그레이드 후 API 서버와 etcd가 CrashLoopBackOff 상태로 진입하는 문제는 꽤 자주 발생할 수 있는 이슈입니다. 주로 다음과 같은 원인들이 있습니다:

  1. etcd 데이터 호환성 문제
    업그레이드 시 etcd 버전 호환이 맞지 않으면 데이터 마이그레이션이 제대로 되지 않아 CrashLoopBackOff가 발생할 수 있습니다. 업그레이드 전 etcd upgrade guide를 꼭 참고하세요.

  2. API 서버와 etcd 간 인증 및 연결 문제
    kube-apiserver가 etcd와 통신할 때 사용하는 인증서나 endpoint 설정이 잘못되었을 수 있습니다. /etc/kubernetes/manifests/ 내의 kube-apiserver.yamletcd.yaml 파일에서 endpoint와 인증서 경로가 올바른지 확인하세요.

  3. 리소스 부족 또는 디스크 문제
    업그레이드 과정에서 etcd의 데이터가 커지거나, 노드의 CPU/메모리/디스크가 부족하면 CrashLoopBackOff가 발생할 수 있습니다. kubectl describe pod 명령어로 이벤트와 로그를 확인해보세요.

  4. 구성 파일 오타 또는 파라미터 변경
    업그레이드 과정에서 잘못된 옵션이 들어가거나, deprecated된 파라미터가 사용될 수 있습니다. 공식 가이드와 kubeadm upgrade 문서를 참고해 변경사항을 체크하세요.

문제 해결 방법

  • kubectl -n kube-system get pods로 상태를 확인하고, kubectl logs <pod명> -n kube-system으로 상세 에러 메시지를 확인하세요.
  • etcd와 apiserver의 로그를 꼼꼼히 확인하면 원인 파악에 큰 도움이 됩니다.
  • 필요하다면 백업해둔 etcd snapshot을 이용해 복구도 고려할 수 있습니다.

알려주신 정보만으로는 클러스터의 상태를 명확히 파악하기 어려운듯 합니다.

etcd의 crashloopbackoff는 많은 원인이 있을수 있는데.

간단하게는 kubernetes 에서 사용하는 인증서가 만료되었거나 교체 후 갱신이 없었거나.

치명적이게는 etcd데이터 정합성이 깨져 정상 동작하지 않는 상태일 수 있습니다.

우선 확인 가능해보이는것은 etcd pod의 로그 및 event 리소스, kubelet의 journalctl 로그 이며.

그런 이력데이터를 확인하여 루트 코즈 파악 후 이를 해결해야할것으로 보입니다.

2 Likes

ChatGPT에게 물어봐는데 맞는거 같은데… 추가 질문하면 좀 …

댓글 주신 것처럼, etcd 데이터베이스 파일이 롤백되서 문제가 발생한 것처럼 보여요. etc 로그에서 corrupted WAL 증상이 발생했었네요. ㅜ.ㅜ 원인은 아직도 못찾았어요. reset하고 다시 하니까 작동은 되는거 같아요. @kalee 님 의견 주셔서 감사합니다.

1 Like