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
akses elasticsearch

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

tampilan kibana di elasticsearch

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.
kibana console

Buka menu Stack Management -> Index Patterns -> Index Patterns
click Create Index Patterns
create index patterns kibana

klik Next Step, lalu akhiri dengan klik Create Index Patterns

Buka menu Discover, data log yang tadi dibuat harusnya sudah muncul
elasticsearch logs from kibana

Leave a comment

Your email address will not be published. Required fields are marked *