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

Documentação Kubernetes

Deployment

Referência de campos para o Deployment.

https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#pod-template

https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#pod-template

LabelSelector

Referência de campos para o selector.

PodTemplate

Referência de campos para o template.