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:
- Membuat pods dari file yaml
- Menentukan resource (RAM dan CPU) untuk pods
- Login ke dalam pods
- Testing koneksi antar pods, apakah bisa saling terhubung?
- 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.