kind로 Elasticsearch 3노드 클러스터 구성

kind cluster
 ├─ elasticsearch-0
 ├─ elasticsearch-1
 └─ elasticsearch-2

 

1. Headless Service 생성

apiVersion: v1
kind: Service
metadata:
  name: elasticsearch
spec:
  clusterIP: None
  selector:
    app: elasticsearch
  ports:
    - name: http
      port: 9200

 

Headless Service는 Pod별 DNS를 생성해줍니다. StatefulSet과 함께 엘라스틱서치 노드 간 통신에 필요합니다.

 

2. StatefulSet 설정

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: elasticsearch
spec:
  replicas: 3
  serviceName: elasticsearch
  selector:
    matchLabels:
      app: elasticsearch
  template:
    spec:
      containers:
        - name: elasticsearch
          image: docker.elastic.co/elasticsearch/elasticsearch:8.13.0
          env:
            - name: discovery.seed_hosts
              value: "elasticsearch-0.elasticsearch,elasticsearch-1.elasticsearch,elasticsearch-2.elasticsearch"
            - name: cluster.initial_master_nodes
              value: "elasticsearch-0,elasticsearch-1,elasticsearch-2"

최초 마스터 노드 후보 값Headless Service 이름이 맞아야 한다는 것입니다.

 

※ 상태 확인

kubectl get pods
kubectl port-forward svc/elasticsearch 9200:9200
curl http://localhost:9200/_cluster/health?pretty

 

 

Python으로 Elasticsearch에 데이터 적재하기 

from elasticsearch import Elasticsearch, helpers
from datetime import datetime
import uuid

es = Elasticsearch("http://localhost:9200")
index_name = "logs-test"

if not es.indices.exists(index=index_name):
    es.indices.create(index=index_name)

docs = []
for i in range(10):
    docs.append({
        "_index": index_name,
        "_id": str(uuid.uuid4()),
        "_source": {
            "message": f"hello elasticsearch {i}",
            "timestamp": datetime.utcnow().isoformat()
        }
    })

helpers.bulk(es, docs)
print("데이터 적재 완료")

 

python python_app_name.py

 

🧠 마무리 요약

오늘 정리한 내용을 간단히 요약하면 아래와 같습니다.

  • 쿠버네티스는 컨테이너 운영 자동화를 위해 등장한 표준 플랫폼이다.
  • Pod는 언제든 죽고 다시 생성될 수 있기 때문에 Service로 접근해야 한다.
  • Deployment vs StatefulSet은 상태 저장 여부에 따라 선택한다.
  • kind는 Docker 기반으로 로컬에서 Kubernetes 클러스터를 띄울 수 있는 훌륭한 도구다.
  • Elasticsearch 같은 상태 저장 시스템은 StatefulSet + Headless Service 구조로 운영해야 한다.

+ Recent posts