Replica Controller
Replica Controller adalah mekanisme yang digunakan untuk melakukan replikasi aplikasi dan kita bisa handle ketika aplikasi kita terdapat failure atau melakukan inisialisasi POD yang failed. Maka dengan Replica controller ini kita bisa mengatur scale suatu aplikasi kita yang sedang berjalan.
Misalkan, ketika satu failed maka aplikasi lain yang sedang berjalan akan tetap berjalan diatur oleh Replica Controller pada Cluster Kubernetes.
Lalu ada yang disebut Replica Controller dan ada juga Replica Set, apa perbedaannya? Replica Set adalah jalan untuk melakukan atau membuat konfigurasi replication.
Membuat ReplicaSet
Setelah kita tahu istilah-istilah tersebut, selanjutnya kita akan mencoba mengimplementasikan-nya.
Pertama kita buat YAML file rc-definition.yaml lalu isi file tersebut dengan kode dibawah ini.
1apiVersion: v1
2kind: ReplicationController
3metadata:
4 name: myapp-rc
5 labels:
6 app: myapp
7 type: front-end
8spec:
9 template:
10 metadata:
11 name: myapp-pod
12 labels:
13 app: myapp
14 type: front-end
15 spec:
16 containers:
17 - name: nginx-container
18 image: nginx
19 replicas: 3Kita terapkan Replica Controller tersebut dengan perintah dibawh ini.
1➜ kubectl create -f code/replicasets/rc-definition.yaml
2replicationcontroller/myapp-rc createdKita bisa lihat Replica kita sudah berjalan atau tidak dengan perintah dibawah ini.
1➜ kubectl get rc
2NAME DESIRED CURRENT READY AGE
3myapp-rc 3 3 3 28sDari tampilan dibawah ini maka akan terlihat ada 3 PODs yang sedang berjalan. Untuk memastikan POD yang berjalan sesuai maka bisa kita lihat dengan perintah dibawah ini.
1➜ kubectl get pods
2NAME READY STATUS RESTARTS AGE
3myapp-rc-j5zdv 1/1 Running 0 2m52s
4myapp-rc-pxqcb 1/1 Running 0 2m52s
5myapp-rc-rrcrj 1/1 Running 0 2m52sTerlihat ada 3 PODs yang sedang berjalan dengan nama prefix myapp-rc dan sisanya di generate oleh sistem.
Membuat Replica Set
Kita buat YAML file replicaset-definition.yaml lalu isi file tersebut dengan kode dibawah ini.
1apiVersion: apps/v1
2kind: ReplicaSet
3metadata:
4 name: myapp-replicaset
5 labels:
6 app: myapp
7 type: front-end
8spec:
9 template:
10 metadata:
11 name: myapp-pod
12 labels:
13 app: myapp
14 type: front-end
15 spec:
16 containers:
17 - name: nginx-container
18 image: nginx
19 replicas: 3
20 selector:
21 matchLabels:
22 type: front-endTerapkan ReplicaSet pada file tersebut dengan perintah
1➜ kubectl create -f code/replicasets/replicaset-definition.yaml
2replicaset.apps/myapp-replicaset createdlalu lihat apakah sudah berjalan atau tidak dengan cara perintah ini.
1➜ kubectl get replicaset
2NAME DESIRED CURRENT READY AGE
3myapp-replicaset 3 3 3 41sDan kita lihat juga PODs yang sedang berjalan dengan perintah ini.
1➜ kubectl get pods
2NAME READY STATUS RESTARTS AGE
3myapp-replicaset-2cglx 1/1 Running 0 80s
4myapp-replicaset-mb4z8 1/1 Running 0 80s
5myapp-replicaset-rrqc2 1/1 Running 0 80sJika kita ingin Scale ReplicaSet tersebut ada 2 cara yaitu
Scale dengan edit YAML file misalkan ingin
Scalemenjadi 6 maka kita ubah seperti ini.1apiVersion: apps/v1 2kind: ReplicaSet 3metadata: 4name: myapp-replicaset 5labels: 6 app: myapp 7 type: front-end 8spec: 9template: 10 metadata: 11 name: myapp-pod 12 labels: 13 app: myapp 14 type: front-end 15 spec: 16 containers: 17 - name: nginx-container 18 image: nginx 19replicas: 6 20selector: 21 matchLabels: 22 type: front-endLalu jalankan perintah ini
1➜ kubectl replace -f code/replicasets/replicaset-definition.yaml 2replicaset.apps/myapp-replicaset replacedLihat ReplicaSet dan Pods denga perintah
1➜ kubectl get replicaset,pod 2NAME DESIRED CURRENT READY AGE 3replicaset.apps/myapp-replicaset 6 6 6 5m55s 4 5NAME READY STATUS RESTARTS AGE 6pod/myapp-replicaset-2cglx 1/1 Running 0 5m55s 7pod/myapp-replicaset-h8w9d 1/1 Running 0 101s 8pod/myapp-replicaset-mb4z8 1/1 Running 0 5m55s 9pod/myapp-replicaset-ppr52 1/1 Running 0 101s 10pod/myapp-replicaset-rbhlp 1/1 Running 0 101s 11pod/myapp-replicaset-rrqc2 1/1 Running 0 5m55sBisa terlihat diatas PODs sudah berubah jumlahnya menjadi 6.
Scale secara langsung dengan perintah terminal
1➜ kubectl scale --replicas=8 -f code/replicasets/replicaset-definition.yaml 2replicaset.apps/myapp-replicaset scaledMaka akan terlihat pada replicaset dan PODs dengan jumlah 8
1➜ kubectl get replicaset,pod 2NAME DESIRED CURRENT READY AGE 3replicaset.apps/myapp-replicaset 8 8 8 8m40s 4 5NAME READY STATUS RESTARTS AGE 6pod/myapp-replicaset-2cglx 1/1 Running 0 8m40s 7pod/myapp-replicaset-h8w9d 1/1 Running 0 4m26s 8pod/myapp-replicaset-lxfrf 1/1 Running 0 22s 9pod/myapp-replicaset-mb4z8 1/1 Running 0 8m40s 10pod/myapp-replicaset-ppr52 1/1 Running 0 4m26s 11pod/myapp-replicaset-rbhlp 1/1 Running 0 4m26s 12pod/myapp-replicaset-rrqc2 1/1 Running 0 8m40s 13pod/myapp-replicaset-znr7n 1/1 Running 0 22satau bisa pakai alternatif perintah terminal seperti ini
1➜ kubectl scale --replicas=8 replicaset myapp-replicaset
Uniknya, dengan ReplicaSet ini, jika kita menghapus salah satu pods yang ada maka nanti akan di scale ulang PODs sampai memenuhi scale yang sudah ditentukan, misalkan kita sudah punya myapp-relicaset dengan jumlah 8 PODs. Kita coba hapus 2 PODs dengan perintah ini
1➜ kubectl delete pod myapp-replicaset-2cglx myapp-replicaset-h8w9d
2pod "myapp-replicaset-2cglx" deleted
3pod "myapp-replicaset-h8w9d" deletedMaka akan terlihat PODs baru yang akan berjalan kita bisa melihatnya dengan perintah
1➜ kubectl get replicaset,pod
2NAME DESIRED CURRENT READY AGE
3replicaset.apps/myapp-replicaset 8 8 7 25m
4
5NAME READY STATUS RESTARTS AGE
6pod/myapp-replicaset-l568n 1/1 Running 0 33s
7pod/myapp-replicaset-lxfrf 1/1 Running 0 17m
8pod/myapp-replicaset-mb4z8 1/1 Running 0 25m
9pod/myapp-replicaset-ppr52 1/1 Running 0 21m
10pod/myapp-replicaset-rbhlp 1/1 Running 0 21m
11pod/myapp-replicaset-rrqc2 1/1 Running 0 25m
12pod/myapp-replicaset-t9pg5 0/1 ContainerCreating 0 2s
13pod/myapp-replicaset-znr7n 1/1 Running 0 17mBisa kita lihat ada PODs yang memiliki status ContainerCreating tanda bahwa POD ini baru dibuat.