Everyone running applications on Kubernetes cluster uses a deployment.
It’s what you use to scale, roll out, and roll back versions of your applications.
With a deployment, you tell Kubernetes how many copies of a Pod you want running. The deployment takes care of everything else.
A deployment is an object in Kubernetes that lets you manage a set of identical pods.
Without a deployment, you’d need to create, update, and delete a bunch of pods manually.
With a deployment, you declare a single object in a YAML file. This object is responsible for creating the pods, making sure they stay up to date, and ensuring there are enough of them running
You can also easily autoscale your applications using a Kubernetes deployment.
Here’s some YAML that you can use as a template for creating your deployments.
First, take a look at the animation that annotates each section of the deployment YAML. (Scroll down for code that can be copy-and-pasted.)
(You can ignore the additional comments about the "service" here – this deployment was taken from a different example that also incorporated services.)
First, the replicas
key sets the number of instances of the pod that the deployment should keep alive.
Next, we use a label selector to tell the deployment which pods are part of the deployment. This essentially says "all the pods matching these labels are grouped in our deployment."
After that, we have the template
object.
This is interesting. It’s essentially a pod template jammed inside our deployment spec. When the deployment creates pods, it will create them using this template!
So everything under the template
key is a regular pod specification.
In this case, the deployment will create pods that run nginx-hostname
and with the configured labels.
What’s the difference between a deployment and a service?
A deployment is used to keep a set of pods running by creating pods from a template.
A service is used to allow network access to a set of pods.
Both services and deployments choose which pods they operate on using labels and label selectors. This is where the overlap is.
You can use deployments independent of services. You can use services independent of deployments. They just go together really nicely!
This lets you do canary deployments. You add a new deployment version of a pod and run it alongside your existing deployment, but have both deployments handle requests to the service. Once deployed, you can verify the new deployment on a small proportion of the service's traffic, and gradually scale up the new deployment while decreasing the old one.
kubectl delete -f deployment.yaml
to delete your deploymentkubectl delete deployment my-deployment
to delete your deployment