Kubernetes Deployment & ReplicaSet

ustundagsemih

ustundagsemih

Posted on September 15, 2020

Kubernetes Deployment & ReplicaSet

What is a ReplicaSet?

A ReplicaSet's purpose is to maintain a stable set of replica Pods running at any given time. A ReplicaSet ensures that a specified number of pod replicas are running at any given time. We often don't need to create a ReplicaSet directly. Instead we use Deployment to manage a ReplicaSet. Let's first take a look at how should we create a ReplicaSet.

We will create a ReplicaSet to ensure there is always 3 instances of a nginx container.

Here .spec.selector is a label selector and it is used to identify potential Pods to acquire by the ReplicaSet. In our case it will look for the Pods which have the label tier: frontend.

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: nginx-replicaset
  labels:
    tier: frontend
spec:
  replicas: 2
  selector:
    matchLabels:
      tier: frontend
  template:
    metadata:
      labels:
        tier: frontend
    spec:
      containers:
      - name: my-nginx
        image: nginx

Save this manifest into replicaset.yaml and apply it.

$ kubectl apply -f replicaset.yaml
replicaset.apps/nginx-replicaset created

$ kubectl get replicaset
NAME               DESIRED   CURRENT   READY   AGE
nginx-replicaset   2         2         2       19s

$ kubectl get pods
NAME                     READY   STATUS    RESTARTS   AGE
nginx-replicaset-7db6b   1/1     Running   0          19s
nginx-replicaset-ncz56   1/1     Running   0          19s

We can see that our ReplicaSet has been deployed and there are 2 PODs just as we specified.

To the Deployments!

Now we have seen what is a ReplicaSet and how to create it, it is time to integrate it into a Deployment.

A Deployment provides declarative updates for Pods ReplicaSets.

Let's create a Deployment manifest. Instead of creating the manifest from scratch, we can use kubectl to create a template file for us. With the --dry-run flag, we tell kubectl to not create the resource. This way, we can easily modify the attributes later.

$ kubectl create deployment nginx-deployment --image=nginx --dry-run=client -o yaml > deployment.yaml
 $ kubectl get deploy
NAME               READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment   1/1     1            1           4m9s

$ kubectl get po
NAME                                READY   STATUS        RESTARTS   AGE
nginx-deployment-5969c7f455-j6685   1/1     Running       0          3m39s

After creting the deployment, we can see that only 1 Pod is created. This is because we didn't specify a value for replicas option. We can scale our deployment by editing the yaml file or we can use the imperative way.

$ kubectl scale deploy nginx-deployment --replicas=2
deployment.apps/nginx-deployment scaled

$ kubectl get deploy
NAME               READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment   2/2     2            2           12m

$ kubectl get po
NAME                                READY   STATUS        RESTARTS   AGE
nginx-deployment-5969c7f455-9nrs7   1/1     Running       0          71s
nginx-deployment-5969c7f455-j6685   1/1     Running       0          6m20ss
๐Ÿ’– ๐Ÿ’ช ๐Ÿ™… ๐Ÿšฉ
ustundagsemih
ustundagsemih

Posted on September 15, 2020

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related

ยฉ TheLazy.dev

About