Domine YAML, Manifests e a API do Kubernetes: Guia Definitivo para Iniciantes
Domine YAML, Manifests e a API do Kubernetes: Guia Definitivo para Iniciantes
Ao trabalhar com Kubernetes – ou com versões mais leves como o K3s – é fundamental dominar YAML, manifests e a própria API. Esses três pilares são a base para definir e controlar recursos dentro de um cluster. Neste guia, vamos analisar a estrutura dos manifests, mostrar como descobrir os campos dos objetos Kubernetes usando comandos práticos e apresentar boas práticas para organizar seus arquivos de forma clara e escalável.
O que são YAML e Manifests no Kubernetes?
YAML (YAML Ain’t Markup Language) é um formato de serialização de dados legível, ideal para descrever recursos no Kubernetes. Um manifest é simplesmente um arquivo YAML que declara o estado desejado de componentes como Pods, Deployments, Services, ConfigMaps etc.
Os manifests são declarativos: você descreve como o recurso deve ser, e o Kubernetes cuida de criá‑lo, atualizá‑lo ou removê‑lo para que o cluster reflita exatamente o que foi especificado.
Estrutura básica de um manifest
apiVersion: v1
kind: Pod
metadata:
name: meu-pod
labels:
app: exemplo
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
Campos principais
| Campo | O que descreve |
|---|---|
| apiVersion | Versão da API que contém o recurso (ex.: v1, apps/v1, batch/v1). |
| kind | Tipo do recurso (Pod, Deployment, Service, ConfigMap, etc.). |
| metadata | Dados de identificação – nome, namespace, rótulos, anotações, etc. |
| spec | Especificação do estado desejado – containers, imagens, volumes, réplicas, políticas, etc. |
Com esses quatro blocos, você consegue declarar praticamente qualquer objeto do Kubernetes.
Explorando tipos de recursos e seus apiVersion × kind
| Recurso | apiVersion | kind |
|---|---|---|
| Pod | v1 | Pod |
| Deployment | apps/v1 | Deployment |
| Service | v1 | Service |
| ConfigMap | v1 | ConfigMap |
| Ingress | networking.k8s.io/v1 | Ingress |
Explorando a API com kubectl explain
O comando kubectl explain permite navegar pelo esquema da API diretamente no terminal, mostrando descrições, tipos esperados e exemplos de uso.
Uso básico
kubectl explain pod
Mostra a descrição geral do objeto Pod.
Aprofundando nos campos
kubectl explain pod.spec
kubectl explain deployment.spec.template.spec.containers
Esses comandos revelam detalhes de subcampos, como nomes, tipos e documentação.
Exemplo prático – obter informações sobre containers em um Pod:
kubectl explain pod.spec.containers
DESCRIPTION:
List of containers belonging to the pod. Containers cannot currently be
added or removed.
FIELDS:
args <[]string>
command <[]string>
env <[]Object>
image <string>
name <string>
ports <[]Object>
resources <Object>
...
Assim você sabe exatamente quais atributos pode usar dentro de containers.
Explorando a API via comandos REST
Além do kubectl explain, é possível explorar a API do Kubernetes via chamadas REST para entender as estruturas dos recursos.
kubectl get --raw /api/v1 | head -n 20
Esse comando retorna a raiz da API v1, mostrando os recursos disponíveis.
Boas práticas para organizar manifests
- Prefira arquivos pequenos e focados
Manifests enxutos são mais fáceis de versionar, revisar e reutilizar. - Comente o que for relevante
Comentários curtos ajudam a entender a intenção de cada recurso. - Versione diretórios quando houver mudanças significativas
Ex.:v1/,v2/dentro dedeployments/para acompanhar evoluções da aplicação. - Use ferramentas de templating
Helm, Kustomize ou Jsonnet reduzem a repetição e permitem parametrização avançada.
Separe por tipo de recurso
manifests/
├── deployments/
│ ├── backend.yaml
│ └── frontend.yaml
├── services/
│ ├── backend-service.yaml
│ └── frontend-service.yaml
└── configmaps/
└── app-config.yaml
Facilita a localização e a manutenção.
Quando e por que usar manifests
- Infraestrutura como código: garante reproduzibilidade e auditoria.
- Pipelines CI/CD: os manifests são a base para aplicar mudanças automaticamente.
- Ambientes multi‑cluster: mantêm consistência entre diferentes clusters.
- Aprendizado: escrever YAML à mão ajuda a internalizar a API e os conceitos do Kubernetes.
Exemplos práticos
Deployment simples
apiVersion: apps/v1
kind: Deployment
metadata:
name: minha-api
labels:
app: minha-api
spec:
replicas: 3
selector:
matchLabels:
app: minha-api
template:
metadata:
labels:
app: minha-api
spec:
containers:
- name: minha-api-container
image: minha-api:1.0.0
ports:
- containerPort: 8080
Service que expõe o Deployment
apiVersion: v1
kind: Service
metadata:
name: minha-api-service
spec:
selector:
app: minha-api
ports:
- protocol: TCP
port: 80
targetPort: 8080
type: ClusterIP
Aplicação no cluster:
kubectl apply -f deployment.yaml
kubectl apply -f service.yaml
Considerações finais
- Use
kubectl explainsempre que surgir dúvida sobre um campo. - YAML depende de indentação correta – preste atenção aos espaços.
- Mantenha os manifests versionados (Git, por exemplo) e revisados por pares.
- Avalie ferramentas como Helm ou Kustomize para projetos maiores.
- Lembre‑se: o manifest descreve o estado desejado; o Kubernetes cuida de reconciliá‑lo.
Com esses conceitos e práticas, você já está pronto para criar manifests claros, seguros e fáceis de manter, explorar a API do Kubernetes de forma confiante e operar seu cluster com eficiência.