Deployments podem ser criados de modo imperativo com o comando create deployment
. As opções que podem ser fornecidas para configurar o Deployment são um pouco limitados e não se assemelham ao que conhecemos do comando kubectl run
.
O comando a seguir cria um Deployment que utiliza a imagem nginx:1.14.2 e uma única réplica.
# Opção 01 - criar o Deployment
$ kubectl create deployment my-deploy --image=nginx:1.14.2
O manifesto abaixo representa um Deployment com uma única replica e é equivalente ao comando anterior. Olhando com atenção é possível ver a seleção de labels em ação. O label selector spec.selector.matchLabels faz uma correspondência do label app=my-deploy com os labels definidos no template(spec.template.metadata.labels) do Pod.
# Também podemos gerar um manifesto inicial com a flag --dry-run=client
# kubectl create deployment my-deploy \\
# --image=nginx:1.14.2 \\
# --dry-run=client \\
# -o yaml > deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: null
labels:
app: my-deploy
name: my-deploy
spec:
replicas: 1
selector:
matchLabels:
app: my-deploy
strategy: {}
template:
metadata:
creationTimestamp: null
labels:
app: my-deploy
spec:
containers:
- image: nginx:1.14.2
name: nginx
resources: {}
status: {}
Criando Deployment manualmente acompanhando a documentação do Kubernetes.
# 01 - Avaliando API disponível
$ kubectl explain Deployment.apiVersion
KIND: Deployment
VERSION: apps/v1
FIELD: apiVersion <string>
...
# 02 - Avaliando API disponível
$ kubectl api-resources | grep "^deployments"
NAME SHORTNAMES APIVERSION NAMESPACED KIND
deployments deploy apps/v1 true Deployment
# Manifesto criado de forma declarativa
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-deploy
labels:
section: 06-pod-design
spec:
replicas: 1
selector:
matchLabels:
app: my-deploy
template:
metadata:
labels:
app: my-deploy
spec:
containers:
- name: nginx
image: nginx:1.14.2
Aplicando o comando imperativo ou qualquer um dos manifestos declarados mostrados acima teremos os seguintes resultados ao consultar por Deployments, Replica Sets e Pods no cluster.
$ kubectl get deployments,replicasets,pods
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/my-deploy 1/1 1 1 6s
NAME DESIRED CURRENT READY AGE
replicaset.apps/my-deploy-79fbb965cd 1 1 1 6s
NAME READY STATUS RESTARTS AGE
pod/my-deploy-79fbb965cd-kj5pk 1/1 Running 0 6s
Referência de campos para o Deployment.
https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#pod-template
Referência de campos para o selector.
Referência de campos para o template.