데이터 공부/Kubernetes

ECK error 원인 및 해결 방법 - elasticsearch status 가 unknown, kibana status 가 red & pod running 0/1 일 경우

한소희DE 2022. 6. 13. 20:45

 

ECK 를 이용하여, ELK 프로세스를 쿠버네티스 환경으로 옮겨주는 과정에서 에러 몇 가지가 발생했다. 그중, 아래 에러에 대한 해결 과정을 포스팅한다.

 

 

상태

  • ECK elasticsearchstatusunknown
  • ECK kibanastatusred, pod 의 running 상태가 0/1
  • kibana에서 해당 에러 발생
    • Readiness probe failed: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers). Readiness probe failed: HTTP probe failed with statuscode: 503

 


 

 

 

 

01. 개요

 

ECK 를 이용하여, ELK 프로세스를 쿠버네티스 환경으로 옮겨주었다.

 

ECK 관련 공식문서는 생각보다 잘 나와 있다. 따라서

1) 공식 문서를 참고해, ECK 를 release 해주었다.

2) 그후 namespace를 생성하여, elasticsearch 를 띄워주었다.

3) 그 결과, elasticsearch 의 status는 unknown, phase 가 ApplyingChanges 으로 떴지만 pod 상태가 모두 running 상태로, 총 3개의 node 가 잘 올라갔다.(고 생각했다.)

 

elasticsearch 상태 확인

kubectl get elasticsearch --namespace=<namespace_name>
kubectl get pod --namespace=<namespace_name>

 

 

여기까지는 공식 문서를 따라 했을 때 잘 된다. (라고 생각했다.)

 

 

 

 


 

02. 문제 발생

 

4) elasticsearch와 동일하게, 공식문서를 참고하여 kibana를 띄워주었다.

공식 문서를 참고해서 하였는데도, kibana를 띄울 때 문제가 발생했다.

 

kibana의 pod는 running 상태였지만 READY가 0/1 로 , 제대로 동작하지 않았다.

 

 

따라서  kibana의 status 를 자세히 보았다.

kubectl get kibana --namespace=<namespace_name>

 

그 결과, kibana의 status는 Red 가 떴다.

 

그래서 로그를 살펴보았다.

kubectl get logs <pod_name> --namespace=<namespace_name>
kubectl describe pod <pod_name> --namespace=<namespace_name>

 

 

에러 문구는 아래와 같았다.

Readiness probe failed: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers). Readiness probe failed: HTTP probe failed with statuscode: 503

 

 


 

 

03. 원인 및 해결

 

알고 보니, elasticsearch 에서 status가 unknown 인 것 부터가 문제였다. 즉, elasticsearch 의 pod가 잘 running 되는 것 처럼 보였지만, elasticsearch가 제대로 동작하지 않고 있었기 때문에 kibana도 안 붙고 있던 것이었다. 

 

 

원인은, elasticsearch 가 동작하려면 최소 볼륨이 2Gi 는 되어야 동작한다. 하지만 default volume이 1Gi 였기 때문에 동작하지 않았던 것이다. 

현재 설정된 volume 을 보려면, pv & pvc의 capa를 확인하면 된다.

 

kubectl get pv --namespace=<namespace_name>
kubectl get pvc --namespace=<namespace_name>

 

 

따라서 volume 을 2Gi 이상으로 변경해준다.

나의 경우, elasticsearch 에서 설정한 volumeClaimTemplates 에서 용량을 증설하여 apply 해주었다.

* 용량의 경우 증가는 가능하나 증감은 불가능하다.

 

 

그 결과,

elasticsearch 의 status도 정상적으로 green, kibana도 정상적으로 green, kibana의 pod 도 정상적으로 실행되었다.

이제 kibana의 service를 loadbalancer 로 설정하여 ip 주소를 통해 접속을 시도한다.

 

 

접속방법

https://<extanal_ip>:<port>

 

 

 

공식문서를 기반으로 ECK 를 실행하면, 인증서가 세팅되어있지 않기 때문에

연결이 비공개로 설정되어 있지 않습니다. 

경고가 뜨는데, 이 아래의 고급을 눌러 링크로 이동해준다.

 

 

 

 

그러면 아래와 같이 kibana가 잘 동작하는 것을 알 수 있다.