Comandos Cordon y Uncordon en Kubernetes

KubernetesKubernetesBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En un clúster de Kubernetes, los nodos pueden entrar en varios estados, como "listo" o "no listo". Los comandos cordon y uncordon se utilizan para controlar la programación de pods en un nodo en particular. El comando cordon marca un nodo como "no programable", lo que evita que se programen nuevos pods en ese nodo, mientras que el comando uncordon marca un nodo como "programable" nuevamente, lo que permite que se programen nuevos pods en ese nodo. En este laboratorio (lab), exploraremos cómo usar estos comandos para controlar la programación de pods en nodos de un clúster de Kubernetes.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL kubernetes(("Kubernetes")) -.-> kubernetes/BasicsGroup(["Basics"]) kubernetes(("Kubernetes")) -.-> kubernetes/BasicCommandsGroup(["Basic Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/TroubleshootingandDebuggingCommandsGroup(["Troubleshooting and Debugging Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/ConfigurationandVersioningGroup(["Configuration and Versioning"]) kubernetes/BasicsGroup -.-> kubernetes/initialization("Initialization") kubernetes/BasicCommandsGroup -.-> kubernetes/get("Get") kubernetes/BasicCommandsGroup -.-> kubernetes/cordon("Cordon") kubernetes/BasicCommandsGroup -.-> kubernetes/uncordon("Uncordon") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/describe("Describe") kubernetes/ConfigurationandVersioningGroup -.-> kubernetes/label("Label") subgraph Lab Skills kubernetes/initialization -.-> lab-9664{{"Comandos Cordon y Uncordon en Kubernetes"}} kubernetes/get -.-> lab-9664{{"Comandos Cordon y Uncordon en Kubernetes"}} kubernetes/cordon -.-> lab-9664{{"Comandos Cordon y Uncordon en Kubernetes"}} kubernetes/uncordon -.-> lab-9664{{"Comandos Cordon y Uncordon en Kubernetes"}} kubernetes/describe -.-> lab-9664{{"Comandos Cordon y Uncordon en Kubernetes"}} kubernetes/label -.-> lab-9664{{"Comandos Cordon y Uncordon en Kubernetes"}} end

Iniciar el clúster de Minikube

Antes de crear recursos, necesitas un clúster de Kubernetes en ejecución. Minikube es un entorno ligero de Kubernetes que se ejecuta en tu máquina local.

  1. Navegar a tu directorio de trabajo:

    Abre la terminal y navega hasta la carpeta de proyecto predeterminada:

    cd /home/labex/project
  2. Iniciar Minikube:

    Inicia Minikube para inicializar un clúster de Kubernetes:

    minikube start
    • Este comando configura un clúster de Kubernetes de un solo nodo en tu máquina local.
    • Minikube puede tardar unos minutos en iniciar, dependiendo del rendimiento de tu sistema.
  3. Verificar que Minikube esté en ejecución:

    Comprueba el estado del clúster de Minikube:

    minikube status
    • Busca componentes como kubelet y apiserver listados como Running (En ejecución).
    • Si el clúster no está en ejecución, vuelve a ejecutar minikube start.

Si encuentras problemas al iniciar Minikube, utiliza minikube delete para restablecer el entorno si es necesario.

Marcar un nodo como no programable (Cordoning a Node)

En este paso, usaremos el comando cordon para marcar un nodo como "no programable", lo que evitará que se programen nuevos pods en ese nodo. Estos son los pasos:

  1. Enumera los nodos del clúster utilizando el siguiente comando:
kubectl get nodes
  1. Marca el nodo como no programable utilizando el siguiente comando:
kubectl cordon minikube
  1. Verifica que el nodo se haya marcado como no programable comprobando el campo SchedulingDisabled en el estado del nodo utilizando el siguiente comando:
kubectl get node | grep SchedulingDisabled

Desmarcar un nodo como no programable (Uncordoning a Node)

En este paso, usaremos el comando uncordon para marcar un nodo como "programable" nuevamente, lo que permitirá que se programen nuevos pods en ese nodo. Estos son los pasos:

  1. Desmarca el nodo como no programable utilizando el siguiente comando:
kubectl uncordon minikube
  1. Verifica que el nodo se haya desmarcado como no programable comprobando el campo SchedulingDisabled en el estado del nodo utilizando el siguiente comando:
kubectl get node | grep SchedulingDisabled

Marcar y desmarcar nodos con pods

En este paso, simularemos un escenario en el que se debe marcar y desmarcar un nodo mientras tiene pods en ejecución. Estos son los pasos:

  1. Ejecuta el siguiente comando para entrar en el directorio /home/labex/project/:
cd /home/labex/project/
  1. Crea una implementación (deployment) llamada "deploy.yaml" con múltiples copias utilizando el siguiente archivo YAML en el directorio /home/labex/project/:
## deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 1
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx:1.16
          ports:
            - containerPort: 80
  1. Marca el nodo como no programable utilizando el siguiente comando:
kubectl cordon minikube
  1. Aplica el archivo YAML utilizando el siguiente comando:
kubectl apply -f deploy.yaml
  1. Enumera los pods en ejecución en los nodos utilizando el siguiente comando:
kubectl get pods -o wide

Comprueba si el Pod se ha programado e iniciado correctamente.

  1. Desmarca el nodo como no programable utilizando el siguiente comando:
kubectl uncordon minikube
  1. Comprueba el estado de los pods en ejecución en el nodo para asegurarte de que se reprogramen en el nodo desmarcado utilizando el siguiente comando:
kubectl get pods -o wide

Usar etiquetas (labels) para marcar y desmarcar nodos

En este paso, usaremos etiquetas (labels) para marcar y desmarcar nodos según criterios específicos. Estos son los pasos:

  1. Etiqueta los nodos del clúster utilizando el siguiente comando:
kubectl label nodes minikube org=labex
  1. Marca como no programables los nodos que tienen la etiqueta especificada utilizando el siguiente comando:
kubectl cordon -l org=labex
  1. Verifica que los nodos se hayan marcado como no programables comprobando el campo SchedulingDisabled en el estado de los nodos utilizando el siguiente comando:
kubectl get node -l org=labex | grep SchedulingDisabled
  1. Desmarca como no programables los nodos que tienen la etiqueta especificada utilizando el siguiente comando:
kubectl uncordon -l org=labex
  1. Verifica que los nodos se hayan desmarcado como no programables comprobando el campo SchedulingDisabled en el estado de los nodos utilizando el siguiente comando:
kubectl get node -l org=labex | grep SchedulingDisabled

Resumen

En este laboratorio, exploramos cómo usar los comandos cordon y uncordon en Kubernetes para controlar la programación de pods en nodos. Aprendimos cómo marcar y desmarcar nodos, incluso con pods en ejecución, y cómo usar etiquetas (labels) para marcar y desmarcar nodos de forma selectiva según criterios específicos. Estos comandos son útiles para gestionar la disponibilidad y la resiliencia de los pods en un clúster de Kubernetes.