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
- 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
- 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}