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