A Deployment provides declarative updates for Pods and ReplicaSets.
You describe a desired state in a Deployment, and the Deployment Controller changes the actual state to the desired state at a controlled rate. You can define Deployments to create new ReplicaSets, or to remove existing Deployments and adopt all their resources with new Deployments.
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-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
nginx-deployment is created, indicated by the .metadata.name field..spec.replicas field..spec.selector field defines how the Deployment finds which Pods to manage. In this case, you simply select a label that is defined in the Pod template (app: nginx).template field contains the following sub-fields:
app: nginx using the .metadata.labels field..template.spec field, indicates that the Pods run one container, nginx, which runs the nginx image at version 1.14.2.nginx using the .spec.template.spec.containers[0].name field.