A ReplicaSet helps load balance and scale our Application up or down when the demand for it changes. It makes sure the desired number of pods are always running for high availability.
I’m using VS Code on Mac to create the below yaml file.
Create the following yaml file:
apiVersion: apps/v1 kind: ReplicaSet metadata: name: myapp-replicaset labels: app: myapp spec: selector: matchLabels: app: myapp replicas: 3 template: metadata: name: nginx-2 labels: app: myapp spec: containers: - name: nginx image: nginx
The above yaml file has 4 main properties which are apiVersion, kind, metadata and spec. The spec contains the definition for the number of replicas and the containers to be created inside the pods.
Run the following command:
$ kubectl create -f ReplicaSetsDemo.yaml replicaset.apps/myapp-replicaset created
Now let’s check the status of the replicaSet and then the pods:
$ kubectl get replicaset NAME DESIRED CURRENT READY AGE myapp-replicaset 3 3 3 2m29s $ kubectl get pods NAME READY STATUS RESTARTS AGE myapp-replicaset-s7jm7 1/1 Running 0 33s myapp-replicaset-svqvm 1/1 Running 0 33s myapp-replicaset-xnbbq 1/1 Running 0 33s
The above command shows 3 pods created for nginx with the name of the replicaset prefixed. A replicaset ensures that sufficient number of replicas or pods are available at all times.
Now, let’s delete a pod:
$ kubectl delete pod myapp-replicaset-s7jm7 pod "myapp-replicaset-s7jm7" deleted
Check the status of the pods again:
$ kubectl get pods NAME READY STATUS RESTARTS AGE myapp-replicaset-d7f88 1/1 Running 0 36s myapp-replicaset-svqvm 1/1 Running 0 5m53s myapp-replicaset-xnbbq 1/1 Running 0 5m53s
Notice that there are still 3 pods running as one more pod was created to maintain the desired state. Also, if you try to create a pod with the same label app=myapp outside of the replicaset, it’ll still come under the purview of the replicaset we created and will terminate that pod to maintain the desired state of 3 replicas. This is where it differs from a Replication Controller.
Now, let’s edit the replicaset to scale it up as below:
$ kubectl edit replicaset myapp-replicaset
The above command let’s you edit the in-memory configuration file that Kubernetes creates. Search for the replicas section and edit it to 4 using the vi editor commands and save it with wq!
Upon saving you’ll see the output as:
Check the pods status and you’ll see and additional pod created:
$ kubectl get pods NAME READY STATUS RESTARTS AGE myapp-replicaset-d7f88 1/1 Running 0 14m myapp-replicaset-pnlvh 1/1 Running 0 55s myapp-replicaset-svqvm 1/1 Running 0 19m myapp-replicaset-xnbbq 1/1 Running 0 19m
Another way to scale the replicaset is to use the below command and check the status again:
$ kubectl scale replicaset myapp-replicaset --replicas=2 replicaset.apps/myapp-replicaset scaled $ kubectl get pods NAME READY STATUS RESTARTS AGE myapp-replicaset-svqvm 1/1 Running 0 22m myapp-replicaset-xnbbq 1/1 Running 0 22m
Notice that the pods are scaled down to 2 only as other 2 got terminated.