Crear manchas y tolerancias en Kubernetes

Los defectos y las tolerancias trabajan juntos para asegurar que los pods no se programen en nodos inapropiados. Se pueden aplicar uno o varios taints a un nodo, lo que significa que el nodo no debe aceptar ningún pod que no tolere los taints. Los pods que tienen tolerancia sólo pueden desplegarse en los nodos con los taints.

Por ejemplo, si quieres dedicar algunos nodos para uso exclusivo de un determinado conjunto de pods, puedes añadir una mancha a esos nodos y luego añadir la tolerancia correspondiente a los pods. Los pods con las tolerancias podrán entonces utilizar los nodos manchados, así como cualquier otro nodo del clúster. Esto asegura que los pods que no tienen tolerancia nunca puedan desplegarse en los nodos con taints.

Los nodos contaminados son pares clave-valor asociados a un efecto. Estos son los efectos disponibles:

  • NoSchedule: Los pods que no toleran esta mancha no se programan en el nodo, pero los pods existentes no se eliminan del nodo.
  • PreferirNoProgramar: Kubernetes evita programar en el nodo los Pods que no toleran esta mancha.
  • NoEjecutar: El Pod se elimina del nodo si ya se está ejecutando en él, y no se programa en el nodo si aún no se está ejecutando en él.

En este artículo, crearemos una mancha en un nodo trabajador y añadiremos tolerancia a los pods. Esto nos ayudará a entender que el pod que no tiene tolerancia no se desplegará en el nodo trabajador con la mancha en él.

Requisitos previos

  1. Cluster Kubernetes con al menos 1 nodo trabajador.
    Si quieres aprender a crear un Clúster Kubernetes, haz clic aquí. Esta guía te ayudará a crear un cluster de Kubernetes con 1 Maestro y 2 Nodos en Instancias EC2 de AWS Ubuntu 18.04.

Qué haremos

  1. Crear Taints y Toleraciones

Crear defectos y tolerancias

Primero, vamos a comprobar los nodos disponibles en el clúster.

kubectl  get nodes #Get current pods in the cluster.

get-nodes

Utiliza el comando «describe» para comprobar los Taints del nodo01

kubectl describe node node01 #Describe node01 node to extract more details.

describir-nodo1

En la captura de pantalla anterior, se puede ver que el nodo no tiene ningún Taint.

Añadamos el Taint «app=fronend:NoSchedule» al Nodo01

kubectl taint nodes node01 app=fronend:NoSchedule #Add taint to the node01 node.
kubectl describe node node01 #Extract details of the node01 node.

añadir una mancha en el nodo1

En la captura de pantalla anterior, se puede ver que el Nodo01 tiene ahora una Mancha.

Crea un archivo y añade a él la siguiente definición de pod.

vim my-pod.yml #Create a pod definition.
apiVersion: v1
kind: Pod
metadata:
  name: frontend
spec:
  containers:
  - image: nginx
    name: frontend-nginx

vaina-sin-toleración

Esta definición de pod no tiene ninguna Tolerancia en ella.

Para crear un pod que no tenga ninguna Toleración, ejecuta el siguiente comando.

kubectl create -f my-pod.yml #Create a pod.
kubectl get pods #Get details of the pod.

crear un pod

Utiliza el comando «describir» para obtener más detalles del pod.

kubectl get pods #Get details of the pod.
kubectl describe pod frontend #Extract more details of the Pod.

Describe la cápsula

En la captura de pantalla anterior, se puede ver que el Pod no se ha programado. La razón es que el Nodo01 tiene una Mancha pero no hay Tolerancia en el Pod. \

Crea otro archivo con la siguiente definición de pod. Este Pod tiene una Toleración en él.

vim my-mysql-pod.yml #Create a pod definition.
apiVersion: v1
kind: Pod
metadata:
  name: backend
spec:
  containers:
    - name: mysql
      image: mysql:latest
      env:
        - name: "MYSQL_USER"
          value: "mysql"
        - name: "MYSQL_PASSWORD"
          value: "mysql"
        - name: "MYSQL_DATABASE"
          value: "sample"
        - name: "MYSQL_ROOT_PASSWORD"
          value: "supersecret"
      ports:
        - containerPort: 3306
  tolerations:
  - key: app
    value: fronend
    effect: NoSchedule
    operator: Equal

pod-con-toleración

Ahora, crea un Pod con«mi-mysql-pod.yml«.

kubectl get pods #Get current pods in the cluster.
kubectl create -f my-mysql-pod.yml #Create a pod.
kubectl get pods #Get current pods in the cluster.

get-pods

En la captura de pantalla anterior, se puede ver que se ha creado un nuevo Pod «backend» y está en estado de ejecución.

La razón de esto es que el Pod tiene Tolerancia en él, lo que le permite desplegarse en el Nodo con una Mancha.

Utiliza el comando «describir» para ver más detalles del Pod.

kubectl  describe  pod backend #Describe the pod to get more details of it.

Describe la cápsula

Conclusión

En este artículo, primero hemos creado una Mancha en el nodo y luego hemos intentado desplegar un Pod que no tiene Tolerancia. Vimos que el Pod no se despliega. Más tarde creamos un Pod añadido que tiene una Toleración en él. Esta Toleración permite que el Pod se despliegue en el Nodo node01 con Taint en él.

También te podría gustar...