ECK 를 이용하여, ELK 프로세스를 쿠버네티스 환경으로 옮겨주는 과정에서 에러 몇 가지가 발생했다. 그중, 아래 에러에 대한 해결 과정을 포스팅한다.
상태
- ECK elasticsearch 의 status는 unknown
- ECK kibana 의 status 가 red, 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가 잘 동작하는 것을 알 수 있다.
'데이터 공부 > Kubernetes' 카테고리의 다른 글
쿠버네티스 서비스 (0) | 2022.07.26 |
---|---|
Mac M1에서 빌드한 이미지 - exec format error 해결 방법 (0) | 2022.06.14 |
쿠버네티스 - 디플로이먼트의 배포 방식 :: 롤링 업데이트 (0) | 2022.03.26 |
쿠버네티스란? 주요 개념 익혀보기 - 레플리카셋, 디플로이먼트, 서비스 (1) | 2022.03.25 |
쿠버네티스란? - 노드와 파드, 컨테이너 차이를 이해해보자 (5) | 2022.03.22 |