Labels selectors

En Kubernetes, las labels (etiquetas) son pares clave-valor que se utilizan para identificar, organizar y seleccionar objetos dentro del clúster. Las labels se definen en archivos YAML (YAML Ain’t Markup Language) que describen los recursos de Kubernetes, como Pods, Services, Deployments, etc. ¿Qué son las Labels?

Definición: Las labels son metadatos que se adjuntan a los objetos de Kubernetes. Cada label consiste en una clave y un valor, ambos son cadenas de texto.

labels:
      clave: valor

Propósito: Organización: Ayudan a categorizar y organizar los recursos de Kubernetes. Selección: Permiten seleccionar subconjuntos de recursos para operaciones específicas, como actualizaciones, escalado, o monitorización. Filtrado: Facilitan el filtrado de recursos en consultas y comandos de kubectl.

Características de las Labels

Pares Clave-Valor: Cada label tiene una clave única y un valor asociado.

labels:
      app: frontend
      tier: backend

Flexibilidad: Puedes definir cualquier clave y valor que consideres relevante para tu aplicación o infraestructura.

Inmutabilidad: Las labels pueden ser añadidas, modificadas o eliminadas en cualquier momento, lo que permite una gestión dinámica de los recursos.

Uso Común de las Labels

  1. Seleccionar Pods con Labels

Supongamos que tienes múltiples Pods ejecutando diferentes partes de una aplicación. Puedes etiquetarlos para identificarlos fácilmente.

apiVersion: v1
kind: Pod
metadata:
  name: mi-pod
  labels:
    app: mi-aplicacion
    entorno: produccion
spec:
  containers:
  - name: mi-contenedor
    image: nginx
  1. Seleccionar Recursos con Selectors

Los selectors utilizan labels para seleccionar un conjunto específico de recursos. Por ejemplo, un Service puede seleccionar los Pods que coincidan con ciertas labels.

apiVersion: v1
kind: Service
metadata:
  name: mi-servicio
spec:
  selector:
    app: mi-aplicacion
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80

En este ejemplo, el Service mi-servicio seleccionará todos los Pods que tengan la label app: mi-aplicacion.

Para ver los labels de un pod hacemos kubectl get pod httpd --show-labels

Podemos crear columnas adicionales con las claves con -L asi :

kubectl get pods https --show-labels -L estado

Estado es la clave del label, si no hya existe la etiqueta nos delvolvera la columna vacia.

Agregando etiquedas a pods ya existentes :

kubectl label pod httpd responsable=pepe

Sobre escribir etiqueta

kubectl label --overwrite pod httpd responsable=juan

Elimiar label

kubectl label pod httpd responsable-

Selectores

Los selectores nos sirven para encontrar los pods que contienen ciertos labels que nos interesen.

kubectl get pods --show-labels -l status=online

# Podemos usar == son sinonimos
kubectl get pods --show-labels -l status==online

En el ejemplo anterior la columna que nos interesa es status con un valor de online.

Podemos hacer match con mas de un label

kubectl get pods --show-labels -l status==online,responsable=pepe

Tambien tenemos la posibilidad de obtener los label por negacion, por ejemplo que nos traiga todos los registros que no contengan a juan.

kubectl get pods --show-labels -l responsable!=juan

Podemos crear wheres agrupados asi :

kubectl get pods --show-labels -l 'estado in (desarrollo,testing)'


kubectl get pods --show-labels -l 'estado notin (desarrollo,testing)'

Otra ventaja es que podemos hacer cualquiern operacion con esas referencias hacia los labels.

kubectl delete pods -l estado=desarrollo

Anotaciones

Su sintaxis es la siguiente:

apiVersion: v1
kind: Pod
metadata:
  name: tomcat4
  labels:
    estado: "produccion"
    responsable: "pedro"
  annotations:
    doc: "Se debe compilar con gcc"
    adjunto: "ejemplo de anotacion"
spec:
  containers:
   - name: tomcat     
     image: tomcat

Sirven para dar mas descripciones sobre nuestros objetos.

Podemos ver esa informacion con kubectl describe pod nombre-del-pod o kubectl get pod nombre-del-pod -o jsonpath={.metadata.annotations}