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.
The difference between a replica set and a replication controller is that a replica set supports set-based selector requirements whereas a replication controller only supports equality-based selector requirements.
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.
apiVersion: v1
kind: ReplicationController
metadata:
name: myapp-rc
labels:
app: myapp
type: front-end
spec:
template:
metadata:
name: myapp-pod
labels:
app: myapp
type: front-end
spec:
containers:
- name: nginx-container
image: nginx
replicas: 3
Kita terapkan Replica Controller tersebut dengan perintah dibawh ini.
➜ kubectl create -f code/replicasets/rc-definition.yaml
replicationcontroller/myapp-rc created
Kita bisa lihat Replica kita sudah berjalan atau tidak dengan perintah dibawah ini.
➜ kubectl get rc
NAME DESIRED CURRENT READY AGE
myapp-rc 3 3 3 28s
Dari 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.
➜ kubectl get pods
NAME READY STATUS RESTARTS AGE
myapp-rc-j5zdv 1/1 Running 0 2m52s
myapp-rc-pxqcb 1/1 Running 0 2m52s
myapp-rc-rrcrj 1/1 Running 0 2m52s
Terlihat 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.
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: myapp-replicaset
labels:
app: myapp
type: front-end
spec:
template:
metadata:
name: myapp-pod
labels:
app: myapp
type: front-end
spec:
containers:
- name: nginx-container
image: nginx
replicas: 3
selector:
matchLabels:
type: front-end
Terapkan ReplicaSet pada file tersebut dengan perintah
➜ kubectl create -f code/replicasets/replicaset-definition.yaml
replicaset.apps/myapp-replicaset created
lalu lihat apakah sudah berjalan atau tidak dengan cara perintah ini.
➜ kubectl get replicaset
NAME DESIRED CURRENT READY AGE
myapp-replicaset 3 3 3 41s
Dan kita lihat juga PODs yang sedang berjalan dengan perintah ini.
➜ kubectl get pods
NAME READY STATUS RESTARTS AGE
myapp-replicaset-2cglx 1/1 Running 0 80s
myapp-replicaset-mb4z8 1/1 Running 0 80s
myapp-replicaset-rrqc2 1/1 Running 0 80s
Jika kita ingin Scale
ReplicaSet tersebut ada 2 cara yaitu
Scale dengan edit YAML file misalkan ingin
Scale
menjadi 6 maka kita ubah seperti ini.apiVersion: apps/v1 kind: ReplicaSet metadata: name: myapp-replicaset labels: app: myapp type: front-end spec: template: metadata: name: myapp-pod labels: app: myapp type: front-end spec: containers: - name: nginx-container image: nginx replicas: 6 selector: matchLabels: type: front-end
Lalu jalankan perintah ini
➜ kubectl replace -f code/replicasets/replicaset-definition.yaml replicaset.apps/myapp-replicaset replaced
Lihat ReplicaSet dan Pods denga perintah
➜ kubectl get replicaset,pod NAME DESIRED CURRENT READY AGE replicaset.apps/myapp-replicaset 6 6 6 5m55s NAME READY STATUS RESTARTS AGE pod/myapp-replicaset-2cglx 1/1 Running 0 5m55s pod/myapp-replicaset-h8w9d 1/1 Running 0 101s pod/myapp-replicaset-mb4z8 1/1 Running 0 5m55s pod/myapp-replicaset-ppr52 1/1 Running 0 101s pod/myapp-replicaset-rbhlp 1/1 Running 0 101s pod/myapp-replicaset-rrqc2 1/1 Running 0 5m55s
Bisa terlihat diatas PODs sudah berubah jumlahnya menjadi 6.
Scale secara langsung dengan perintah terminal
➜ kubectl scale --replicas=8 -f code/replicasets/replicaset-definition.yaml replicaset.apps/myapp-replicaset scaled
Maka akan terlihat pada replicaset dan PODs dengan jumlah 8
➜ kubectl get replicaset,pod NAME DESIRED CURRENT READY AGE replicaset.apps/myapp-replicaset 8 8 8 8m40s NAME READY STATUS RESTARTS AGE pod/myapp-replicaset-2cglx 1/1 Running 0 8m40s pod/myapp-replicaset-h8w9d 1/1 Running 0 4m26s pod/myapp-replicaset-lxfrf 1/1 Running 0 22s pod/myapp-replicaset-mb4z8 1/1 Running 0 8m40s pod/myapp-replicaset-ppr52 1/1 Running 0 4m26s pod/myapp-replicaset-rbhlp 1/1 Running 0 4m26s pod/myapp-replicaset-rrqc2 1/1 Running 0 8m40s pod/myapp-replicaset-znr7n 1/1 Running 0 22s
atau bisa pakai alternatif perintah terminal seperti ini
➜ 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
➜ kubectl delete pod myapp-replicaset-2cglx myapp-replicaset-h8w9d
pod "myapp-replicaset-2cglx" deleted
pod "myapp-replicaset-h8w9d" deleted
Maka akan terlihat PODs baru yang akan berjalan kita bisa melihatnya dengan perintah
➜ kubectl get replicaset,pod
NAME DESIRED CURRENT READY AGE
replicaset.apps/myapp-replicaset 8 8 7 25m
NAME READY STATUS RESTARTS AGE
pod/myapp-replicaset-l568n 1/1 Running 0 33s
pod/myapp-replicaset-lxfrf 1/1 Running 0 17m
pod/myapp-replicaset-mb4z8 1/1 Running 0 25m
pod/myapp-replicaset-ppr52 1/1 Running 0 21m
pod/myapp-replicaset-rbhlp 1/1 Running 0 21m
pod/myapp-replicaset-rrqc2 1/1 Running 0 25m
pod/myapp-replicaset-t9pg5 0/1 ContainerCreating 0 2s
pod/myapp-replicaset-znr7n 1/1 Running 0 17m
Bisa kita lihat ada PODs yang memiliki status ContainerCreating
tanda bahwa POD ini baru dibuat.