Kubernetes Deployments Fully Explained
Kubernetes Deployment Is the Process of Providing Declarative Updates to Pods and Replicasets. It Allows Users to Declare the Desired State in the Manifest...
Kubernetes Deployment is the process of providing declarative updates to Pods and ReplicaSets. It allows users to declare the desired state in the manifest (YAML) file, and the controller will change the current state to the declared state.
So, let’s look at how to create and use Kubernetes deployments. I’ll walk you through how to utilize Kubernetes deployments to simplify the deployment process and manage, scale, and roll back deployments.
For the purpose of this article, we will be using a locally deployed Kubernetes cluster in a Windows environment utilizing the Windows Subsystem for Linux (WSL).
(This article is part of our Kubernetes Guide. Use the right-hand menu to navigate.)
Creating a Kubernetes deployment
Let’s first create a simple Nginx deployment with four replicas. Like any other Kubernetes configuration, a deployment file will contain:
- apiVersion (apps/v1)
- Kind (Deployment)
- The metadata with a spec section to define the replicas and configurations related to the deployment
nginx-deployment.yaml
apiVersion: apps/v1 kind: Deployment metadata: # Define the Deployment Name name: nginx-deployment labels: app: webserver spec: # Define the Number of Pods replicas: 4 # Define the Selector selector: matchLabels: app: webserver template: metadata: labels: app: webserver spec: containers: # Container Details - name: nginx image: nginx:latest # Image ports: - containerPort: 80
We can create the deployment using the following command. We have added the –record flag to save the command.
kubectl apply -f nginx-deployment.yaml --record
Result:
We have defined the following entries in the metadata and specs sections of the above deployment file.
- The deployment name and a label (app: webserver).
- The number of replicas (pods), the selector in which the controller will select the targeted pods. (The label is used to select the necessary pods using the matchLabels field.) The template section contains the actual template for the pod. This section defines the metadata that each pod will have with the specs (container definition). In this instance, we have defined the Nginx image and the container port as 80.
If we check the Kubernetes cluster after some time, we can see that the Pods are deployed with the given template. Additionally, we can retrieve details of the deployment using the describe command.
kubectl get all
Result:
kubectl describe deployment nginx-deployment
Result:
Must Read
Exposing the ReplicaSet
Now we have created a deployment and need to verify if the Nginx web servers were deployed correctly.
The straightforward way to achieve this is to create a service object that exposes the deployment. An important fact to note here is that the way we expose the deployment and the parameters can vary depending on the configurations of the Kubernetes cluster.
kubectl expose deployment nginx-deployment --type=LoadBalancer --name=nginx-web-server
Result:
kubectl get services
Result:
Then we can navigate to the localhost port 80 to check if we can see the default Nginx server landing page as below.