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:
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:
kubectl describe deployment nginx-deployment
Resultado:
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:
kubectl get services
Resultado:
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.
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:
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:
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:
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:
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:
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):
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:
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:
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:
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:
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:
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:
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:
Si miramos los pods asociados a este despliegue, podemos Ve que ahora tiene ocho pods.
kubectl get pod --selector=app=webserver
Resultado:
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:
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:
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:
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:
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:
¡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:
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
Guía Kubernetes
- ¿Qué es Kubernetes (K8s)? Un tutorial básico de Kubernetes
- Mejores prácticas de Kubernetes para mejorar la eficiencia del clúster
- Mejores Prácticas: Cómo Diseñar Aplicaciones para Kubernetes
- Kubernetes Pods: Una introducción
- Kubernetes ReplicaSets: Una breve introducción
- Despliegues de Kubernetes completamente explicados
- Cómo utilizar y gestionar los DaemonSets de Kubernetes
- Cómo funcionan los servicios de Kubernetes
- Uso de Kubernetes Port, TargetPort y NodePort
- Creación y uso de ConfigMaps en Kubernetes
- Introducción a Kubernetes Secrets
- Fundamentos de las redes de Kubernetes
- Explicación de Kubernetes Ingress
- Introducción a las Listas de Helm de Kubernetes
- ¿Qué están el patrón de operador Kubernetes?
- Despliegue de PostgreSQL como un StatefulSet en Kubernetes
- Definición de Recursos Personalizados (CRDs) de Kubernetes Explicada
- 3 Patrones Kubernetes para aplicaciones nativas en la nube
- Explicación de los recursos de cómputo de Kubernetes
- Kubernetes Security for DevOps Pipelines
- Uso de spinnaker con Kubernetes para entrega continua
- Multi-Clústeres Kubernetes: Cómo y por qué utilizarlos
- Monitorización de Kubernetes: Una guía completa
- Kubernetes vs Docker: Una comparación rápida
- Kubernetes vs Docker Swarm: Comparando herramientas de orquestación de contenedores
- Kubernetes vs OpenShift: ¿Cuál es la diferencia?
- Certificaciones Kubernetes: Cómo y por qué Obtén la certificación
Estas publicaciones son mías y no representan necesariamente la posición, estrategias u opinión de BMC.