En esta página, se describen los objetos de implementación de Kubernetes y su uso en Google Kubernetes Engine (GKE).
¿Qué es un objeto Deployment?
Las implementaciones representan un conjunto de varios Pods idénticos sin identidades exclusivas. Una implementación ejecuta varias réplicas de tu aplicación y reemplaza automáticamente cualquier instancia que falle o deje de responder. De esta manera, las implementaciones ayudan a garantizar que una o más instancias de tu aplicación estén disponibles para entregar solicitudes de usuarios. El controlador de implementación de Kubernetes administra las implementaciones.
Los Deployments usan una plantilla de Pod, que contiene una especificación para sus Pods. La especificación del pod determina cómo debe verse cada pod: qué aplicaciones deben ejecutarse dentro de sus contenedores, qué volúmenes deben activar, sus etiquetas y más.
Cuando se cambia la plantilla de pod de una implementación, se crean nuevos pods automáticamente, uno a la vez.
Patrones de uso
Las implementaciones son adecuadas para las aplicaciones sin estado que usan volúmenes ReadOnlyMany o ReadWriteMany activados en varias réplicas, pero no son adecuadas para cargas de trabajo que usan volúmenes ReadWriteOnce. Para las aplicaciones con estado que usan volúmenes ReadWriteOnce, debes usar StatefulSets. Los StatefulSets están diseñados para implementar aplicaciones con estado y aplicaciones agrupadas que guardan datos en almacenamiento continuo, como los discos persistentes de Compute Engine. Los StatefulSets son adecuados para implementar Kafka, MySQL, Redis, ZooKeeper y otras aplicaciones que necesitan identidades exclusivas y persistentes y nombres de host estables.
Crea implementaciones
Puedes crear una implementación con los comandos kubectl apply
o kubectl create
.
Una vez creada, la implementación garantiza que la cantidad deseada de pods esté en ejecución y disponible en todo momento. La implementación reemplaza automáticamente los pods que fallan o son expulsados de sus nodos.
A continuación, se muestra un ejemplo de un archivo de manifiesto de una implementación en formato YAML:
apiVersion: apps/v1 kind: Deployment metadata: name: nginx spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.7.9 ports: - containerPort: 80
En este ejemplo, se dan las siguientes situaciones:
- Se crea una implementación con el nombre
nginx
, indicada por el campometadata: name
. - La implementación crea tres pods replicados, indicados por el campo
replicas
. - La plantilla del pod o el campo
spec: template
indican que sus pods tienen la etiquetaapp: nginx
. - La especificación de la plantilla del pod o el campo
template: spec
indican que los pods ejecutan un contenedor,nginx
, que se ejecuta en la imagennginx
Docker Hub en la versión 1.7.9. - El Deployment abre el puerto 80 para que lo usen los Pods.
Para obtener más información sobre las especificaciones de Deployment, consulta la documentación de la API de Kubernetes.
En resumen, la plantilla del pod contiene las siguientes instrucciones para los pods que crea esta implementación:
- Cada pod tiene la etiqueta
app: nginx
. - Crea un contenedor y asígnele el nombre
nginx
. - Ejecuta la imagen
nginx
en la versión1.7.9
. - Abre el puerto
80
para enviar y recibir tráfico.
Para obtener más información sobre cómo crear implementaciones, consulta la sección sobre cómo crear una implementación.
Cómo actualizar implementaciones
Puedes actualizar una implementación si cambias la especificación de la plantilla del pod de la implementación. Realizar cambios en el campo de especificación activa un lanzamiento de actualización de forma automática. Puedes usar kubectl
, la API de Kubernetes o el menú de Cargas de trabajo de GKE en la consola de Google Cloud.
De forma predeterminada, cuando una implementación activa una actualización, la implementación detiene los pods, disminuye la cantidad de pods a cero de forma gradual y, luego, desvía y finaliza los pods. Luego, la implementación usa la plantilla del pod actualizada para abrir nuevos pods.
Los pods antiguos no se quitan hasta que se ejecute un número suficiente de pods nuevos, y estos no se crearán hasta que se haya quitado una cantidad suficiente de pods antiguos.
Para ver en qué orden se activan y se quitan los Pods, puedes ejecutar kubectl describe deployments
.
Los Deployments pueden garantizar que se ejecute al menos una réplica menos de la cantidad deseada, con un máximo de un Pod no disponible. Del mismo modo, los Deployments pueden garantizar que se ejecute como máximo una réplica más de la cantidad deseada, con un máximo de un Pod más que la cantidad deseada en ejecución.
Puedes revertir una actualización con el comando kubectl rollout undo
. También puedes usar kubectl rollout pause
para detener una implementación de manera temporal.
Administra implementaciones
A continuación, se muestra una lista de tareas de administración comunes para las implementaciones:
- Inspeccionar una implementación.
- Escalar una implementación.
- Realizar una ajuste de escala automático de una implementación con un
HorizontalPodAutoscaler
objeto - Borrar una implementación.
Estado y ciclo de vida
Las implementaciones pueden estar en uno de tres estados durante su ciclo de vida: en progreso, completadas o con errores.
El estado en progreso indica que la implementación está en proceso de realizar sus tareas, como abrir o escalar sus pods.
El estado completada indica que la implementación completó con éxito sus tareas, todos sus pods se ejecutan con la última especificación y están disponibles y no hay pods antiguos en ejecución.
El estado con errores indica que la implementación encontró uno o más problemas que impidieron que completara sus tareas. Algunas causas incluyen cuotas o permisos insuficientes, errores de extracción de imagen, rangos de límite o errores de entorno de ejecución. Para investigar la causa de una falla de implementación, puedes ejecutar kubectl get deployment [DEPLOYMENT+NAME] -o yaml
y revisar los mensajes en el campo status: conditions
.
Puedes supervisar el progreso de una implementación o verificar su estado con el comando kubectl rollout status
.
¿Qué sigue?
- Obtén información sobre cómo implementar una aplicación sin estado.
- Obtén información sobre implementaciones en la documentación de Kubernetes.
- Obtén más información sobre Kubernetes.