Kubernetes EFK 설치 하는 3가지 방법
EFK (Elasticsearch, Fluent Bit, Kibana)는 로그 저장, 시각화하는 데 강력한 도구 입니다. 다음에서 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 설치 사전 요구 사항
- Amazon EKS 클러스터가 이미 설정되어 있어야 합니다.
- 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 설치 세번째
- 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 스택에 대해 궁금한 점이 있으면 언제든지 문의해 주세요!