Implementaciones para escalar

KubernetesBeginner
Practicar Ahora

Introducción

En los laboratorios anteriores, creó un único Pod. Aunque los Pods son los componentes básicos, administrarlos manualmente resulta tedioso. Si un Pod falla, debe reiniciarlo manualmente. Si necesita más copias, debe crear más Pods manualmente.

Aquí entra en juego la Deployment.

Una Deployment es un controlador de nivel superior que administra conjuntos de réplicas y Pods por usted. Usted declara cuántas réplicas deben existir y qué plantilla de Pod deben usar, y Kubernetes trabaja para mantener el estado real alineado con esa declaración.

El cambio fundamental consiste en pasar de administrar un Pod individual a administrar una carga de trabajo repetible. Un solo Pod es frágil porque representa una única instancia. Una Deployment describe un patrón para crear Pods y establece cuántos deben existir. Ese patrón hace posible el escalado y la autorrecuperación.

En este laboratorio, aprenderá a:

  • Crear un Manager estricto (Deployment) con un objetivo específico (3 réplicas).
  • Observar cómo el Manager contrata trabajadores (Pods).
  • «Eliminar» un trabajador para probar la reacción del Manager (autorrecuperación).
  • Pedir al Manager que contrate más trabajadores (escalado).

Crear el YAML de la Deployment

En este paso, escribirá la descripción del puesto para su Manager. Se trata de un archivo YAML que define qué imagen se ejecutará y cuántas copias (réplicas) desea.

Observe la estructura adicional en comparación con un manifiesto de Pod normal. Una Deployment contiene un selector y una template. El selector indica a Kubernetes qué Pods pertenecen a esta Deployment, y la plantilla describe cómo deben crearse los Pods nuevos. Estas dos partes deben mantenerse alineadas; de lo contrario, la Deployment no administrará correctamente los Pods previstos.

Primero, compruebe que se encuentra en el directorio del proyecto:

cd ~/project

Cree un archivo nuevo llamado deployment.yaml con nano:

nano deployment.yaml

Pegue la siguiente configuración en el archivo. Preste atención a la línea replicas: 3: aquí se define el número de integrantes de su equipo.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx:1.14.2
          ports:
            - containerPort: 80

Para guardar el archivo, presione Ctrl+X, después Y y, por último, Enter.

Este archivo indica a Kubernetes: «Cree una Deployment llamada nginx-deployment. Asegúrese de que siempre haya 3 Pods ejecutando la imagen nginx:1.14.2. Si necesita encontrar estos Pods, busque los que tengan la etiqueta app: nginx».

Aplicar y observar

Ahora que tiene la descripción del puesto, contrate al manager. Aplique la configuración al clúster:

Al crear una Deployment, Kubernetes suele crear entre bastidores otro objeto llamado ReplicaSet. El ReplicaSet es el componente directamente responsable de mantener activos el número de Pods solicitado. Por ahora, los principiantes no necesitan administrar los ReplicaSets directamente, pero es útil saber que existen porque aparecerán con frecuencia en la salida de los comandos.

kubectl apply -f deployment.yaml

Kubernetes confirmará: deployment.apps/nginx-deployment created.

La Deployment (el Manager) comenzará inmediatamente a crear 3 Pods. Para verlos rápidamente, ejecute:

kubectl get pods

Debería ver 3 Pods diferentes, todos con nombres que comienzan por nginx-deployment-:

NAME                                READY   STATUS    RESTARTS   AGE
nginx-deployment-66b6c48dd5-8j64w   1/1     Running   0          5s
nginx-deployment-66b6c48dd5-d95l2   1/1     Running   0          5s
nginx-deployment-66b6c48dd5-lzr5w   1/1     Running   0          5s

También puede comprobar el estado de la propia Deployment:

kubectl get deployments

Debería mostrar READY 3/3, lo que confirma que las 3 réplicas solicitadas están activas y en ejecución.

Probar la autorrecuperación

Una de las funciones más potentes de Kubernetes es la autorrecuperación. La Deployment garantiza que el número real de Pods coincida siempre con el número deseado (3). Si falta uno, lo reemplaza inmediatamente.

Esto funciona porque Kubernetes compara continuamente el estado real con el estado deseado. Eliminar un Pod no cambia el número de réplicas deseado almacenado en la Deployment, por lo que el sistema interpreta la eliminación como una desviación y crea un reemplazo.

Vamos a comprobarlo eliminando manualmente uno de los Pods.

Primero, vuelva a enumerar los Pods:

kubectl get pods

Copie el nombre completo de uno de los Pods (por ejemplo, nginx-deployment-66b6c48dd5-8j64w).

Ahora elimine ese Pod específico:

kubectl delete pod <paste-pod-name-here>

Kubernetes indicará que el Pod se eliminó. Ejecute inmediatamente kubectl get pods de nuevo:

kubectl get pods

Observará algo sorprendente:

  1. El Pod antiguo está terminando (o ya no aparece).
  2. Ya apareció un Pod nuevo con un nombre diferente y una antigüedad muy pequeña (por ejemplo, 2 segundos).

La Deployment detectó que faltaba un trabajador y contrató inmediatamente a uno nuevo para mantener el equipo en 3 integrantes. Esto garantiza que la aplicación siga disponible incluso si fallan servidores o contenedores individuales.

Escalar

Imagine que su sitio web está ganando popularidad. Ya no bastan 3 servidores web; necesita 5. ¿Debe crear manualmente archivos nuevos o apresurarse a crear Pods?

Escalar una Deployment cambia el número deseado declarado, no solo el conjunto actual de procesos en ejecución. Por eso, el nuevo tamaño se mantiene después de una única acción manual. Los controladores siguen tratando el número actualizado de réplicas como la referencia válida hasta que usted lo cambie de nuevo.

No. Solo tiene que indicar al Manager que aumente el número.

Puede actualizar sobre la marcha el número de réplicas mediante el comando kubectl scale.

Cambie el número de réplicas de 3 a 5:

kubectl scale deployment/nginx-deployment --replicas=5

Ahora observe cómo se aplica el cambio:

kubectl get pods

Verá 5 Pods en ejecución. Se iniciaron dos nuevos para cumplir el requisito actualizado.

También puede reducir la escala. Si disminuye el tráfico, puede ahorrar recursos reduciendo el número:

kubectl scale deployment/nginx-deployment --replicas=2

Ejecute kubectl get pods de nuevo y verá que Kubernetes termina los Pods adicionales hasta que solo queden 2.

Este escalado dinámico es la razón por la que las empresas valoran tanto Kubernetes.

Resumen

En este laboratorio, aprendió sobre la Deployment, el manager inteligente que mantiene sus aplicaciones en ejecución.

Ha logrado:

  1. Crear una Deployment con 3 Pods trabajadores.
  2. Verificar que la Deployment reemplace automáticamente los Pods que fallan (autorrecuperación).
  3. Aumentar y reducir el número de réplicas con un solo comando (escalado).

Ahora comprende por qué rara vez creamos Pods independientes. Las Deployments le proporcionan fiabilidad y flexibilidad, y administran el complejo trabajo de programación y reinicio para que usted no tenga que hacerlo.