0

Belajar Kubernetes di EC2 – Membuat replica pods dan service clusterIP untuk deployment (part 3)

Belajar Kubernetes di EC2

Belajar kubernetes di EC2 membuat replica dan service clusterIP. Tutorial ini lanjutan dari part 2: Belajar Kubernetes – Membuat pods, test koneksi antar pod dan membuat deployment.

Sebelumnya kita sudah belajar menggunakan kind: Deployment untuk menentukan resource CPU dan RAM pada pod. Kali ini kita akan belajar membuat replica pods dan service clusterIP untuk deployment.


Daftar Isi:

Apa itu Replica?

Jadi apa itu replica? replica adalah cara untuk menduplikasi pods menjadi beberapa pods. Tujuannya adalah supaya aplikasi kita memiliki backup dan ketersediaan/uptime yang tinggi. Berikut adalah perbandingan tanpa replica dan menggunakan replica:

#Tanpa Replica:

Kubernetes di EC2 - membuat replica dan service clusterIP


Misal diatas kita punya 1 pods saja, dan suatu ketika traffic aplikasi kita tinggi dan membuat aplikasinya nge-crash/hang, maka aplikasi kita tidak bisa diakses oleh user lagi.


#Menggunakan Replica:

Kubernetes di EC2 - membuat replica dan service clusterIP

Dengan replica, kita bisa menduplikasi podnya menjadi 3 dan didepannya ditambahkan load balancing (service), maka ketika ada request masuk dari user, jika 1 pods down, masih ada 2 pods lagi yang masih up. Service akan memforward requestnya ke pod yang masih up tersebut. Jadi disini service dipadukan sama replica agar bisa menghasilkan aplikasi yang high availability

Oke, kita akan praktek satu-satu, pertama kita akan membuat replica dan kedua service.

Membuat Replica

Buka kembali file pods1.yaml yang sebelumnya sudah kita buat pada part 2, kita akan tambahkan field replicas ke dalam field spec

apiVersion: apps/v1
kind: Deployment
metadata:
        name: pods1
spec:
        replicas: 3
        selector:
                matchLabels:
                        app: pods1
        template:
                metadata:
                        labels:
                                app: pods1
                spec:
                        containers:
                        - name: pods1-nginx
                          image: nginx:latest
                          ports:
                          - containerPort: 80
                          resources:
                                requests:
                                        memory: 120Mi
                                        cpu: 100m
                                limits:
                                        memory: 120Mi
                                        cpu: 110m

Jadi cukup simple, tinggal tambahkan 1 baris saja replicas: 3 , artinya kita akan membuat 3 replica pods.


Setelah itu kita apply lagi pods1.yaml

kubectl apply -f pods1.yaml

Kemudian kita cek podsnya apakah sudah ter-replica:

kubectl get pods -o wide
belajar kubernetes di EC2

Ok bagus, podsnya sudah ter-replica sebanyak 3 pods.


Sekarang kita masuk ke masing-masing podsnya, kita akan buat index.html yang berbeda untuk setiap podsnya (supaya nanti pas kita test menggunakan service (as load balancer), hasil responsenya akan berbeda). Commandnya adalah sebagai berikut

kubectl exec -it pods1-65f7d77bb7-6h66d bash

Yang saya bold tebal adalah nama podsnya, kalian tinggal sesuaikan saja dengan nama pods kalian.

Kemudian update konten pada file index.html

echo  'pods1-A' > /usr/share/nginx/html/index.html


Lakukan hal yang sama untuk replica kedua dan ketiga.

Isi konten index.html pada replica kedua dan ketiga adalah pods1-B dan pods1-C.

belajar kubernetes di EC2

Oke untuk replica sudah cukup, sekarang kita lanjut membuat service

Membuat Service ClusterIP

Seperti yang sudah kita tahu sebelumnya, service bertindak sebagai load balancer didepan pods.

Jika ada pods yang down, traffic akan dialihkan ke pods yang masih up.

Selain itu fungsi lain dari service adalah untuk mengekspos pods agar bisa diakses dari luar pods, jadi pods bisa diakses dari clusternya sendiri maupun dari public/internet dengan meng-hit si service. Ada beberapa cara mengekspos pods melalui service, yaitu:

  • clusterIP = service hanya bisa diakses dari dalam cluster
  • nodePort = service yang mengekspos port dari setiap node dan dapat diakses dari internet melalui IP public dan port nodenya (contoh: IP 112.22.22.33:8080)
  • loadBalancer = service bisa diakses dari internet melalui loadbalancer penyedia layanan cloud, seperti AWS, GCP, Azure, dsb.

Ok, disini kita akan menggunakan clusterIP dulu ya, artinya service hanya bisa diakses dari dalam cluster.

Buat sebuah file svc-pods1.yaml

apiVersion: v1
kind: Service
metadata:
        name: svc-pods1
spec:
        selector:
                app: pods1
        ports:
                - name: http
                  port: 80
        type: ClusterIP

Pada konfigurasi diatas kita membuat service dengan kind: Service kemudian kita panggil podsnya menggunakan selector, app: pods1 adalah labels pods yang sudah kita set pada file pods1.yaml (part 2 sebelumnya). Kemudian kita expose port 80, dan karena tipenya clusterIP maka port 80 hanya bisa diakses dari dalam cluster.


Kemudian apply konfigurasinya:

kubectl apply -f svc-pods1.yaml
Kubernetes di EC2 - membuat replica dan service clusterIP

Oke sekarang tinggal testing saja, kita akan hit podsny melalui service tersebut. Caranya kita masuk ke pods lain, misal pods1 (tanpa akhiran -65f7dxxxxxx)

Masuk ke pods1 dengan command berikut:

kubectl exec -it pods1 bash

Kemudian kita coba hit servicenya

curl svc-pods1.default.svc.cluster.local:80

Keterangan:


svc-pods1 = nama servicenya

default = nama namespacenya (kita menggunakan namespace default sejauh ini, kita akan bahas ini dipart2 selanjutnya)

svc.cluster.local = format dari kubernetesnya

80 = port yang diekspos keluar

Hasilnya:

Kubernetes di EC2 - membuat replica dan service clusterIP

Kalau kita lihat, response akan berbeda-beda setiap hit, pods1-B, pods1-C …dst pods1-A, pods1-C


Artinya replica dan service yang sudah kita buat berfungsi dengan baik.

—-

Oke, sejauh ini kita sudah berhasil membuat replica dan service, di part 4 selanjutnya kita akan belajar lebih jauh mengenai service (nodePort, loadBalancer)

Ambar Hasbiyatmoko

Hello, I'm web developer. Passionate about programming, web server, and networking.

Leave a Reply

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

Time limit is exhausted. Please reload the CAPTCHA.