원래는 k8s yaml파일을 전부 손으로 짜려고했는데, 생각보다 귀찮은게 많아서(ex. 보안이슈, 네트워크 이슈) Elastic에서 제공한 quickstart버전을 k8s에서 사용해보기로 했다.
https://www.elastic.co/guide/en/cloud-on-k8s/current/k8s-quickstart.html
Quickstart | Elastic Cloud on Kubernetes [2.10] | Elastic
With Elastic Cloud on Kubernetes (ECK) you can extend the basic Kubernetes orchestration capabilities to easily deploy, secure, upgrade your Elasticsearch cluster, and much more. Eager to get started? This quick guide shows you how to: Supported versions K
www.elastic.co
위 사이트 대로 똑같이 사용하면된다.
# install k8s custom resource
kubectl create -f https://download.elastic.co/downloads/eck/2.10.0/crds.yaml
# install k8s operator & RBAC
kubectl apply -f https://download.elastic.co/downloads/eck/2.10.0/operator.yaml
ElasticSearch 적용하기
먼저 yaml파일은 다음과 같이 설정한다.
- 멀티노드 환경을 구성할거기 때문에 count부분은 3으로 설정했다.
- xpack.monitoring.collection.enabled: true부분은 미리 이렇게 설정해두면 kibana에서 바로 cluster 상태를 볼수있게된다. 하지만 필수는 아니다, Kibana에 들어가서도 설정할수있기때문.
- volume부분은 기본적으로 elasticsearch는 pvc를 사용하고, 기본이름은 elasticsearch-data이다.
apiVersion: elasticsearch.k8s.elastic.co/v1
kind: Elasticsearch
metadata:
name: quickstart
namespace: elastic-system
spec:
version: 8.11.3
nodeSets:
- name: default
count: 3
config:
node.store.allow_mmap: false
xpack.monitoring.collection.enabled: true
volumeClaimTemplates:
- metadata:
name: elasticsearch-data
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
storageClassName: [STORAGE_CLASS_NAME]
구성한 yaml파일을 적용하면 아래와같이 pod이 뜨게된다.
서비스는 아래와같이 뜨게된다
kibana 적용하기
kibana의 yaml파일은 elasticsearch와 다르게 간단하다. kibana는 별도로 멀티노드를 할필요가없을것같아서 1로 설정했다.
apiVersion: kibana.k8s.elastic.co/v1
kind: Kibana
metadata:
name: quickstart
namespace: elastic-system
spec:
version: 8.11.3
count: 1
elasticsearchRef:
name: quickstart
namespace: elastic-system
Elasticsearch 초기 비밀번호 얻기
아래와같은 명령어로 초기 비밀번호를 얻을수 있다.
kubectl get secret quickstart-es-elastic-user -n elastic-system -o go-template='{{.data.elastic | base64decode}}'
Kibana & Elasticsearch 서비스 체크
서비스 체크하는 방법은 너무 다양하게 있는데, 일단 설치하면서 마주했던 부분은 다음과같다.
- 기본적으로 두 서비스는 https로 구성이 되어있어서 elasticsearch를 curl할때 주소앞에 꼭 https를 붙혀야한다.
- ingress설정했을때 특히 https로 잘 설정했는지 확인이 필요하다.
키바나에서는 Management -> Stack Monitoring에서 Elasticsearch nodes상태를 볼수있다.
Elasticsearch ClusterIP에서 NodePort로 변경하기
별도로 elasticsearch에 대해서 ingress설정하기 귀찮음 + 필요성이 없어서 nodeport로 서비스를 변경했다.
elasticsearch에 대해서 svc를 변경하려면 "quickstart-es-http" 서비스를 아래와같은 명령어로 edit하면 된다.
kubectl edit service/quickstart-es-http -n elastic-system
# AS-IS
ports:
- name: https
port: 9200
protocol: TCP
targetPort: 9200
selector:
common.k8s.elastic.co/type: elasticsearch
elasticsearch.k8s.elastic.co/cluster-name: quickstart
sessionAffinity: None
type: ClusterIP
# TO-BE
ports:
- name: https
nodePort: 30029
port: 9200
protocol: TCP
targetPort: 9200
selector:
common.k8s.elastic.co/type: elasticsearch
elasticsearch.k8s.elastic.co/cluster-name: quickstart
sessionAffinity: None
type: NodePort
'Data > Data Engineering' 카테고리의 다른 글
[ELK] k8s EK(Elasticsearch, Kibana) 설치중 만난 오류 (1) | 2024.02.06 |
---|---|
[filebeat] 로그 파일 새로운 라인만 수집되게 하는법 (0) | 2023.12.07 |
[Kafka] 공부-1 (1) | 2023.11.29 |
[ELK] kibana-elasticsearch (WIP) (0) | 2023.04.03 |
[Airflow] Task Was the task killed externally? + 아무런 로그없이 죽는 현상 해결 (0) | 2022.12.01 |