Despliegues de Kubernetes completamente explicados

Despliegues de Kubernetes completamente explicados

  • ITOps y DevOps
6 min de lectura Actualizado May 20, 2021

Puntos clave: Los despliegues de Kubernetes Permite actualizaciones declarativas para gestionar Pods y ReplicaSets, facilitando actualizaciones de aplicaciones fluidas sin tiempos de inactividad. Permiten a los usuarios escalar, revertir y gestionar despliegues de forma eficiente.

  • La gestión del despliegue incluye comandos clave como kubectl apply, scale y rollout.
  • Los usuarios pueden pausar, reanudar y revertir despliegues fácilmente para mantener la estabilidad de la aplicación.

El despliegue de Kubernetes están el proceso de proporcionar actualizaciones declarativas a Pods y ReplicaSets. Permite a los usuarios declarar el estado deseado en el archivo manifesto (YAML), y el controlador cambiará el estado actual al estado declarado. Así que, veamos cómo Crea y utiliza despliegues de Kubernetes. Voy a explicar te cómo utilizar los despliegues de Kubernetes para simplifica el proceso de despliegue y gestiona, escalar y revertir despliegues. Para los fines de este artículo, utilizaremos un clúster Kubernetes desplegado localmente en un entorno Windows que utiliza el Windows Subsystem for Linux (WSL).

Creando un despliegue de Kubernetes

Primero Crea un despliegue sencillo de Nginx con cuatro réplicas. Como cualquier otra configuración de Kubernetes, un archivo de despliegue contendrá:

  • apiVersion (apps/v1)
  • Tipo (Despliegue)
  • Los metadatos con una sección de especificaciones para Define las réplicas y configuraciones relacionadas con el despliegue

nginx-deployment.yaml

    apiVersion: apps/v1
kind: Deployment
metadata:
  # Define the Deployment Name
  name: nginx-deployment
  labels:
    app: webserver
spec:
  # Define the Number of Pods
  replicas: 4
  # Define the Selector
  selector:
    matchLabels:
      app: webserver
  template:
    metadata:
      labels:
        app: webserver
    spec:
      containers: # Container Details
      - name: nginx
        image: nginx:latest # Image
        ports:
        - containerPort: 80

Podemos Crea el despliegue usando el siguiente comando. Hemos añadido la bandera --record para guardar el comando.

    kubectl apply -f nginx-deployment.yaml --record

Resultado:

Despliegue de Nginx

Hemos definido las siguientes entradas en las secciones de metadatos y especificaciones del archivo de despliegue anterior.

  • El nombre del despliegue y una etiqueta (app: servidor web).
  • El número de réplicas (pods), el selector en el que el controlador seleccionará los pods objetivo. (La etiqueta se está usando para seleccionar los pods necesarios usando el campo matchLabels.) La sección de plantillas contiene la plantilla real del pod. Esta sección define los metadatos que cada pod tendrá con las especificaciones (definición del contenedor). En este caso, hemos definido la imagen Nginx y el puerto del contenedor como 80.

Si comprobamos el clúster de Kubernetes después de un tiempo, podemos Ve que los Pods son desplegados con la plantilla dada. Además, podemos recuperar detalles del despliegue usando el comando describir.

    kubectl get all

Resultado:

kubect
    kubectl describe deployment nginx-deployment

Resultado:

Resultado del despliegue

Exponiendo el RéplicaSet

Ahora hemos creado un despliegue y necesitamos verificar si los servidores web de Nginx se desplegaron correctamente. La forma más sencilla de Lograr esto están Crea un objeto de servicio que exponga el despliegue. Un dato importante a tener en cuenta aquí están que la forma en que exponemos el despliegue y los parámetros pueden variar según las configuraciones del clúster Kubernetes.

    kubectl expose deployment nginx-deployment --type=LoadBalancer --name=nginx-web-server

Resultado:

Balanceador de carga
    kubectl get services

Resultado:

Servicios

Luego podemos navegar al puerto localhost 80 para comprobar si podemos Ve la página de aterrización predeterminada del servidor Nginx como se indica abajo.

Bienvenido

Descubriendo los detalles del despliegue de Kubernetes

Al gestionar un clúster Kubernetes, el primer paso sería comprobar si el despliegue es exitoso. Para ello, podemos utilizar los comandos de estado de despliegue de kubectl y Obtén de despliegue de kubectl.

  • El estado de despliegue de Kubectl informa al usuario si el despliegue ha sido exitoso.
  • El despliegue de Obtén de Kubectl muestra el número deseado y actualizado de réplicas, el número de réplicas en funcionamiento y su disponibilidad. Como se mencionó anteriormente, podemos utilizar el comando kubectl describe para obtener una imagen completa del despliegue.
    kubectl rollout status deployment nginx-deployment
kubectl get deployment nginx-deployment

Resultado:

Estado de despliegue

Podemos obtener información sobre los ReplicaSets creados durante el despliegue usando el comando kubectl Obtén ReplicaSet. Por defecto, Kubernetes añadirá automáticamente un valor hash de pod-plantilla al nombre de ReplicaSet. Sin embargo, no renombres el ReplicaSet porque romperá el despliegue.

    kubectl get replicaset

Resultado:

Replicaset

El comando Obtén pod de kubectl puede usarse para Obtén solo la información sobre los pods relacionada con el despliegue al definir un selector. En este caso, usaremos la etiqueta "app:webserver" como selector.

    kubectl get pod --selector=app=webserver

Resultado:

Servidor web

Gestión de despliegues de Kubernetes

Ahora sabemos cómo Crea un despliegue y recuperar información sobre dicho despliegue. La siguiente etapa están gestionar el despliegue. Lo que diferencia un despliegue de un simple ReplicaSet están que los despliegues Permite a los usuarios actualizar los pods (plantillas de pods) sin causar interrupciones en la aplicación subyacente.

Realizando una actualización continua en un despliegue

Supongamos que necesitamos cambiar la versión del servidor Nginx en nuestro despliegue para dirigir nuestra aplicación a una versión específica del servidor. Podemos hacer esto de cualquiera de las dos:

  • Usando el comando kubectl set image
  • Cambio del archivo de configuración de despliegue

Usando el comando set image

El comando set image puede usarse junto con el nombre del contenedor de la plantilla y el nombre de imagen requerido para actualizar los pods.

    kubectl set image deployment nginx-deployment nginx=nginx:1.19.10

Resultado:

Despliegue de imagen

Vamos a Obtén el proceso de despliegue si ejecutamos el comando de estado de despliegue Obtén inmediatamente.

    kubectl rollout status deployment nginx-deployment

Resultado:

Estado de despliegue

Cambio del archivo de configuración de despliegue

Podemos utilizar el comando editar despliegue para editar el archivo de configuración. Navega por la sección correspondiente (imagen del contenedor) y Haz los cambios necesarios. Kubernetes Comienza el proceso de actualizar los pods en cuanto guardemos la nueva configuración.

    kubectl edit deployment nginx-deployment

Vista de edición de despliegue (nginx-deployment):

Despliegue Editar vista

Estrategias de despliegue

Kubernetes utiliza dos estrategias de despliegue llamadas "Recreate" y "RollingUpdate" para recrear pods. Podemos Define esas estrategias en el campo .spec.strategy.type. La estrategia RollingUpdate es la predeterminada para los despliegues.

  • Recrear eliminará todos los pods existentes antes de crear los nuevos.
  • RollingUpdate recreará los pods de forma progresiva. Además, eliminará y recreará los pods gradualmente sin interrumpir la disponibilidad de la aplicación. Esta estrategia utiliza los valores maxUnavailable y maxSurge para controlar el proceso de actualización progresiva.
    • maxUnavailable define el número máximo de pods que pueden estar no disponibles en el proceso de actualización.
    • maxSurge define el número máximo de pods que se pueden crear.

En nuestro despliegue, no hemos definido explícitamente una estrategia para que Kubernetes utilize la estrategia predeterminada de RollingUpdate. Podemos utilizar el comando describe para verificar la estrategia actual para el despliegue.

    kubectl describe deployment nginx-deployment | grep Strategy

Resultado:

Grep Stratergy

A partir de la salida anterior, podemos deducir que las configuraciones predeterminadas para la estrategia RollingUpdate son 25% para valores máximos de indisponibilidad y 25% para valores máximos de surge. Estamos son creando cuatro réplicas en nuestra configuración. Según la configuración anterior, en el proceso de actualización, un solo pod Obtén destruido mientras que están se crea un solo pod (25% de 4 están 1). Podemos ver los Eventos en el despliegue usando el comando describe para obtén una mejor comprensión del proceso de actualización.

    kubectl describe deployment nginx-deployment

Resultado:

Eventos

Si miramos el ReplicaSet actual, podemos notar que tiene cuatro pods, mientras que el antiguo ReplicaSet no contiene ningún pod.

    kubectl get replicasets

Resultado:

Juegos réplica

Pausar y reanudar despliegues

Los despliegues de Kubernetes permiten pausar y reanudar los despliegues. Esto permite a los usuarios modificar y solucionar problemas sin activar un nuevo despliegue de ReplicaSet. Podemos utilizar el comando "despliegue pausa desplegable" para pausar el despliegue.

    kubectl rollout pause deploy nginx-deployment

Resultado:

Pausa del despliegue

Ahora, si actualizamos la imagen de Nginx en el estado pausado, el controlador aceptará el cambio, pero no activará el nuevo despliegue de ReplicaSet. Si miramos el estado del despliegue, indicará un cambio pendiente.

    kubectl set image deployment nginx-deployment nginx=nginx:1.20 --record
kubectl rollout status deployment nginx-deployment

Resultado:

Despliegue de conjuntos de imágenes

te puede ejecutar simplemente el comando "despliegue reanudar despliegue" para reanudar el despliegue.

    kubectl rollout resume deploy nginx-deployment
kubectl rollout status deployment nginx-deployment

Resultado:

Reanudar el despliegue

Despliegues de escalado

Como los despliegues dependen de ReplicaSets para gestionar los pods, podemos escalar hacia arriba o hacia abajo el número de pods. Este escalado puede realizarse:

  • Manualmente
  • Configurando una regla de escalado automático

Escalado manual

Podemos utilizar el comando scale con el parámetro réplica para escalar el despliegue al número deseado. Por ejemplo, utiliza el siguiente comando para escalar nuestro despliegue de 4 a 8 pods.

    kubectl scale deployment nginx-deployment --replicas=8
kubectl rollout status deployment nginx-deployment

Resultado:

Despojamiento de escalas

Si miramos los pods asociados a este despliegue, podemos Ve que ahora tiene ocho pods.

    kubectl get pod --selector=app=webserver

Resultado:

Servidor de Aplicaciones Selector

Autoescalado

La mejor práctica para escalar despliegues sería configurar una regla de autoescalado para que los pods escalen según umbrales predefinidos. Así que, vamos a Crear una regla de autoescalado para nuestro despliegue, que escalará según la carga de CPU del nodo.

    kubectl autoscale deployment nginx-deployment --min=5 --max=10 --cpu-percent=70

Resultado:

Despliegue Autoscale

Según la configuración anterior, si la carga de la CPU está mayor al 70%, el despliegue se escalará hasta que se están alcanzado el número máximo de pods (máximo de diez pods). Por otro lado, se reducirá gradualmente hasta que son cinco pods (mínimo cinco pods) cuando la carga están reducida.

Revertir un despliegue

Kubernetes también permite revertir despliegues a la versión anterior. Esta están una función crucial que permite a los usuarios deshacer cambios en el despliegue. Por ejemplo, si se desplegó un error crítico de producción en el clúster, podemos simplemente revertir el despliegue a la versión anterior fácilmente sin tiempo de inactividad hasta que se están corregidos. Supongamos que hemos actualizado nuestra configuración con una imagen incorrecta. (Usaremos el servidor web caddie en este ejemplo.)

    kubectl set image deployment nginx-deployment nginx=caddy:latest --record

Resultado:

Nginx Caddy

Aquí están donde entra en juego la función de historial del controlador de despliegue. El controlador lleva un registro de cualquier cambio en la plantilla del pod y los guarda en el historial. Cuando especificamos la bandera de registro en un comando, se reflejará en el historial.

    kubectl rollout history deployment nginx-deployment

Resultado:

Historial de despliegue

Podemos utilizar el número de la revisión para informar al controlador de despliegue que revierta nuestro despliegue a la versión anterior. Primero, verificemos si la revisión que sons vamos a revertir es la correcta. Aquí, son intentamos retroceder a la tercera revisión. Simplemente especifica la revisión en el comando de historial para Obtén los detalles de la revisión indicada.

    kubectl rollout history deployment nginx-deployment --revision=3

Resultado:

Revisión

Tras confirmar la revisión, podemos utilizar el comando "kubectl rollout undo" con el parámetro "to-revision" para revertir el despliegue.

    kubectl rollout undo deployment nginx-deployment --to-revision=3
kubectl rollout status deployment nginx-deployment

Resultado:

Despliegue a revisión

¡Eso es todo! Ahora hemos revertido con éxito el despliegue. Después del despliegue revertido, no podremos Ve la tercera revisión ya que la hemos desplegado con la configuración actual. Sin embargo, podremos Ve un nuevo registro con un número de revisión más alto para el despliegue recién revertido.

    kubectl rollout history deployment nginx-deployment

Resultado:

Causa del cambio

Resumen de los despliegues de K8s

En este artículo, solo hemos arañado la superficie de las capacidades de los despliegues de Kubernetes. Los usuarios pueden Crea aplicaciones contenedorizadas más robustas para satisfacer cualquier necesidad combinando despliegues con todas las demás funciones de Kubernetes.

Lecturas relacionadas

Estas publicaciones son mías y no representan necesariamente la posición, estrategias u opinión de BMC.

Más de ITOps y DevOps

¿Te interesa saber más de BMC?

El Brief están nuestro correo mensual sobre el mainframe y la orquestación empresarial: investigación, historias de clientes, noticias de productos, eventos.

Al registrarse para esta oferta te son confirmar que te leído y aceptado la Política de Privacidad de BMC.

Tú te has suscrito a The Brief

El Brief abarca la orquestación de mainframe y empresa—BMC AMI y Control-M—y la investigación de analistas, despliegues de clientes y eventos en ambas áreas.