Orquestração de Contêineres Question #019e3a4f
Qual das seguintes opções inclui apenas campos obrigatórios para criar um objeto Kubernetes usando um arquivo YAML?
apiVersion, template, kind, status
apiVersion, metadata, status, spec
apiVersion, template, kind, spec
apiVersion, metadata, kind, spec
Official Explanation / Community Explanations
No Kubernetes, toda definição de objeto em um arquivo YAML deve incluir quatro campos obrigatórios: apiVersion, kind, metadata e spec. O apiVersion especifica a versão da API usada para criar o objeto (por exemplo, v1, apps/v1). kind define o tipo de objeto (por exemplo, Pod, Deployment). metadata contém informações de identificação como name e namespace. spec descreve o estado desejado do objeto (por exemplo, containers, réplicas). Campos como template estão aninhados dentro de spec para certos objetos (por exemplo, Deployments), mas não são campos obrigatórios de nível superior. status é um campo somente leitura preenchido pelo Kubernetes após a criação e não faz parte do YAML fornecido pelo usuário. Portanto, o conjunto correto de campos obrigatórios é apiVersion, metadata, kind e spec.
Como Funciona
Quando você cria um objeto Kubernetes via kubectl apply -f file.yaml, o servidor da API valida o YAML contra o esquema para o apiVersion e kind fornecidos. O campo metadata deve incluir pelo menos um name (e opcionalmente namespace). O campo spec contém a configuração desejada; seu conteúdo varia por tipo de objeto. Sem esses quatro campos, o servidor da API rejeitará a solicitação.
Por que o Valor Correto está Certo
A combinação apiVersion, metadata, kind e spec inclui todos os campos obrigatórios de nível superior. Por exemplo, um YAML mínimo de Pod:
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: nginx
image: nginx
Este YAML é válido e pode ser submetido.
Por que os Valores Incorretos estão Errados
apiVersion,template,kind,status:templatenão é um campo de nível superior; está aninhado dentro despecpara controladores como Deployments.statusé somente leitura e não fornecido pelo usuário.apiVersion,metadata,status,spec:statusnão é um campo de entrada obrigatório; é gerado automaticamente pelo Kubernetes.apiVersion,template,kind,spec:templatenão é um campo obrigatório de nível superior; pertence dentro despecpara certos objetos. Além disso,metadataestá faltando, que é necessário para todos os objetos.