Deployment in Kubernetes

Deployment is a Kubernetes object. The deployment provides us with the capability to upgrade the underlying instances seamlessly using rolling updates, undo changes, pause, and resume changes as required.

In a production environment,

  1. You need not one but many such instances of the server running.
  2. Whenever newer versions of the application builds become available on the docker registry, you would like to upgrade your docker instances seamlessly. However, when you upgrade your instances you do not want to upgrade all of them at once. This may impact users accessing our applications so you might want to upgrade them one after the other and that kind of upgrade is known as rolling updates.
  3. You would like to make multiple changes to your environment such as upgrading the underlying web server versions as well as scaling the environment and also modifying the resource allocations etc. You do not want to apply each change immediately after the command is run, instead you like to apply a pause to your environment make the changes and then resumes so that all the changes are rolled out together.

All of these capabilities are available with the Kubernetes deployments.

Deployment

The contents of the deployment file is similar to replicaSet file.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      name: nginx-pod
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx-container
          image: nginx
          ports:
          - containerPort: 80
            protocol: TCP
$ kubectl apply -f nginx-deployment.yaml
deployment.apps/nginx-deployment created

$ kubectl get deployments
NAME               READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment   3/3     3            3           55s

$ kubectl get replicaset
NAME                          DESIRED   CURRENT   READY   AGE
nginx-deployment-5b4596cf84   3         3         3       2m28s

$ kubectl get pods
NAME                                READY   STATUS    RESTARTS   AGE
nginx-deployment-5b4596cf84-4h22n   1/1     Running   0          2m48s
nginx-deployment-5b4596cf84-8tx7f   1/1     Running   0          2m48s
nginx-deployment-5b4596cf84-c9vmc   1/1     Running   0          2m48s

The deployment automatically creates a replicaSet, so you can see the the replicaSet is running with kubectl get replicaset commands. The replicaSets ultimately create pods. Thus, if you run the kubectl get pods, you will be able to see the pod with the name of the deployment and the replicaSet. so far there hasn’t been much of a difference between replicaSet and deployments except for the fact that deployment created a new kubernetes object called deployments

Commands with kubectl get all

$ kubectl get all -n default

NAME                                    READY   STATUS    RESTARTS   AGE
pod/nginx-deployment-5b4596cf84-4h22n   1/1     Running   0          43m
pod/nginx-deployment-5b4596cf84-8tx7f   1/1     Running   0          43m
pod/nginx-deployment-5b4596cf84-c9vmc   1/1     Running   0          43m

NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
service/kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP   88d

NAME                               READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/nginx-deployment   3/3     3            3           43m

NAME                                          DESIRED   CURRENT   READY   AGE
replicaset.apps/nginx-deployment-5b4596cf84   3         3         3       43m

Leave a Reply

Your email address will not be published.

ANOTE.DEV