개인적으로 공부한 내용을 작성한 게시글입니다. 잘못된 내용이 있을 수 있습니다.
틀린 부분을 알려주시면 바로 고치겠습니다. 감사합니다.
이제 K8S 이용하여 Elasticsearch를 배포해 보자. Helm이라는 패키징 툴을 이용해서 배포할 것이다.
Helm 이란
쿠버네티스를 통해 애플리케이션을 배포하기 위해서는 많은 리소스들이 필요하다. 대표적으로 Pod, Deployment, Statefulset, DaemonSet, Service, ConfigMap, Secret, PersistentVolume, PersistentVolumeClaim, Ingress 등등
위의 리소스들의 템플릿은 비슷한데, 배포하기 위해서는 애플리케이션마다 모두 yaml파일을 만들어야 하고, 관리를 해줘야 한다.
그에 반해 helm을 이용하면 공통적인 템플릿을 만들어 Value 값만 바꿔가며 환경, 프로젝트에 따라 다양하게 설정할 수 있어 관리가 용이해진다.
`$ brew install helm` 를 통해 helm을 설치할 수 있다.
elasticsearch 배포
bitnami의 elasticsearch에서 제공하는 values.yaml 파일의 설정을 사용하여 배포해 보자. `-f values.yaml` 옵션은 helm 차트를 values.yaml 파일의 값으로 커스터마이징 하라는 뜻이다.
이를 통해 stage환경에서는 `values_stage.yaml`, production 환경에서는 `values_production.yaml` 등의 파일을 따로 만들어서 환경에 따라 쉽게 설정을 적용할 수 있다.
values.yaml 다운로드
$ helm repo add bitnami https://charts.bitnami.com/bitnami
$ helm repo update
$ helm search repo -l bitnami/elasticsearch | head
$ wget https://raw.githubusercontent.com/bitnami/charts/master/bitnami/elasticsearch/values.yaml
배포
# jerry라는 네임스페이스 생성
$ kubectl create namespace jerry
# values.yaml 파일을 이용하여 my-elasticsearch 라는 이름의 애플리케이션 배포
$ helm install my-elasticsearch -f values.yaml --set sysctlImage.enabled=true -n jerry bitnami/elasticsearch
배포에 성공하면 아래와 같은 메시지가 나온다.
$ kubectl get pods -n jerry 로 pods이 정상적으로 동작하는 것을 확인할 수 있다.
`$ kubectl port-forward -n jerry svc/my-elasticsearch 9200:9200 &` 커맨드를 통해 쿠버네티스 클러스터 내부의 서비스를 로컬 머신에서 직접 접근할 수 있도록 port-forwading 해준다.
`$ curl localhost:9200` 커맨드를 입력하면 elasticsearch을 정상적으로 호출되는 것을 확인할 수 있다.
추가로 kibana와 logstash도 배포해 보자.
이번에는 values.yaml 파일없이 bitnami에서 설정한 default 값을 사용하고, elasticsearch에 연결하기 위해 호스트 값과 포트번호만 set 옵션을 통해 바꿔보자.
kibana 배포
helm install my-kibana oci://registry-1.docker.io/bitnamicharts/kibana \
--set "elasticsearch.hosts[0]=elasticsearch.jerry.svc.cluster.local" \
--set elasticsearch.port=9200 \
-n jerry
logstash 배포
helm install my-logstash bitnami/logstash \
--set elasticsearch.host=my-elasticsearch-master.jerry.svc.cluster.local \
--set elasticsearch.port=9200 \
-n jerry
아래는 모든 배포된 애플리케이션의 리소스 들이다.
ETC
위에서는 공식 elasticsearch 이미지가 아닌 bitnami/elasticsearch 이미지를 사용했다.
Bitnami와 Official 이미지의 차이점
- 초기 설정 - BItnami는 애플리케이션에 배포와 설정을 단순화하는데 중점을 두고 있다. 실제 서비스에 적용하기 위한 기본 보안 설정 등이 이루어져 있다. 반면 공식 이미지는 사용자가 환경에 맞게 설정을 수정해야 할 수도 있다.
- 보안 설정: Bitnami는 보안에 많은 중점을 둔다. 이는 초기 설정에서부터 사용자가 적절한 보안 구성을 가지도록 도와준다.
- 유지 보수와 업데이트 - Bitnami와 공식 이미지 모두 자체 업데이트와 유지 보수 메커니즘이 있지만, Bitnami는 더욱 체계적인 프로세스를 가지고 있다.
- 커스텀: Bitnami의 경우 공식 이미지에 비해 사용자의 커스텀 설정이 제한적일 수 있다.
- 공식 지원 불가: Bitnami 이미지는 공식 개발자가 지원하지 않기 때문에, 문제 발생 시 Bitnami 커뮤니티나 Bitnami 지원 팀에 의존해야 할 수 있다.
References
bitnami elasticsearch 배포 - https://itsmetommy.com/2020/06/10/kubernetes-install-bitnami-elasticsearch-kibana-using-helm/
bitnami에서 values_procduction.yaml의 지원 중단 - https://github.com/bitnami/charts/issues/5095