k8s etcd & kube-apiserver 트러블 슈팅

GisangLee·2024년 8월 6일
0

k8d

목록 보기
31/36

문제 상황

메모리 증설을 위해 마스터와 워커노드 VM 들을
VSphere에서 Shutdown 하고 메모리 증설 이후 다시 실행했는데,
kubectl 명령어를 치면 에러가 발생.

  • 에러
E0805 23:40:29.871155 1446922 memcache.go:265] couldn't get current server API group list: Get "https://192.168.3.225:6443/api?timeout=32s": dial tcp 192.168.3.225:6443: connect: connection refused
E0805 23:40:29.871403 1446922 memcache.go:265] couldn't get current server API group list: Get "https://192.168.3.225:6443/api?timeout=32s": dial tcp 192.168.3.225:6443: connect: connection refused
E0805 23:40:29.872995 1446922 memcache.go:265] couldn't get current server API group list: Get "https://192.168.3.225:6443/api?timeout=32s": dial tcp 192.168.3.225:6443: connect: connection refused
E0805 23:40:29.874500 1446922 memcache.go:265] couldn't get current server API group list: Get "https://192.168.3.225:6443/api?timeout=32s": dial tcp 192.168.3.225:6443: connect: connection refused
E0805 23:40:29.875994 1446922 memcache.go:265] couldn't get current server API group list: Get "https://192.168.3.225:6443/api?timeout=32s": dial tcp 192.168.3.225:6443: connect: connection refused
The connection to the server 192.168.3.225:6443 was refused - did you specify the right host or port?

위 현상은 kube-apiserver가 실행에 문제가 있을 때 발생하기 때문에 추적을 시도한다.

추적 과정

Kubelet 상태 확인

journalctl -u kubelet
  • Kubelet 로그에서 ETCD와의 통신 문제가 있는 것을 발견

ETCD 상태 확인

systemctl status etcd

문제가 없음을 확인


어라? 근데 왜 ETCD와의 통신에 문제가 있지?

이거 평범한 이슈가 아니다.. x됨을 감지

컨테이너 까보자


crictl로 실행 중인 컨테이너 확인

sudo crictl ps

어머 왠걸... kube-apiserver와 etcd 컨테이너가 없다......
정확하게는 지속적으로 컨테이너가 떴다 죽었다 하는 것이었다.


잡았다.....

로그 까보자


이미 죽어있는 kube-apiserver 컨테이너와 etcd 컨테이너 로그 확인

sudo crictl logs <KUBE-APISERVER CONTEINAER ID>
sudo crictl logs <ETCD CONTEINAER ID>

kube-apiserver 컨테이너 로그

W0805 23:39:44.656816
1 logging.go:59] [core]
[Channel #2 SubChannel #4] grpc: addrConn.createTransport
failed to connect to {Addr: "127.0.0.1:2379", ServerName: "127.0.0.1", }.
Err: connection error: desc = "transport: 

역시 ETCD 통신 문제가 맞았다


etcd 컨테이너 로그

...
...
..
05T23:56:25.522321Z"
"caller":"etcdmain/etcd.go:204"
"msg":"discovery failed","error":"listen tcp 127.0.0.1:2379:
bind: address already in use","stacktrace":"go.etcd.io/etcd/server/v3/etcdmain.startEtcdOrProxyV2\n\tgo.etcd.io/etcd/server/v3/etcdmain/etcd.go:204\ngo.etcd.io/etcd/server/v3/etcdmain.Main\n\tgo.etcd.io/etcd/server/v3/etcdmain/main.go:40\nmain.main\n\tgo.etcd.io/etcd/server/v3/main.go:31\nruntime.main\n\truntime/proc.go:250"}

포트가 이미 사용 중이라고?

난 여기서 왜 이런 현상이 발생했는지 알게되었다.


포트 바인딩 확인

sudo lsof -i :2379

위 명령어로 알게되었다...

프로세스가 해당 포트로 잡혀있었다는 사실을


문제의 원인 발견

메모리 증설로 인한 컴퓨터 종료 이후 재부팅을 하고 나면
kube-apiserver부터 etcd 등 다양한 컨테이너들이 다시 뜨게되는데
포트남아있었나보다.
그래서 ETCD가 제대로 실행되지 않고 죽어있게 되었고
Kube-apiserver가 ETCD와 통신이 되지않아 문제가 생겼다는 것이다.

문제 해결 방법

ETCD 시스템 종료

sudo systemctl stop etcd

이미 죽어있는 ETCD 컨테이너 전부 삭제

sudo crictl rm <종료된 ETCD 컨테이너 ID>

포트 바인딩 프로세스 죽이기

sudo kill -9 <PORT PROCESS ID>
profile
포폴 및 이력서 : https://gisanglee.github.io/web-porfolio/

0개의 댓글

관련 채용 정보