Implementación

En esta página se describen los objetos de implementación de Kubernetes y su uso en Google Kubernetes Engine.

¿Qué es una implementación?

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.

Las implementaciones usan una plantilla de pod, que contiene una especificación para su pod. 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, usa 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.

Cómo crear implementaciones

Puedes crear una implementación con los comandos kubectl run, 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 crea una implementación llamada nginx, indicada por el campo metadata: name.
  • La implementación crea tres pods repetidos, indicados por el campo replicas.
  • La plantilla del pod, o el campo spec: template, indica que sus pods tienen la etiqueta app: nginx.
  • La especificación de la plantilla del pod, o el campo template: spec, indica que los pods se ejecutan en un contenedor, nginx, que ejecuta la imagen de Docker Hub de nginx en la versión 1.7.9.
  • La implementación abre el puerto 80 para que lo usen los pods.

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 llámalo nginx.
  • Ejecuta la imagen nginx en la versión 1.7.9.
  • Abre el puerto 80 para enviar y recibir tráfico.

Para obtener más información sobre cómo crear implementaciones, consulta 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 automáticamente un lanzamiento de actualización. Puedes usar kubectl, la API de Kubernetes, o el menú Cargas de trabajo de GKE en Google Cloud Platform Console.

De manera predeterminada, cuando una implementación activa una actualización, la implementación detiene los pods, disminuye gradualmente la cantidad de pods a cero, 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 quitan los pods, puedes ejecutar kubectl describe deployments.

Las implementaciones pueden garantizar que se esté ejecutando al menos una réplica menos del número deseado, con un máximo de un Pod no disponible. De manera similar, las implementaciones pueden garantizar que se ejecute al menos una réplica más del número deseado, con un máximo de un pod más de lo que se desea ejecutar.

Puedes revertir una actualización con el comando kubectl rollout undo. También puedes usar kubectl rollout pause para detener temporalmente una implementación.

Cómo administrar implementaciones

A continuación, se muestra una lista de tareas de administración comunes para las implementaciones:

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

¿Te sirvió esta página? Envíanos tu opinión:

Enviar comentarios sobre…