Kubernetes EFK 설치 하는 3가지 방법

EFK (Elasticsearch, Fluent Bit, Kibana)는 로그 저장, 시각화하는 데 강력한 도구 입니다. 다음에서 Kubernetes EFK 설치 설정하는 방법을 안내하겠습니다.

Kubernetes EFK 설치

Kubernetes에 EFK(Elasticsearch, Fluent bit, Kibana) 구성 장점

1. 자동 확장성: Kubernetes의 자동 확장 기능을 통해 ELK 스택이 증가하는 로그 데이터를 효과적으로 처리할 수 있습니다.

2. 고가용성: Kubernetes의 내장된 복구 및 재시작 기능으로 ELK 스택의 가용성을 높일 수 있습니다.

3. 중앙 집중식 로그 관리: 분산된 애플리케이션의 로그를 중앙에서 수집하고 분석하여 문제 해결과 모니터링을 효율적으로 할 수 있습니다.

4. 유연한 배포: Helm 차트를 사용해 ELK 스택을 손쉽게 배포하고 관리할 수 있습니다.

5. 보안: Kubernetes의 네임스페이스와 RBAC(Role-Based Access Control)를 통해 로그 데이터의 보안을 강화할 수 있습니다.

Kubernetes EFK 설치 사전 요구 사항

  1. Amazon EKS 클러스터가 이미 설정되어 있어야 합니다.
  2. kubectl이 클러스터에 대해 구성되어 있어야 합니다.

1단계: Elasticsearch 설치

Kubernetes EFK 설치 첫번째 먼저 Elasticsearch를 설치하겠습니다. Elasticsearch는 로그 데이터를 저장하는 데 사용됩니다.

es-sts.yaml

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: es-cluster
spec:
  serviceName: elasticsearch
  replicas: 3
  selector:
    matchLabels:
      app: elasticsearch
  template:
    metadata:
      labels:
        app: elasticsearch
    spec:
      containers:
      - name: elasticsearch
        image: docker.elastic.co/elasticsearch/elasticsearch:7.5.0
        resources:
            limits:
              cpu: 1000m
            requests:
              cpu: 100m
        ports:
        - containerPort: 9200
          name: rest
          protocol: TCP
        - containerPort: 9300
          name: inter-node
          protocol: TCP
        volumeMounts:
        - name: data
          mountPath: /usr/share/elasticsearch/data
        env:
          - name: cluster.name
            value: k8s-logs
          - name: node.name
            valueFrom:
              fieldRef:
                fieldPath: metadata.name
          - name: discovery.seed_hosts
            value: "es-cluster-0.elasticsearch,es-cluster-1.elasticsearch,es-cluster-2.elasticsearch"
          - name: cluster.initial_master_nodes
            value: "es-cluster-0,es-cluster-1,es-cluster-2"
          - name: ES_JAVA_OPTS
            value: "-Xms512m -Xmx512m"
      initContainers:
      - name: fix-permissions
        image: busybox
        command: ["sh", "-c", "chown -R 1000:1000 /usr/share/elasticsearch/data"]
        securityContext:
          privileged: true
        volumeMounts:
        - name: data
          mountPath: /usr/share/elasticsearch/data
      - name: increase-vm-max-map
        image: busybox
        command: ["sysctl", "-w", "vm.max_map_count=262144"]
        securityContext:
          privileged: true
      - name: increase-fd-ulimit
        image: busybox
        command: ["sh", "-c", "ulimit -n 65536"]
        securityContext:
          privileged: true
  volumeClaimTemplates:
  - metadata:
      name: data
      labels:
        app: elasticsearch
    spec:
      accessModes: [ "ReadWriteOnce" ]
      # storageClassName: ""
      resources:
        requests:
          storage: 3Gi


설치 : kubectl create -f es-sts.yaml

es-svc.yaml

apiVersion: v1
kind: Service
metadata:
  name: elasticsearch
  labels:
    app: elasticsearch
spec:
  selector:
    app: elasticsearch
  clusterIP: None
  ports:
    - port: 9200
      name: rest
    - port: 9300
      name: inter-node


설치 : create -f es-svc.yaml

2단계: Kibana 설치

Kubernetes EFK 설치 두번째, Kibana는 Elasticsearch의 데이터를 시각화하는 데 사용됩니다.

kibana-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: kibana
  labels:
    app: kibana
spec:
  replicas: 1
  selector:
    matchLabels:
      app: kibana
  template:
    metadata:
      labels:
        app: kibana
    spec:
      containers:
      - name: kibana
        image: docker.elastic.co/kibana/kibana:7.5.0
        resources:
          limits:
            cpu: 1000m
          requests:
            cpu: 100m
        env:
          - name: ELASTICSEARCH_URL
            value: http://elasticsearch:9200
        ports:
        - containerPort: 5601

설치 : kubectl create -f kibana-deployment.yaml

kibana-svc.yaml

apiVersion: v1
kind: Service
metadata:
  name: kibana-np
spec:
  selector:
    app: kibana
  type: LoadBalancer
  ports:
    - port: 8080
      targetPort: 5601


kubectl create -f kibana-svc.yaml

3단계: Fluent Bit 설정 확인 및 테스트

Kubernetes EFK 설치 세번째

  1. Fluent Bit Config Map 설정을 확인하여 HOST를 수정해 줍니다.

kubectl edit configmap fluent-bit -n logging

...
Host              elasticsearch.default.svc.cluster.local
...

Kubernetes EFK 구축 연동 3가지 OpenSearch

결론

이제 Amazon EKS 클러스터에서 EFK 스택이 성공적으로 설정되었습니다. Fluent Bit이 컨테이너 로그를 수집하여 Elasticsearch에 저장하고, Kibana를 통해 로그 데이터를 시각화할 수 있습니다. 이 스택은 애플리케이션의 성능 모니터링과 문제 해결을 위한 강력한 도구입니다.

이 블로그가 도움이 되셨기를 바랍니다. EFK 스택에 대해 궁금한 점이 있으면 언제든지 문의해 주세요!

참고 글 (Setup EFK Stack on Amazon EKS cluster)

사이트방문

다른 IT정보는 아래 클릭

Kubernetes 로드밸런서 파드 연결 503 에러