Kubernetes – Deployment object – simplifying concepts

Hi All,
GREETINGS FOR THE DAY 🙂 LIFE IS BEAUTIFUL 🙂
We are continuing series on Kubernetes – simplifying the concepts.
In previous few articles we discussed
- What is Kubernetes ? – https://knowledge-junction.in/2021/09/03/kubernetes-introduction-starting-point-for-beginners-helps-to-prepare-the-interview/
- Kubernetes – Components / Cluster architecture – simplifying concepts – detailed article – https://knowledge-junction.in/2022/04/27/kubernetes-components-cluster-architecture-simplifying-concepts-detailed-article/
- Setting up local environment for Kubernetes – https://knowledge-junction.in/2021/09/11/kubernetes-simplifying-setting-up-local-environment-creating-kubernetes-cluster-locally-helps-in-interview-preparation-kubernetes-for-beginners/
- Yaml file guide / reference – https://knowledge-junction.in/2021/09/04/complete-guide-to-yaml/
- Kubernetes – Setting up kubernetes cluster for development on Windows 10 box using minikube – https://knowledge-junction.in/2022/05/06/kubernetes-setting-up-kubernetes-cluster-for-development-on-windows-10-box-using-minikube/
- Kubernetes – POD – https://knowledge-junction.in/2022/05/05/kubernetes-pod/
- Kubernetes – ReplicaSet object – simplifying concepts – https://knowledge-junction.in/2022/07/07/kubernetes-replicaset-object-simplifying-concepts/
Take away from this article
- What is Kubernetes Deployment object
- YAML specification of Deployment object
- kubectl CMDLETS for Deployment object
- What happens when Deployment object is created
- KuberNetes Deployment object states
What is Kubernetes – Deployment?
- In last article we discussed about PODs and ReplicaSet objects
- Each container (our application / docker image) is encapsulated in POD
- To have our containerized application in our Kubernetes cluster we use Kubernetes deployment object
- The Deployment object tells our Kubernetes cluster
- How to create and update instance of our application
- Once we have deployment, Kubernetes control plane schedule (Scheduler component of Kubernetes Control Plane) application instances from deployment to run on nodes in cluster
- Once the application instances are created, Kubernetes Deployment Controller monitors those instances
- If any node goes down, deployment controller replaces application instances with an instance on another node – This is a self-healing mechanism to address machine failure or maintenance
- Kubernetes Deployment object ensures required scalability and availability of our appliection
Deployment Yaml file
apiVersion: apps/v1
kind: Deployment
metadata:
name: <deployment name>
spec:
selector:
matchLabels:
app: <label defined in pod template - these must match>
replicas: <number of replicas> #deployment to run 2 pods matching template
template: <POD specification>
metadata:
labels:
app: <Pods label - used in deployment selector>
spec:#indicates pod runs one container
containers:
- name: <Container name>
image: <container image>
ports:
- containerPort: 80
- Kind – Deployment
- apiVersion : apps/v1
- POD Template – Here we have spec.selector and spec.template are the required fields
- Here. spec.selector field how Deployment finds the Pods
- template field contains
- .template.spec –
- POD template – exactly the same schema as POD except api and kind
- Pods run one container and having respective given image
- .template.spec –
.spec.selector
must match.spec.template.metadata.labels
, or it will be rejected by the API.
Sample Deployment YAML file – to create the deployment for Registry image. This can be use case where we need to create our private registry. In next article we will discuss about Kubernetes registries
apiVersion: apps/v1
kind: Deployment
metadata:
name: registry-deployment-knowledjejunction
labels:
app: registry
spec:
replicas: 2
selector:
matchLabels:
app: registry
template:
metadata:
labels:
app: registry
spec:
containers:
- name: registry
image: registry:2
ports:
- containerPort: 5000
protocol: TCP
kubectl CMDLETS for Deployment
- Here I am using minikube utility in my local development environment
- Start the minikube – minikube start
minikube start
- Create new deployment using imperative command
kubectl create deployment <deployment name> --image=<image name>
Example:
kubectl create deployment KnowledgeJunction-Deployment --image=KnowledgeJunction
kubectl create deployment test-deploy --image=KnowledgeJunction --replicas=3
- We could also create Deployment object by using YAML file as
kubectl -f apply <Deployment YAML specification file>
- Get all Deployments
kubectl get deployments
- Get details of Deployment
kubectl describe deployments
Scaling a Deployment
- We could scale deployment using – scale parameter to kubectl CMDLET
kubectl scale <deployment-name> --replicas=5
- We could also autoscale the deployment – specify minimum and maximum number of PODs we want to run based on CPU utilization of existing PODs – we could do this using – autoscale parameter of kubectl CMDLET
kubectl autoscale <deployment-name> --min=15 --max=25 --cpu-percent=90
What exactly happen when we create Deployment object :
- Node will be searched to run the our application instance
- Our application will be scheduled to run
- Configure cluster to have new node to run application in case existing node fails or get down
- Each time new deployment found, deployment controller, ReplicaSets are created
- ReplicaSet creation event is monitored by ReplicaSet controller
- Next PODs objects are created, monitored by the Scheduler
- Scheduler selects the appropriate node for the POD based on scheduling algorithms
Deployment States
- Progressing Deployment
- Deployment is in progressing state when
- Deployment creates new ReplicaSet
- Deployment is scaling up OR scaling down ReplicaSets
- New PODs are ready or available
- Deployment is in progressing state when
- Complete Deployment
- Deployment is complete when
- Any update requested to Deployment is completed
- All replicas associated with Deployment are available
- Deployment is complete when
- Failed Deployment
- Deployment may failed when
- Insufficient quota
- Image pull errors
- Insufficient permissions
- Deployment may failed when
Thanks for reading !!! Please feel free to discuss / suggestions / share thoughts !!!
HAVE A GREAT TIME AHEAD !!! LIFE IS BEAUTIFUL 🙂
You must log in to post a comment.