0

Belajar Kubernetes – Membuat pods, test koneksi antar pod dan membuat deployment (part 2)

Pastikan kalian sudah membaca part 1 nya terlebih dahulu.

Ok di part 1 sebelumnya kita sudah punya cluster dengan total 3 node didalamnya, sekarang kita akan coba membuat 3 pods, dan coba mengaksesnya dari dalam cluster.

Buat yang belum tahu apa itu pods, jadi pods adalah unit komputasi terkecil dari kubernetes dimana aplikasi yang kita deploy akan berada didalamnya. Detailnya seperti berikut:

Jadi pods itu ada didalam worker node, dan didalam 1 pods itu bisa terdiri lebih dari 1 container yang berisi masing-masing 1 aplikasi.

Singkatnya seperti itu ya, mudah-mudahan paham ya tentang pods, untuk lebih detailnya bisa baca di websitenya kubernetes.

Lanjut ….

Berikut ini step yang akan kita lakukan:

  1. Membuat pods dari file yaml
  2. Menentukan resource (RAM dan CPU) untuk pods
  3. Login ke dalam pods
  4. Testing koneksi antar pods, apakah bisa saling terhubung?
  5. Membuat deployment


Oke lets get started..

1. Membuat pods dari file yaml

Untuk membuat pods, kita harus menuliskan konfigurasinya ke dalam sebuah file yaml. Jadi kita akan buat sebuah file dengan nama pods1.yaml. Login terlebih dahulu ke master node, kita akan menaruh file konfigurasinya disana.

Kita akan buat foldernya terlebih dahulu, lalu masuk ke dalam foldernya

mkdir kubernetes
cd kubernetes

Sekarang kita buat file konfigurasinya

sudo vi pods1.yaml

pods1.yaml

apiVersion: v1
kind: Pod
metadata:
        name: pods1
spec:
        containers:
        - name: pods1-nginx
          image: nginx:latest
          ports:
          - containerPort: 80

Contoh diatas, kita menggunakan image nginx dari public repository docker ya. Bisa dilihat disini.
Kita beri nama podnya dengan nama pods1 dan port yang kita bisa diakses kedalam containernya adalah 80 (http)


Kemudian kita bisa jalankan konfigurasinya menggunakan command berikut:

kubectl apply -f pods1.yaml

Lalu untuk mengecek podnya apakah sudah running ketikkan command berikut:

kubectl get pods -o wide 

Ok nice, statusnya sudah running dan podnya kita dapat IP 10.244.2.2 (IP didalam cluster). Kalian juga bisa lihat podnya ditempatkan dalam worker node 2 (172.31.38.20).


Secara default kubernetes akan otomatis menempatkan pods baru ke node yang masih available, jadi kita tidak perlu repot-report menempatkannya secara manual, semua sudah dihandle otomatis oleh kubernetes.

Oke lanjut, kita akan buat 2 pods lagi dengan konfigurasi yang sama, namun hanya beda nama podsnya saja (pods2.yaml dan pods3.yaml)

pods2.yaml

apiVersion: v1
kind: Pod
metadata:
        name: pods2
spec:
        containers:
        - name: pods2-nginx
          image: nginx:latest
          ports:
          - containerPort: 80

pods3.yaml

apiVersion: v1
kind: Pod
metadata:
        name: pods3
spec:
        containers:
        - name: pods3-nginx
          image: nginx:latest
          ports:
          - containerPort: 80

Kemudian jalankan konfigurasinya

kubectl apply -f pods3.yaml
kubectl apply -f pods2.yaml

Cek lagi podsnya apakah sudah running

kubectl get pods -o wide

Ok good, 2 pods lainnya sudah running dan sekarang berada di node lain yaitu 172.31.11.235 (worker node 1)


2. Menentukan resource (RAM dan CPU) untuk pods

Pada step 1 kita belum menentukan resource RAM dan CPU pada podnya. Pada praktiknya, menentukan resource di pod sangatlah penting, karena kalau tidak dibatasi, pod akan mengambil semua resource yang ada di node.

Untuk membatasi resourcenya, kita bisa tambahkan parameter resources:

pods1.yaml

apiVersion: v1
kind: Pod
metadata:
        name: pods1
spec:
        containers:
        - name: pods1-nginx
          image: nginx:latest
          ports:
          - containerPort: 80
          resources:
                  requests:
                          memory: 180Mi
                          cpu: 100m
                  limits: 
                          memory: 190Mi
                          cpu: 110m

Penjelasan:
memory: 180Mi = sekitar 0.18GB
cpu: 100m = sekitar 0.1CPU


Sebelum menjalankan konfigurasi diatas (kubectl apply pods1.yaml), kita harus mendelete pods1 nya terlebih dahulu (karena kalau tidak akan error, kalian bs cek disini) :

kubectl delete pods pods1

Setelah itu baru apply kembali pods1.yaml

kubectl apply -f pods1.yaml

Sekarang kita bisa lihat detail podsnya:

kubectl describe pods pods1

Limits dan Requestsnya sudah ter-set pada pods1.


3. Login kedalam pods

Kita bisa login ke dalam pods dengan command berikut:

kubectl exec -it pods1 bash

Penjelasan:

exec -it = merupakan command untuk bisa masuk ke terminal dalam podsnya
pods1 = merupakan nama podsnya
bash = command yang akan dijalankan saat login ke podnya


Selanjutnya kita akan mengetest koneksi antar pods, apakah bisa saling terhubung.

4. Testing koneksi antar pods, apakah bisa saling terhubung?

Oke, sekarang kita masih didalam pods1, kita akan coba test koneksi ke pods2 menggunakan curl

curl 10.244.1.3:80


ok koneksi ok, sekarang test koneksi ke pods3

curl 10.244.1.2:80

Oke sip podsnya sudah bisa saling terhubung semua.


5. Membuat deployment

Distep 2 sebelumnya, ketika kita ingin menambahkan parameter resources RAM dan CPU, kita harus mendelete pods lamanya terlebih dahulu, setelah itu baru melakukan apply kubectl apply lagi, baru setelah itu pod barunya terbuat. Cara ini kurang bagus karena setiap ada perubahan kita harus mendelete podsnya dulu.

Kita bisa menggunakan kind: Deployment. Jadi ketika ada perubahan pada file yamlnya, kita tidak perlu mendelete podsnya berulang kali secara manual, kita cukup jalankan saja command kubectl apply, maka pods lamanya akan terdelete otomatis dan tergantikan dengan yang baru.

Kita akan coba mengupdate konfigurasinya menjadi kind: Deployment

pods1.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
        name: pods1
spec:
        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

Yang saya bold diatas adalah konfigurasi deploymentnya, yang garis miring konfigurasi untuk podsnya. Supaya deploymentnya bisa connect ke podsnya, kita link-kan menggunakan labels dari template. Deployment akan mencari labels dengan nama app: pods1 pada templatenya. Jadi fungsi labels disini sangat penting.

Oke sekarang kita tinggal jalankan saja menggunakan apply:

kubectl apply -f pods1.yaml

Kemudian akan tercreate 1 pods lagi dengan nama pod1-xxx

kubectl get pods

Kalau kita ingin merubah konfigurasinya lagi, misal resourcesnya kita naikkan

pods1.yaml

................
                          resources:
                                requests:
                                        memory: 150Mi
                                        cpu: 120m
                                limits:
                                        memory: 180Mi
                                        cpu: 130m

Kita tinggal lakukan apply saja

kubectl apply -f pods1.yaml

Maka podsnya akan dikonfurasi ulang dan podsnya akan digantikan dengan yang baru secara otomatis (dengan nama yang berbeda)

Jadi seperti itu salah satu fungsi Deployment, agar lebih mudah memanage konfigurasi pods.



Di part 3 nanti kita akan belajar lebih jauh tentang deployment, yaitu replica.

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.