Kali ini kita akan membahas cara install Elasticsearch dan Kibana di Kubernetes. Ada banyak cluster yang bisa digunakan di berbagai cloud provider, untuk kebutuhan lab bisa menggunakan Minikube yang mudah dan sama seperti managed kubernetes yang ditawarkan di cloud.
Ditutorial ini yang digunakan adalah software berikut:
1. Minikube (v1.21.0)
2. Docker (20.10.7)
3. Elasticsearch (7.13.2)
4. Kibana (7.13.2)
5. kubectl
Cara install minikube dan docker bisa dilihat pada tutorial ini.
Buat satu namespace baru sebagai tempat meletakkan elasticsearch, mari kita namai jaranguda.
kubectl create namespace jaranguda
set namespace tersebut sebagai default
kubectl config set-context minikube --namespace=jaranguda
dengan mengganti default namespace tidak perlu menambahkan -n jaranguda
setiap melakukan deploy.
Untuk project ini kita buat folder tempat menyimpan semua konfigurasi yang digunakan.
mkdir elastic-stack
1. Elasticsearch
Yang pertama akan kita install adalah Elasticsearch, buat file elasticsearch.yaml
yang berisi
apiVersion: apps/v1 kind: Deployment metadata: name: elasticsearch spec: selector: matchLabels: component: elasticsearch template: metadata: labels: component: elasticsearch spec: containers: - name: elasticsearch image: docker.elastic.co/elasticsearch/elasticsearch:7.13.3 env: - name: discovery.type value: single-node ports: - containerPort: 9200 name: http protocol: TCP resources: limits: cpu: 500m memory: 2Gi requests: cpu: 500m memory: 2Gi --- apiVersion: v1 kind: Service metadata: name: elasticsearch labels: service: elasticsearch spec: type: NodePort selector: component: elasticsearch ports: - port: 9200 targetPort: 9200
Variable discovery.type single-node
digunakan untuk memberitahu Elasticsearch kita hanya menggunakan satu node. Informasi ini didapat dari official Docker Elasticsearch
Deployment : digunakan untuk membuat pod
Service: untuk mengekspose service, agar bisa diakses dari network. Disini agar bisa diakses dari komputer
Deploy elasticsearch ke kubernetes
kubectl apply -f elasticsearch.yaml
Cek service dan pod yang baru dibuat
kubectl get pod,services # output NAME READY STATUS RESTARTS AGE pod/elasticsearch-cff64d4d-wxpnc 1/1 Running 0 2m4s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/elasticsearch NodePort 10.101.198.249 <none> 9200:32599/TCP 2m4s
Untuk bisa mengakses elasticsearch dari komputer anda, panggil minikube service untuk mendapatkan IP address beserta portnya
minikube service --url elasticsearch -n jaranguda # output http://192.168.49.2:31546
buka di browser anda http://192.168.49.2:31546
2. Kibana
Pasangan sejati Elasticsearch adalah kibana, yang selalu muncul disetiap berdampingan dengan Elasticsearc. Kibana digunakan untuk menampilkan grafik dan query data dari elasticsearch, dan merupakan tool yang banyak digunakan DevOps ataupun Site Reliability Engineer (SRE)
Buat file kibana.yaml lalu copy paste baris dibawah ini
apiVersion: apps/v1 kind: Deployment metadata: name: kibana spec: selector: matchLabels: run: kibana template: metadata: labels: run: kibana spec: containers: - name: kibana image: docker.elastic.co/kibana/kibana:7.13.2 env: - name: ELASTICSEARCH_URL value: "elasticsearch.jaranguda" - name: XPACK_SECURITY_ENABLED value: "true" ports: - containerPort: 5601 name: http protocol: TCP --- apiVersion: v1 kind: Service metadata: name: kibana labels: service: kibana spec: type: NodePort selector: run: kibana ports: - port: 5601 targetPort: 5601
Bagian yang perlu diperhatikan adalah elasticsearch.jaranguda, bagian ini berarti service yang bernama elasticsearch yang berada di namespace jaranguda. Bila anda menggunakan namespace yang berbeda, sesuaikan nilainya disini.
Deploy kibana ke kubernetes
kubectl apply -f kibana.yaml
Cek pod dan service yang baru dibuat
$ kubectl get pod,service NAME READY STATUS RESTARTS AGE pod/elasticsearch-7766cc5bf9-d6xbk 1/1 Running 0 24m pod/kibana-79cf5b4c79-chswv 1/1 Running 0 11s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/elasticsearch NodePort 10.108.235.219 <none> 9200:31546/TCP 24m service/kibana NodePort 10.96.146.212 <none> 5601:31014/TCP 11s
Gunakan cara yang sama dengan elasticsearch untuk mendapatkan IP:Port kibana yang bisa diakses dari komputer
minikube service --url kibana -n jaranguda # output http://192.168.49.2:31546
Testing Data
Untuk mencoba instalasi Kibana dan Elasticsearch, kita akan membuat index tutorial-elasticsearch dengan data dummy.
Buka console di kibana atau lewat link IP:PORT/app/dev_tools
Di console masukkan
POST /tutorial-elasticsearch/situs { "domain": "jaranguda.com", "author": "jaranguda", "title": "Belajar Kibana Elasticsearch" }
klik tanda panah ke samping untuk menjalankan query tersebut.
Buka menu Stack Management
-> Index Patterns
-> Index Patterns
click Create Index Patterns
klik Next Step, lalu akhiri dengan klik Create Index Patterns
Buka menu Discover, data log yang tadi dibuat harusnya sudah muncul