Skip to content
Santekno.com | Level Up Your Engineering Skills
ID
📖 0%
Kubernetes

Memahami Kubernetes Replica Controller dan Replicaset

· 5 mnt baca ·Ihsan Arif

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.

Danger
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.

yml
 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: 3

Kita terapkan Replica Controller tersebut dengan perintah dibawh ini.

bash
1➜ kubectl create -f code/replicasets/rc-definition.yaml
2replicationcontroller/myapp-rc created

Kita bisa lihat Replica kita sudah berjalan atau tidak dengan perintah dibawah ini.

bash
1➜ kubectl get rc
2NAME       DESIRED   CURRENT   READY   AGE
3myapp-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.

bash
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          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.

yml
 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-end

Terapkan ReplicaSet pada file tersebut dengan perintah

bash
1➜ kubectl create -f code/replicasets/replicaset-definition.yaml 
2replicaset.apps/myapp-replicaset created

lalu lihat apakah sudah berjalan atau tidak dengan cara perintah ini.

bash
1➜ kubectl get replicaset
2NAME               DESIRED   CURRENT   READY   AGE
3myapp-replicaset   3         3         3       41s

Dan kita lihat juga PODs yang sedang berjalan dengan perintah ini.

bash
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          80s

Jika kita ingin Scale ReplicaSet tersebut ada 2 cara yaitu

  1. Scale dengan edit YAML file misalkan ingin Scale menjadi 6 maka kita ubah seperti ini.

    yml
     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-end

    Lalu jalankan perintah ini

    bash
    1➜  kubectl replace -f code/replicasets/replicaset-definition.yaml
    2replicaset.apps/myapp-replicaset replaced

    Lihat ReplicaSet dan Pods denga perintah

    bash
     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          5m55s

    Bisa terlihat diatas PODs sudah berubah jumlahnya menjadi 6.

  2. Scale secara langsung dengan perintah terminal

    bash
    1➜  kubectl scale --replicas=8 -f code/replicasets/replicaset-definition.yaml 
    2replicaset.apps/myapp-replicaset scaled

    Maka akan terlihat pada replicaset dan PODs dengan jumlah 8

    bash
     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          22s

    atau bisa pakai alternatif perintah terminal seperti ini

    bash
    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

bash
1➜   kubectl delete pod myapp-replicaset-2cglx myapp-replicaset-h8w9d
2pod "myapp-replicaset-2cglx" deleted
3pod "myapp-replicaset-h8w9d" deleted

Maka akan terlihat PODs baru yang akan berjalan kita bisa melihatnya dengan perintah

bash
 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          17m

Bisa kita lihat ada PODs yang memiliki status ContainerCreating tanda bahwa POD ini baru dibuat.

IH
Ihsan Arif
Backend engineer & penulis di Santekno. Aktif menulis tentang Go, Laravel, dan arsitektur backend modern.
Follow

💬 Komentar