본문 바로가기

Data/Data Engineering

[ELK] k8s에 Elasticsearch(multinode) + Kibana 구축하기

반응형

원래는 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
반응형