Pular para o conteúdo principal

Capítulo 3.3 - Labels e Selectors

Objetivos de Aprendizagem​

Ao final deste capítulo, você será capaz de:

  • Compreender o papel dos Labels
  • Criar e utilizar Labels
  • Selecionar recursos com Selectors
  • Organizar seus recursos de forma eficiente

O que é um Label?​

Um Label é um par chave-valor anexado a um recurso do Kubernetes para identificá-lo e organizá-lo.


Por que Usar Labels?​

Organização​

Os Labels permitem:

  • Agrupar recursos logicamente
  • Filtrar e selecionar recursos
  • Organizar por ambiente, aplicação, versão, etc.

Exemplos de Labels​

labels:
app: my-application # Nome da aplicação
env: production # Ambiente
tier: frontend # Camada (frontend/backend)
version: v1.2.3 # Versão
team: backend-team # Equipe responsável
component: api-server # Componente

Declaração de Labels​

No YAML​

apiVersion: v1
kind: Pod
metadata:
name: web-pod
labels:
app: web
env: production
tier: frontend
version: v1
spec:
containers:
- name: nginx
image: nginx:1.20

Via kubectl​

# Adicionar um label
kubectl label pod web-pod team=backend

# Modificar um label existente
kubectl label pod web-pod env=staging --overwrite

# Remover um label
kubectl label pod web-pod team-

Selectors​

Os Selectors permitem selecionar recursos com base em seus Labels.

Selectors Simples​

selector:
matchLabels:
app: web
env: production

Selectors com Expressões​

selector:
matchExpressions:
- key: env
operator: In
values:
- production
- staging
- key: version
operator: NotIn
values:
- v1

Operadores:

  • In: O valor está na lista
  • NotIn: O valor não está na lista
  • Exists: A chave existe
  • DoesNotExist: A chave não existe

Uso no kubectl​

Filtrar com Labels​

# Pods com um label específico
kubectl get pods -l app=web

# Pods com múltiplos labels
kubectl get pods -l app=web,env=production

# Pods sem um label
kubectl get pods -l '!env'

# Pods com um label em uma lista
kubectl get pods -l 'env in (production,staging)'

Selectors Complexos​

# Expressão AND
kubectl get pods -l app=web,env=production

# Expressão OR (via múltiplas requisições)
kubectl get pods -l app=web
kubectl get pods -l app=api

Caso de Uso: Services​

Os Services usam Selectors para encontrar os Pods:

apiVersion: v1
kind: Service
metadata:
name: web-service
spec:
selector:
app: web
tier: frontend
ports:
- port: 80
targetPort: 8080

Boas Práticas​

Convenções de Nomeação​

  • Use nomes curtos e descritivos
  • Evite caracteres especiais (exceto - e _)
  • Use valores em minúsculas
  • Máximo de 63 caracteres por label

Labels Recomendados​

labels:
app.kubernetes.io/name: my-app
app.kubernetes.io/instance: my-app-prod
app.kubernetes.io/version: "1.2.3"
app.kubernetes.io/component: frontend
app.kubernetes.io/part-of: my-system
app.kubernetes.io/managed-by: helm

Resumo​

Neste capítulo, você aprendeu:

Labels: Pares chave-valor para organizar recursos
Selectors: Selecionar recursos com base em Labels
Uso: Services, Deployments, ReplicaSets utilizam Selectors
Comandos: kubectl label, filtragem com -l
Boas práticas: Convenções de nomeação e labels recomendados


Próximos Passos​

Agora que você domina os Labels:

Capítulo 3.4: Ciclo de Vida dos Pods
Capítulo 3.5: ReplicaSets


Capítulo criado em: Dezembro de 2024