0

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

membuat pod di kubernetes cluster


Di part 1 sebelumnya kita sudah punya cluster dengan total 3 node didalamnya, sekarang kita akan coba membuat pod di kubernetes cluster sebanyak 3 pod dan mengetest koneksinya.

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. Jumlah pods tergantung berapa banyak kita definisikan. Di dalam pods itu terdiri dari container (jumlahnya bisa lebih dari 1) dan didalam container berisi aplikasi yang kita deploy. Untuk lebih jelasnya mengenai pods kalian bisa baca di website resminya kubernetes.


Oke jadi ditutorial ini saya bagi menjadi beberapa bagian:

  1. Membuat pods
  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


Lets get started..

1. Membuat pods

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
membuat pod di kubernetes cluster

Lalu untuk mengecek podnya apakah sudah running ketikkan command berikut:

kubectl get pods -o wide 
membuat pod di kubernetes cluster

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 otomatis akan menempatkan pods baru ke dalam 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
membuat pod di kubernetes cluster

Cek lagi podsnya apakah sudah running

kubectl get pods -o wide
membuat pod di kubernetes cluster

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


Kemudian kita harus mendelete pods1 nya terlebih dahulu (karena kalau tidak akan error, 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 Requestnya berhasil diset di 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, baru setelah itu kita melakukan kubectl apply pods1.yaml lagi, dan setelah itu ‘pod baru’ terbuat. Cara ini kurang bagus karena setiap ada perubahan kita harus mendelete pods lamanya 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 template menggunakan field selector.matchLabels.


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 pods lamanya akan dihapus, digantikan dengan yang baru secara otomatis (dengan nama yang berbeda)

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



Oke kita sudah belajar membuat pod di kubernetes cluster. Di part 3 nanti kita akan belajar lebih jauh tentang deployment, yaitu replica dan service.

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.