Etiquetas y selectores en Kubernetes
Las etiquetas no son más que pares clave-valor asignados a los objetos de Kubernetes, como Pods, Servicios, etc. Las etiquetas pueden utilizarse para organizar y seleccionar los objetos de Kubernetes. Las etiquetas pueden adjuntarse a los objetos en el momento de su creación y pueden modificarse en cualquier momento. Podemos añadir múltiples Etiquetas a los objetos Kubernetes.
Los usuarios utilizan los selectores para seleccionar un conjunto de objetos. El selector de etiquetas es la primitiva de agrupación principal en Kubernetes. La API de Kubernetes admite dos tipos de selectores
- Selectores basados en la igualdad:
Permiten filtrar por clave y valor, donde los objetos coincidentes deben satisfacer todas las etiquetas especificadas. - Selectores basados en conjuntos:
Esto permite filtrar las claves según un conjunto de valores.
Para saber más sobre las etiquetas y los selectores, haz clic aquí.
En este artículo, crearemos un Pod con Etiquetas y redirigiremos las peticiones a él desde el servicio utilizando el Selector. También realizaremos operaciones de obtención y eliminación en el Pod y en el Servicio utilizando Etiquetas/Selectores en la línea de comandos.
Requisitos previos
- Clúster Kubernetes con al menos 1 nodo trabajador.
Si quieres aprender a crear un Clúster Kubernetes, haz clicaquí. Esta guía te ayudará a crear un clúster Kubernetes con 1 Maestro y 2 Nodos en Instancias EC2 de AWS Ubuntu 18l04.
Qué haremos
- Crear un Pod y un Servicio con Etiquetas y Selector
- Entender las etiquetas
Crear un Pod y un Servicio con Etiquetas y Selectores
Para crear un Pod con etiquetas, crea un nuevo archivo y añade el siguiente contenido en él.
vim my-lable-demo-pod.yml
apiVersion: v1 kind: Pod metadata: name: label-demo-pod labels: environment: test app: nginx spec: containers: - name: nginx image: nginx:1.14.2 ports: - containerPort: 80
Para crear un servicio con un selector, crea un archivo con la siguiente definición de servicio.
vim my-selector-demo-service.yml
apiVersion: v1 kind: Service metadata: name: selector-demo-service namespace: default labels:
environment: test app: nginx spec: externalTrafficPolicy: Local ports: - name: http port: 80 protocol: TCP targetPort: 80 selector: app: nginx type: NodePort
Para crear un Pod, ejecuta el siguiente comando.
kubectl create -f my-lable-demo-pod.yml
kubectl get pods
Para crear un Servicio, ejecuta el siguiente comando.
kubectl create -f my-selector-demo-service.yml
kubectl get service
Ahora, para comprobar si el Selector de Etiquetas funciona, intenta acceder al servicio en NodeIP:NodePort.
Aquí, la Ip de mi Nodo es 106.210.138.189 y el servicio está expuesto en el Puerto=30385.
Como podemos acceder al Pod Nginx utilizando el Servicio que hemos creado, significa que la Etiqueta y el Selector han funcionado.
Entender las etiquetas
Ahora podemos realizar varias operaciones sobre el Pod y el Servicio que hemos creado utilizando la Etiqueta.
Para obtener Pods que coincidan con una etiqueta de nuestra elección, podemos usar «–selector» en el comando como se indica a continuación.
kubectl get pods --selector environment=test
kubectl get pods --selector app=nginx
También podemos utilizar «-l» en lugar de «–selector» para obtener los Pods que coincidan con la etiqueta de nuestra elección.
kubectl get pods -l environment=test
kubectl get pods -l environment=prod
Incluso podemos realizar la operación de eliminar pods especificando la etiqueta. Los Pods que coinciden con la etiqueta pueden ser eliminados utilizando los siguientes comandos.
kubectl get pods
kubectl delete pods -l environment=test
kubectl get pods
De la misma manera que podemos eliminar los Pods que coinciden con las etiquetas, también podemos eliminar el servicio.
Para eliminar el servicio que coincide con una etiqueta, utiliza el siguiente comando. Además, si no hay ningún servicio que coincida con la etiqueta especificada en el comando, no se realizará ninguna operación de eliminación.
kubectl get service
kubectl delete service -l environemt=test
kubectl delete service -l environment=test
kubectl get service
Conclusión
En este artículo, hemos creado un Pod con etiquetas en él y hemos creado y apuntado un servicio a los Pods que coinciden con la etiqueta. También hemos visto cómo se pueden eliminar los Pods y Servicios que coinciden con las etiquetas.