Understanding deployments
Deployment allows you to make declarative changes to pods and ReplicaSets. You can provide a desired state for the deployment, and the deployment controller will incrementally change the actual state to the desired state.
Deployments can be used to create new ReplicaSets or to replace existing deployments with new deployments. When a new version is ready to go live in production, the deployment can easily handle the upgrade with no downtime by using predefined rules. The following diagram shows an example of a deployment:
Figure 1.8 – A deployment
The following is an example of a deployment. It creates a ReplicaSet to bring up three nginx
pods:
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-sample-deployment labels: app: nginx spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1:21 ports: - containerPort: 80
In the preceding example, the following occurred:
- A deployment called
nginx-sample-deployment
is created, as indicated by themetadata.name
field. - The image for this deployment is set by the
Spec.containers.image
field (nginx:latest
). - The deployment creates three replicated pods, as indicated by the
replicas
field.
The most commonly used kubectl
commands concerning deployment are as follows:
- The
apply
command creates the pod:kubectl apply -f FILENAME.
For example, the kubectl apply -f ./nginx-deployment.yaml
command will create a new deployment from the nginx-deployment.yaml
YAML file.
- The
get deployments
command checks the status of the deployment:kubectl get deployments
This will produce the following output:
NAME READY UP-TO-DATE AVAILABLE AGE nginx-sample-deployment 3/3 0 0 1s
The following fields are displayed:
NAME
indicates the names of the deployments in the namespace.READY
shows how many replicas of the application are available.UP-TO-DATE
shows the number of replicas that have been updated to achieve the desired state.AVAILABLE
shows the number of available replicas.
AGE
indicates the length of time the application has been running.- The
describe deployments
command indicates the details of the deployment:kubectl describe deployments
- The
delete
command removes the deployment that was made by theapply
command:kubectl delete -f FILENAME.
With that, we have learned that deployments are used to define the life cycle of an application, including which container images to use, how many pods you should have, and how they should be updated. In the next section, we will look at StatefulSets and DaemonSets.