Desplegar una aplicación de Linux sin reconocimiento del estado


En esta página se explica cómo desplegar una aplicación de Linux sin reconocimiento del estado a través de Google Kubernetes Engine (GKE). También puedes consultar cómo desplegar una aplicación de Windows sin reconocimiento del estado.

Información general

Las aplicaciones sin estado son aplicaciones que no almacenan datos ni el estado de la aplicación en el clúster ni en el almacenamiento persistente. En su lugar, los datos y el estado de la aplicación permanecen en el cliente, lo que hace que las aplicaciones sin estado sean más escalables. Por ejemplo, una aplicación frontend no tiene estado: despliegas varias réplicas para aumentar su disponibilidad y reducir la escala cuando la demanda es baja, y las réplicas no necesitan identidades únicas.

Kubernetes usa el controlador Deployment para desplegar aplicaciones sin estado como Pods uniformes y no únicos. Las implementaciones gestionan el estado deseado de tu aplicación: cuántos pods deben ejecutar tu aplicación, qué versión de la imagen de contenedor se debe ejecutar, cómo se deben etiquetar los pods, etc. El estado deseado se puede cambiar de forma dinámica mediante actualizaciones de la especificación de pod de la implementación.

Las aplicaciones sin estado se diferencian de las aplicaciones con estado, que usan almacenamiento persistente para guardar datos y StatefulSets para desplegar pods con identidades únicas.

Antes de empezar

Antes de empezar, asegúrate de haber realizado las siguientes tareas:

  • Habilita la API de Google Kubernetes Engine.
  • Habilitar la API de Google Kubernetes Engine
  • Si quieres usar Google Cloud CLI para esta tarea, instálala y, a continuación, inicialízala. Si ya has instalado la gcloud CLI, obtén la versión más reciente ejecutando gcloud components update.
  • Asegúrate de que tu aplicación en contenedores esté almacenada en un registro de imágenes, como Artifact Registry.

  • Si no tienes mucha experiencia con GKE, debes completar la guía de inicio rápido, en la que habilitarás la API de GKE y aprenderás cómo funciona el producto.

Anatomía de un despliegue

A continuación, se muestra un ejemplo de un archivo de manifiesto de Deployment sencillo. Este Deployment crea tres pods replicados etiquetados como run=my-app que ejecutan la imagen hello-app almacenada en Artifact Registry:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 3
  selector:
    matchLabels:
      run: my-app
  template:
    metadata:
      labels:
        run: my-app
    spec:
      containers:
      - name: hello-app
        image: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0

En este ejemplo:

  • .spec.replicas es el número de pods replicados que gestiona el despliegue.
  • .spec.template.metadata.labels: es la etiqueta que se asigna a cada pod y que la implementación usa para gestionar los pods.
  • .spec.template.spec: es la especificación del pod, que define cómo debe ejecutarse cada pod. spec.containers incluye el nombre del contenedor que se va a ejecutar en cada pod y la imagen del contenedor que se debe ejecutar.

Para obtener más información sobre la especificación de Deployment, consulta la referencia de la API Deployment.

Creando un despliegue

Para crear una implementación, puedes usar uno de los siguientes métodos:

  • Puedes usar la función de implementación del menú Cargas de trabajo de la Google Cloud consola para crear una implementación sencilla a partir de una imagen de contenedor que hayas almacenado en Artifact Registry.
  • Puedes escribir un manifiesto de implementación y ejecutar kubectl apply para crear el recurso.

kubectl apply

Puedes crear y actualizar implementaciones de forma declarativa a partir de archivos de manifiesto con kubectl apply. Este método también conserva las actualizaciones realizadas en los recursos activos sin combinar los cambios en los archivos de manifiesto.

Para crear un Deployment a partir de su archivo de manifiesto, ejecuta el siguiente comando:

kubectl apply -f DEPLOYMENT_FILE

Sustituye DEPLOYMENT_FILE por el archivo de manifiesto, como config.yaml.

También puedes usar kubectl apply -f DIRECTORY/ para crear todos los objetos (excepto los que ya existan) definidos en los archivos de manifiesto almacenados en un directorio.

Consola

Para crear una implementación, sigue estos pasos:

  1. Ve a la página Cargas de trabajo de la Google Cloud consola.

    Ve a Cargas de trabajo.

  2. Haz clic en Desplegar.

  3. En Especificar contenedor, seleccione una de las siguientes opciones:

    • Imagen de contenedor que ya existe para elegir una imagen de contenedor disponible en Artifact Registry o Docker Hub. En Ruta de la imagen, introduce la ruta a la imagen del contenedor y la versión.

    • Nueva imagen de contenedor para usar una imagen creada con Cloud Source Repositories y Cloud Build.

  4. También puedes configurar tu implementación con lo siguiente:

    • Variables de entorno que se transferirán al contenedor.
    • Comandos iniciales para personalizar el punto de entrada del contenedor en el tiempo de ejecución.
  5. Haz clic en Hecho y, a continuación, en Continuar.

  6. En la sección Configuración, asigna un Nombre de aplicación a tu implementación y especifica el Espacio de nombres de Kubernetes en el que se va a implementar.

  7. Opcionalmente, en Etiquetas, puede añadir etiquetas de Kubernetes a la implementación.

  8. Para guardar el archivo YAML que crea este despliegue y actualizarlo más adelante, haz clic en Ver YAML. Copia y pega el archivo YAML en un archivo, guárdalo y haz clic en Cerrar en el cuadro de diálogo Salida YAML.

  9. En el menú desplegable Clúster de Kubernetes, elige el clúster que quieras.

  10. Haz clic en Desplegar.

Inspeccionar el despliegue

Después de crear un Deployment, puedes usar uno de los siguientes métodos para inspeccionarlo:

kubectl

Si quieres obtener información detallada sobre el despliegue, ejecuta el siguiente comando:

kubectl describe deployment DEPLOYMENT_NAME

Sustituye DEPLOYMENT_NAME por el nombre de la implementación.

Si quieres enumerar los pods creados por el despliegue, ejecuta el siguiente comando:

kubectl get pods -l KEY=VALUE

En este comando, la marca -l indica a kubectl que obtenga todos los pods con una etiqueta de par clave-valor. Por ejemplo, si has etiquetado la implementación run: my-app, puedes ejecutar kubectl get pods -l run=my-app para ver los pods con esa etiqueta.

Si quieres obtener información sobre un pod específico, usa este comando:

kubectl describe pod POD_NAME

Para ver el manifiesto de un Deployment, ejecuta el siguiente comando:

kubectl get deployments DEPLOYMENT_NAME -o yaml

Este comando permite ver la configuración activa del despliegue en formato YAML.

Consola

Para inspeccionar una implementación, sigue estos pasos:

  1. Ve a la página Cargas de trabajo de la Google Cloud consola.

    Ve a Cargas de trabajo.

  2. En la lista de cargas de trabajo, haga clic en el nombre del despliegue que quiera inspeccionar.

  3. En la página Detalles de la implementación, haz una de las siguientes acciones:

    • Haga clic en la pestaña Historial de revisiones para ver el historial de revisiones de la implementación.
    • Haga clic en la pestaña Eventos para ver todos los eventos relacionados con la implementación.
    • Haga clic en la pestaña Registros para ver los registros de actividad del contenedor en la implementación.
    • Haz clic en la pestaña YAML para ver, copiar y descargar el manifiesto YAML del despliegue.

Actualizar el despliegue

Puedes implementar actualizaciones en la especificación de los pods de una implementación, como su imagen, el uso o las solicitudes de recursos, o la configuración.

Puedes actualizar una implementación con los siguientes métodos:

  • Puedes usar el menú Actualización continua y el editor de YAML del menú Cargas de trabajo de la consolaGoogle Cloud .
  • Puedes hacer cambios en un archivo de manifiesto y aplicarlos con kubectl apply.
  • Puedes actualizar los campos image, resources o selector de la especificación de Pod mediante kubectl set.
  • Puedes actualizar una implementación directamente desde tu shell o en un editor que prefieras con kubectl edit.

kubectl apply

Para actualizar la implementación, aplica un archivo de manifiesto nuevo o actualizado. Esto es útil para hacer varios cambios en tu implementación, como escalar o especificar una nueva versión de tu aplicación.

Puedes actualizar un despliegue al ejecutar el siguiente comando:

kubectl apply -f DEPLOYMENT_FILE

Sustituye DEPLOYMENT_FILE por el archivo de manifiesto actualizado.

El comando kubectl apply aplica un archivo de manifiesto a un recurso. Si el recurso especificado no existe, lo crea el comando.

kubectl set

Puedes usar kubectl set para cambiar la imagen, los recursos (solicitudes o límites) o los campos de selector de una implementación.

Si deseas cambiar una imagen de despliegue, ejecuta el siguiente comando:

kubectl set image deployment DEPLOYMENT_NAME IMAGE IMAGE:TAG

Por ejemplo, para actualizar un Deployment de la versión 1.7.9 a la 1.9.1, ejecuta el siguiente comando:nginx

kubectl set image deployment nginx nginx=nginx:1.9.1

Consola

Para acceder al menú Actualización continua de la implementación, sigue estos pasos:

  1. Ve a la página Cargas de trabajo de la Google Cloud consola.

    Ve a Cargas de trabajo.

  2. En la lista de cargas de trabajo, haga clic en el nombre del Deployment que quiera modificar.

  3. Haz clic en Acciones > Actualización continua.

  4. Configura los siguientes parámetros opcionales de la estrategia de actualización:

    • Número mínimo de segundos para estar listo: especifica el número mínimo de segundos en que deben estar listos los pods creados recientemente para que se consideren disponibles.
    • Pico máximo: especifica el número máximo de pods que se pueden crear por encima del número de pods deseados. El valor puede ser un número absoluto o un porcentaje.
    • Máximo no disponible: especifica el número máximo de pods que pueden no estar disponibles durante el proceso de actualización. El valor puede ser un número absoluto o un porcentaje.
  5. En Imágenes de contenedor, introduce la ruta y la versión de la imagen de contenedor actualizada.

  6. Haz clic en Actualizar.

Restaurar una actualización

Puedes revertir una actualización con kubectl rollout undo.

Puedes revertir una actualización en curso o completada a su revisión anterior:

kubectl rollout undo deployment my-deployment

También puedes volver a una revisión específica:

kubectl rollout undo deployment my-deployment --to-revision=3

Escalar un despliegue

Puedes escalar manualmente una implementación mediante la Google Cloud consola o kubectl scale.

Puedes consultar más información sobre el autoescalado de implementaciones.

kubectl

kubectl scale se puede usar en cualquier momento para escalar tu Deployment.

Si quieres escalar manualmente un despliegue, ejecuta este comando:

kubectl scale deployment DEPLOYMENT_NAME --replicas NUMBER_OF_REPLICAS

Sustituye NUMBER_OF_REPLICAS por el número de réplicas de Pods que quieras.

Consola

Si deseas escalar un despliegue, lleva a cabo los siguientes pasos:

  1. Ve a la página Cargas de trabajo de la Google Cloud consola.

    Ve a Cargas de trabajo.

  2. En la lista de cargas de trabajo, haga clic en el nombre del Deployment que quiera modificar.

  3. Haz clic en Acciones > Escalar > Editar réplicas.

  4. Introduce el nuevo número de Réplicas del despliegue.

  5. Haz clic en Escalar.

Eliminar un despliegue

Puedes eliminar una implementación mediante la consola Google Cloud o kubectl delete.

kubectl

Si quieres eliminar un despliegue, ejecuta este comando:

kubectl delete deployment DEPLOYMENT_NAME

Consola

Si quieres eliminar un despliegue, lleva a cabo estos pasos:

  1. Ve a la página Cargas de trabajo de la Google Cloud consola.

    Ve a Cargas de trabajo.

  2. En la lista de cargas de trabajo, selecciona una o varias implementaciones que quieras eliminar.

  3. Haz clic en Eliminar.

  4. Cuando se te pida que confirmes la acción, haz clic en Eliminar.

Siguientes pasos