Saltar al contenido principal

Capítulo 3.3 - Labels y Selectors

Objetivos de Aprendizaje​

Al final de este capítulo, usted será capaz de:

  • Comprender el rol de los Labels
  • Crear y utilizar Labels
  • Seleccionar recursos con Selectors
  • Organizar sus recursos de manera eficiente

¿Qué es un Label?​

Un Label es un par clave-valor adjunto a un recurso de Kubernetes para identificarlo y organizarlo.


¿Por qué usar Labels?​

Organización​

Los Labels permiten:

  • Agrupar recursos lógicamente
  • Filtrar y seleccionar recursos
  • Organizar por entorno, aplicación, versión, etc.

Ejemplos de Labels​

labels:
app: my-application # Nombre de la aplicación
env: production # Entorno
tier: frontend # Capa (frontend/backend)
version: v1.2.3 # Versión
team: backend-team # Equipo responsable
component: api-server # Componente

Declaración de Labels​

En el 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

Vía kubectl​

# Agregar un label
kubectl label pod web-pod team=backend

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

# Eliminar un label
kubectl label pod web-pod team-

Selectors​

Los Selectors permiten seleccionar recursos basados en sus Labels.

Selectors Simples​

selector:
matchLabels:
app: web
env: production

Selectors con Expresiones​

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

Operadores:

  • In: El valor está en la lista
  • NotIn: El valor no está en la lista
  • Exists: La clave existe
  • DoesNotExist: La clave no existe

Uso en kubectl​

Filtrar con Labels​

# Pods con un label específico
kubectl get pods -l app=web

# Pods con varios labels
kubectl get pods -l app=web,env=production

# Pods sin un label
kubectl get pods -l '!env'

# Pods con un label en una lista
kubectl get pods -l 'env in (production,staging)'

Selectores Complejos​

# Expresión AND
kubectl get pods -l app=web,env=production

# Expresión OR (mediante varias consultas)
kubectl get pods -l app=web
kubectl get pods -l app=api

Caso de Uso: Services​

Los Services utilizan Selectors para encontrar los Pods:

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

Buenas Prácticas​

Convenciones de Nomenclatura​

  • Utilice nombres cortos y descriptivos
  • Evite caracteres especiales (excepto - y _)
  • Utilice valores en minúsculas
  • Máximo 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

Resumen​

En este capítulo, usted ha aprendido:

Labels: Pares clave-valor para organizar los recursos
Selectors: Seleccionar recursos basados en los Labels
Uso: Services, Deployments, ReplicaSets utilizan Selectors
Comandos: kubectl label, filtrado con -l
Buenas prácticas: Convenciones de nomenclatura y labels recomendados


Próximos Pasos​

Ahora que domina los Labels:

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


Capítulo creado el: diciembre 2024