Kubernetes Deployment
Desplegar Kubernetes correctamente es determinante para poder administrar de manera eficiente las aplicaciones de contenedor. En este tutorial podrás conocer los pasos básicos y aprender las mejores prácticas para montar un deployment robusto en un entorno de Kubernetes.
¿Qué es un Kubernetes Deployment?
Kubernetes Deployment es un concepto esencial dentro de la plataforma de Kubernetes que simplifica el despliegue y la gestión de aplicaciones en contenedores. Este mecanismo de control hace las veces de intermediario entre la configuración y la ejecución real en el clúster de Kubernetes. Aquí se define el estado deseado de la aplicación, incluidos los detalles de replicación, las imágenes de contenedor y la configuración.
El Kubernetes Deployment se encarga del despliegue automatizado, organiza los contenedores en Kubernetes Pods y los distribuye entre los recursos disponibles en el clúster. Además, permite las rolling updates para realizar actualizaciones por pasos y minimizar los tiempos de inactividad. Las funciones de auto-scaling garantizan el ajuste dinámico de la cantidad de instancias en funcionamiento basándose en la carga del momento.
La gestión de clústeres con Kubernetes también resulta sencilla con IONOS. Con la Cloud Empresarial, dispondrás de tecnología avanzada de infraestructura como servicio (IaaS) y soluciones personalizadas para tu proyecto.
La creación de Kubernetes Deployments puede basarse principalmente en dos métodos:
- Método imperativo
- Método declarativo
Crear un despliegue de Kubernetes con el método imperativo
Con el método imperativo introduces comandos para llevar a cabo las acciones deseadas. De esta manera, puedes crear recursos como pods y servicios, o actualizar la configuración. La modalidad imperativa es ideal para necesidades situacionales o experimentales.
El siguiente comando crea un Kubernetes Deployment llamado nginx-deployment
y lo configura para desplegar un servidor web Nginx en un contenedor a partir de la imagen oficial de Nginx del puerto 80.
$ kubectl create deployment nginx-deployment --image nginx --port=80
shellAunque el enfoque imperativo se ejecuta rápidamente, tiene ciertos inconvenientes. Los pasos del método están directamente vinculados a la situación del momento, lo que complica la repetición de acciones. Esto significa que ejecutar de nuevo el mismo comando no tiene por qué dar pie siempre el mismo estado, sobre todo cuando ha cambiado la situación de salida.
Guía paso por paso del método declarativo
En comparación con el imperativo, el método declarativo tiene un enfoque más abstracto. Se determina el estado deseado de la aplicación en un archivo de configuración y Kubernetes se encarga de que el clúster lo contenga. Aquí se describe lo que se pretende conseguir y Kubernetes se encarga de implementar y realizar el mantenimiento de este estado.
Paso 1: crear archivo de configuración de YAML
Primero, se abre el editor de texto y crea el archivo YAML nginx-deployment.yaml
para definir la configuración del Kubernetes Deployment:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx-container
image: nginx
ports:
- containerPort: 80
yamlEn la sección spec
se indica la configuración deseada. Con replicas: 3
se ordena al deployment que cree tres réplicas (Pods) de la aplicación. En la sección selector
se define cómo se eligen los pods mientras que app=nginx
sirve como criterio de selección. template
es la plantilla de los pods que se van a crear, incluyendo las etiquetas. Dentro de containers
se configura el contenedor que usa la imagen Nginx y escucha al puerto 80.
Paso 2: aplicar la configuración
Ejecuta el siguiente comando en la línea de comandos para aplicar la configuración del clúster:
kubectl apply -f nginx-deployment.yaml
shellLa opción -f
indica la ruta del archivo YAML o JSON que contiene la configuración de los recursos de Kubernetes.
Paso 3: comprobar el estado del despliegue
Este paso te indica si el Kubernetes Deployment se ha creado correctamente y cuántos pods hay disponibles actualmente.
kubectl get deployments nginx-deployment
shellSale lo siguiente:
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deployment 3/3 3 3 2m
shell- READY: indica cuántos pods están en funcionamiento en ese momento en relación con el número deseado.
- UP-TO-DATE: indica cuántos pods se han actualizado con la configuración nueva.
- AVAILABLE: indica cuántos pods hay disponibles y pueden recibir solicitudes.
- AGE: indica cuánto tiempo lleva ejecutándose el despliegue.
Paso 4: mostrar información adicional
Con el siguiente comando recibes los detalles de tu despliegue de Kubernetes, las estrategias utilizadas, las replicaciones reales y deseadas y las etiquetas del Selector.
kubectl describe deployment nginx-deployment
shellDevuelve:
Name: nginx-deployment
Namespace: default
CreationTimestamp: Thu, 22 Feb 2024 12:34:56 +0000
Labels: <none>
Annotations: deployment.kubernetes.io/revision: 1
Selector: app=nginx
Replicas: 3 desired | 3 updated | 3 total | 3 available | 0 unavailable
StrategyType: RollingUpdate
MinReadySeconds: 0
RollingUpdateStrategy: 25% max unavailable, 25% max surge
shellLa estrategia de actualización se configura como un rolling update, con una falta de disponibilidad máxima del 25 % y con un aumento de hasta el 25 % de pods adicionales durante una actualización.
Paso 5: escalar el despliegue
Para ajustar el número de pods de un Kubernetes Deployment, usa el comando kubectl scale
.
kubectl scale deployment nginx-deployment --replicas=2
shellUna vez ejecutado este comando, Kubernetes actualizará el deployment y se asegurará de que disponga del número de réplicas deseadas. En el ejemplo se reduce el número de pods en funcionamiento a 2.
Estrategias de despliegue de Kubernetes
Las estrategias de despliegue de Kubernetes determinan cómo se implementan los cambios en una aplicación de un clúster.
- Rolling Deployment (estándar): la estrategia Rolling es el método de despliegue de Kubernetes por defecto. Los pods nuevos se van creando por etapas, mientras que los antiguos se van eliminando gradualmente. Esto permite mantener una disponibilidad continuada durante el proceso de actualización.
- Recreate Deployment: en esta estrategia primero se eliminan todos los pods existentes y luego se inician los pods actualizados. Con este método pueden perderse temporalmente el servicio ya que durante el proceso de Recreate no hay ningún pod disponible.
- Blue/Green Deployment: aquí se crean dos conjuntos de pods (azules y verdes): uno representa la versión actual de la aplicación y el otro la versión nueva. Asignando etiquetas específicas a los pods, el tráfico puede dirigirse entre ambas versiones sin problema alguno. Puede alternarse entre ambas versiones y revertir de manera sencilla.
Revertir Kubernetes Deployment
Si surge un fallo en la versión más nueva de tu aplicación, es esencial que se revierta tan pronto como se pueda. En Kubernetes puedes iniciar el proceso de rollback comprobando el historial de revisiones de tu deployment y si es necesario volviendo a una versión anterior.
Controlar historial de revisión
Usa este comando para ver el historial de revisiones de tu deployment:
kubectl rollout history deployment/nginx-deployment
shellVolver a una versión anterior
Este comando te hace volver a la última revisión que considera estable:
kubectl rollout undo deployment/nginx-deployment
shellVolver a una versión concreta
Si quieres volver a una versión concreta, introduce el siguiente comando y el número de revisión deseado:
kubectl rollout undo deployment/nginx-deployment --to-revision=1
shellSi estás empezando a usar Kubernetes, te recomendamos que eches un vistazo al tutorial de Kubernetes de nuestra Digital Guide.