Kibana도 Fluentd와 마찬가지로 상태를 유지할 필요가 없다. 따라서 Statefulset으로는 배포하지 않고 Deployment로 배포한다. 이유는 Fluentd와는 달리 각 노드에 균등하게 해당 서비스가 올라갈 필요는 없기 때문이다.
Service
# Kibana의 대시보드에 접근해서 다양한 데이터를 시각화를 해야하기 때문에 LoadBalancer로 노출시킨다.
Deployment
> kibana-deploy.yaml
# Kibana에 접근가능한 외부 IP 노출
apiVersion: v1
kind: Service
metadata:
name: kibana
namespace: efk-stack
labels:
app: kibana
spec:
ports:
- port: 5601
selector:
app: kibana
type: LoadBalancer
---
# Kibana 배포
apiVersion: apps/v1
kind: Deployment
metadata:
name: kibana
namespace: efk-stack
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.10.1
resources:
limits:
cpu: 1000m
requests:
cpu: 100m
env:
- name: ELASTICSEARCH_HOSTS
value: http://elasticsearch:9200
ports:
- containerPort: 5601
ELASTICSEARCH_HOSTS 를 사용하기 시작함. 따라서 이전버전에서 사용하던 ELASTICSEARCH_URL을 사용하면 'Kibana server is not ready yet' 이라는 문구가 출력된다.배포가 되었으면 모든 리소스가 배포되었는지 확인하자.
> k get deployments.apps -n efk-stack
NAME READY UP-TO-DATE AVAILABLE AGE
kibana 1/1 1 1 29m
> k get pod -n efk-stack
NAME READY STATUS RESTARTS AGE
fluentd-4hfwj 1/1 Running 0 41m
fluentd-knrrw 1/1 Running 0 41m
kibana-59d8858b66-dd6f2 1/1 Running 0 29m
shin-es-0 1/1 Running 0 45m
shin-es-1 1/1 Running 0 44m
shin-es-2 1/1 Running 0 44m
# 프로비저닝 된 로드밸런서
> k get svc -n efk-stack
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
elasticsearch ClusterIP 10.100.90.64 <none> 9200/TCP,9300/TCP 43m
kibana LoadBalancer 10.100.58.246 aef640133d80a4909817fec9a29e1478-1291526549.ap-northeast-2.elb.amazonaws.com 5601:31662/TCP 27m
이제 프로비저닝 된 로드밸런서의 주소로 Kibana로 접근해보자 포트는 5601이다.
aef640133d80a4909817fec9a29e1478-1291526549.ap-northeast-2.elb.amazonaws.com:5601
접속이 잘 되는모습이다. 이제 다음장에서는 EFK를 실제 프로덕션 환경에서는 어떻게 사용하고 있는지 직접 해당되는 메트릭값들을 설정해보겠습니다. ^^*