Day 4 - Operations with Pods/Deployment

 In this post we will  be looking into few operation with pods/deployments as below.


Scale UP and Scale Down Pods/Containers

Our first project is deployed now on minikube cluster and accessible as well.

At this stage our project deployed now.Let we try to do scaling on containers as below.

Let we check current replicas as below. This we can check from minikube dashboard as below.

here currently 1 container is running , which is original container.

Let we create 3 replica for this container as below.

shreeganesh@aim2022:~$ kubectl scale deployment/minikube-first-dep --replicas=3
deployment.apps/minikube-first-dep scaled
shreeganesh@aim2022:~$
kubectl get deployment
NAME READY UP-TO-DATE AVAILABLE AGE
minikube-first-dep 3/3 3 3 24d
shreeganesh@aim2022:~$
shreeganesh@aim2022:~$
kubectl get pods
NAME READY STATUS RESTARTS AGE
minikube-first-dep-84fddbc8ff-dqrlr 1/1 Running 0 2m50s
minikube-first-dep-84fddbc8ff-gwgv5 1/1 Running 0 2m50s
minikube-first-dep-84fddbc8ff-pxnnl 1/1 Running 1 (24d ago) 24d
shreeganesh@aim2022:~$

let we check the same from minikube again .



here we have 3 pods now  , these pods will be running same codes and in manner of load balanced way to handle incoming requests.

let we scale down the same as below.

shreeganesh@aim2022:~$ kubectl scale deployment/minikube-first-dep --replicas=1
deployment.apps/minikube-first-dep scaled
shreeganesh@aim2022:~$
shreeganesh@aim2022:~$
shreeganesh@aim2022:~$
kubectl get pods
NAME READY STATUS RESTARTS AGE
minikube-first-dep-84fddbc8ff-dqrlr 1/1
Terminating 0 4m12s
minikube-first-dep-84fddbc8ff-gwgv5 1/1
Terminating 0 4m12s
minikube-first-dep-84fddbc8ff-pxnnl 1/1
Running 1 (24d ago) 24d
shreeganesh@aim2022:~$
shreeganesh@aim2022:~$
kubectl get pods
NAME READY STATUS RESTARTS AGE
minikube-first-dep-84fddbc8ff-pxnnl 1/1 Running 1 (24d ago) 24d
shreeganesh@aim2022:~$
kubectl get deployment
NAME READY UP-TO-DATE AVAILABLE AGE
minikube-first-dep 1/1 1 1 24d
shreeganesh@aim2022:~$


Updating the Deployments

Here are the steps on how to update a deployment in Kubernetes:

  1. Build a new Docker image with the updated code.
  2. Push the new image to a container registry.
  3. Update the deployment manifest to specify the new image.
  4. Apply the updated deployment manifest to the Kubernetes cluster.

As of now we have made depoyment live and below are current status of project.

Project url page :

 

Deployment status :

shreeganesh@aim2022:~$ kubectl get pods
NAME READY STATUS RESTARTS AGE
minikube-first-dep-84fddbc8ff-pxnnl 1/1 Running 2 (37m ago) 31d
shreeganesh@aim2022:~$
shreeganesh@aim2022:~$ kubectl get deployments
NAME READY UP-TO-DATE AVAILABLE AGE
minikube-first-dep 1/1 1 1 31d
shreeganesh@aim2022:~$

Here i am changing below code  marked in RED in app.mjs file .

import express from 'express';

import connectToDatabase from './dbconn.mjs'

const app = express();

app.get('/', (req, res) => {
res.send('<h2>Congratulations for your Second Project on Minikube Cluster !!</h2>');
});

await connectToDatabase();
app.listen(1000);

now we again need to build the image and push the same to DockerHub as below.

shreeganesh@aim2022:~/Desktop/Docker$ docker build -t abhishek2023/python_repo:4.0 .
[+] Building 2.4s (11/11) FINISHED                                                                                                                                 docker:default
 => [internal] load build definition from Dockerfile                                                                                                                         0.0s
 => => transferring dockerfile: 151B                                                                                                                                         0.0s
 => [internal] load .dockerignore                                                                                                                                            0.0s
 => => transferring context: 2B                                                                                                                                              0.0s
 => [internal] load metadata for docker.io/library/node:14                                                                                                                   2.3s
 => [auth] library/node:pull token for registry-1.docker.io                                                                                                                  0.0s
 => [1/5] FROM docker.io/library/node:14@sha256:a158d3b9b4e3fa813fa6c8c590b8f0a860e015ad4e59bbce5744d2f6fd8461aa                                                             0.0s
 => [internal] load build context                                                                                                                                            0.0s
 => => transferring context: 1.15kB                                                                                                                                          0.0s
 => CACHED [2/5] WORKDIR /app                                                                                                                                                0.0s
 => CACHED [3/5] COPY package.json .                                                                                                                                         0.0s
 => CACHED [4/5] RUN npm install                                                                                                                                             0.0s
 => [5/5] COPY . .                                                                                                                                                           0.0s
 => exporting to image                                                                                                                                                       0.0s
 => => exporting layers                                                                                                                                                      0.0s
 => => writing image sha256:d9005173c53c6ab54fbcdda84acc2416ae3d3ae3a076e1135b337317012b483b                                                                                 0.0s
 => => naming to docker.io/abhishek2023/python_repo:4.0                                                                                                                      0.0s
shreeganesh@aim2022:~/Desktop/Docker$ 

shreeganesh@aim2022:~/Desktop/Docker$ docker images
REPOSITORY                 TAG       IMAGE ID       CREATED         SIZE
abhishek2023/python_repo   4.0       d9005173c53c   4 seconds ago   916MB
abhishek2023/python_repo   2.0       f2aca7128c5c   4 weeks ago     916MB

shreeganesh@aim2022:~/Desktop/Docker$ docker push abhishek2023/python_repo:4.0
The push refers to repository [docker.io/abhishek2023/python_repo]
c170fcbdcf73: Pushed 
7707a09dac3e: Layer already exists 
a090fd4033fc: Layer already exists 
653e53542070: Layer already exists 
0d5f5a015e5d: Layer already exists 
3c777d951de2: Layer already exists 
f8a91dd5fc84: Layer already exists 
cb81227abde5: Layer already exists 
e01a454893a9: Layer already exists 
c45660adde37: Layer already exists 
fe0fb3ab4a0f: Layer already exists 
f1186e5061f2: Layer already exists 
b2dba7477754: Layer already exists 
4.0: digest: sha256:0a07d0033a03ff448830c047562411b5666050b0800d313e4ed74867ee02e894 size: 3046

shreeganesh@aim2022:~/Desktop/Docker$ kubectl get deployment
NAME                 READY   UP-TO-DATE   AVAILABLE   AGE
minikube-first-dep   1/1     1            1           32d
shreeganesh@aim2022:~/Desktop/Docker$ kubectl get pods
NAME                                  READY   STATUS    RESTARTS      AGE
minikube-first-dep-84fddbc8ff-pxnnl   1/1     Running   2 (51m ago)   32d

shreeganesh@aim2022:~/Desktop/Docker$ kubectl set image deployment/minikube-first-dep python-repo-kxv7q=abhishek2023/python_repo:4.0
deployment.apps/minikube-first-dep image updated
shreeganesh@aim2022:~/Desktop/Docker$ 
shreeganesh@aim2022:~/Desktop/Docker$ 
shreeganesh@aim2022:~/Desktop/Docker$ kubectl get deployment
NAME                 READY   UP-TO-DATE   AVAILABLE   AGE
minikube-first-dep   1/1     1            1           32d
shreeganesh@aim2022:~/Desktop/Docker$ 
shreeganesh@aim2022:~/Desktop/Docker$ kubectl rollout status deployment/minikube-first-dep
deployment "minikube-first-dep" successfully rolled out
shreeganesh@aim2022:~/Desktop/Docker$ 
shreeganesh@aim2022:~/Desktop/Docker$ 
shreeganesh@aim2022:~$ minikube service minikube-first-dep --url
http://192.168.59.100:30313

Hence our new deployment is done now as below.


Correcting Wrong Deployments and Going back in Deployment History

Suppose we rolled out some errorneous deployment which was not existing as below. And it will keep waiting for error images as this is not existing .We can check with below commands.

shreeganesh@aim2022:~/Desktop/Docker$ kubectl set image deployment/minikube-first-dep python-repo-kxv7q=abhishek2023/python_repo:NA
deployment.apps/minikube-first-dep image updated


shreeganesh@aim2022:~/Desktop/Docker$ kubectl get deployment
NAME                 READY   UP-TO-DATE   AVAILABLE   AGE
minikube-first-dep   1/1     1            1           32d
shreeganesh@aim2022:~/Desktop/Docker$ kubectl set image deployment/minikube-first-dep python-repo-kxv7q=abhishek2023/python_repo:NA
deployment.apps/minikube-first-dep image updated
shreeganesh@aim2022:~/Desktop/Docker$
shreeganesh@aim2022:~/Desktop/Docker$ kubectl get deployment
NAME                 READY   UP-TO-DATE   AVAILABLE   AGE
minikube-first-dep   1/1     1            1           32d
shreeganesh@aim2022:~/Desktop/Docker$
shreeganesh@aim2022:~/Desktop/Docker$ kubectl rollout status deployment/minikube-first-dep
Waiting for deployment "minikube-first-dep" rollout to finish: 1 old replicas are pending termination...


Let's check Dashboard : This is in UNHEALTHY status as below.


in this case we need to undo the rollout as below.

shreeganesh@aim2022:~/Desktop/Docker$
shreeganesh@aim2022:~/Desktop/Docker$ kubectl rollout undo deployment/minikube-first-dep
deployment.apps/minikube-first-dep rolled back
shreeganesh@aim2022:~/Desktop/Docker$ kubectl rollout status deployment/minikube-first-dep
deployment "minikube-first-dep" successfully rolled out
shreeganesh@aim2022:~/Desktop/Docker$
shreeganesh@aim2022:~/Desktop/Docker$ 

check now dashboard : It's running now

We also can go back to OLD deployment as below as well.

=> First let we check available revisions in for this project as below.

shreeganesh@aim2022:~/Desktop/Docker$ kubectl rollout history deployment/minikube-first-dep
deployment.apps/minikube-first-dep
REVISION  CHANGE-CAUSE
1         <none>
3         <none>
4         <none>

=> Let we check revision history : This revision was orginal Code

shreeganesh@aim2022:~/Desktop/Docker$ kubectl rollout history deployment/minikube-first-dep --revision=1
deployment.apps/minikube-first-dep with revision #1
Pod Template:
  Labels:       app=minikube-first-dep
        pod-template-hash=84fddbc8ff
  Containers:
   python-repo-kxv7q:
    Image:      abhishek2023/python_repo:2.0
    Port:       <none>
    Host Port:  <none>
    Environment:        <none>
    Mounts:     <none>
  Volumes:      <none>


=> Let we check revision history : This revision was Faulty Image Code

shreeganesh@aim2022:~/Desktop/Docker$ kubectl rollout history deployment/minikube-first-dep --revision=3
deployment.apps/minikube-first-dep with revision #3
Pod Template:
  Labels:       app=minikube-first-dep
        pod-template-hash=74d9ffd4d8
  Containers:
   python-repo-kxv7q:
    Image:      abhishek2023/python_repo:NA
    Port:       <none>
    Host Port:  <none>
    Environment:        <none>
    Mounts:     <none>
  Volumes:      <none>

=> Let we check revision history : This revision is Current Code

shreeganesh@aim2022:~/Desktop/Docker$ kubectl rollout history deployment/minikube-first-dep --revision=4
deployment.apps/minikube-first-dep with revision #4
Pod Template:
  Labels:       app=minikube-first-dep
        pod-template-hash=6f558d4dbf
  Containers:
   python-repo-kxv7q:
    Image:      abhishek2023/python_repo:4.0
    Port:       <none>
    Host Port:  <none>
    Environment:        <none>
    Mounts:     <none>
  Volumes:      <none>

shreeganesh@aim2022:~/Desktop/Docker$ 


 Now let we suppose to go back to original deployment , we need to execute below commands for the same.

shreeganesh@aim2022:~/Desktop/Docker$ kubectl rollout undo deployment/minikube-first-dep --to-revision=1
deployment.apps/minikube-first-dep rolled back
shreeganesh@aim2022:~/Desktop/Docker$ kubectl rollout status deployment/minikube-first-dep
deployment "minikube-first-dep" successfully rolled out
shreeganesh@aim2022:~/Desktop/Docker$


Let we check Deployment : We are now at original deployment



No comments:

Post a Comment

Total Pageviews