Desplegar una aplicación de Linux sin reconocimiento del estado

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

Información general

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

Kubernetes usa el controlador de despliegue para desplegar aplicaciones sin reconocimiento del estado como pods no unificados. Los despliegues gestionan el estado deseado de tu aplicación: la cantidad de pods que debe ejecutar tu aplicación, la versión de la imagen del contenedor, las etiquetas que deben incluirse, etc. El estado deseado se puede cambiar de forma dinámica mediante actualizaciones de la especificación del pod del despliegue.

Las aplicaciones sin reconocimiento del estado contrastan con las aplicaciones con reconocimiento del estado, en las que se usa el almacenamiento persistente para guardar los datos y los que utilizan Statefulkins para desplegar pods. con identidades únicas.

Antes de empezar

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

Para configurar los ajustes predeterminados de gcloud, utiliza uno de los siguientes métodos:

  • Si utilizas gcloud init, puedes guiar por los valores predeterminados.
  • Mediante gcloud config, para definir de forma individual el ID de proyecto, la zona y la región.

Usar gcloud init

Si recibes el error One of [--zone, --region] must be supplied: Please specify location, rellena esta sección.

  1. Ejecuta gcloud init y sigue las instrucciones:

    gcloud init

    Si estás utilizando SSH en un servidor remoto, utiliza la marca --console-only para impedir que el comando inicie un navegador:

    gcloud init --console-only
  2. Sigue las instrucciones para autorizar a gcloud a usar tu cuenta de Google Cloud.
  3. Crea una configuración o selecciona una que ya tengas.
  4. Elige un proyecto de Google Cloud.
  5. Elige una zona de Compute Engine predeterminada para los clústeres de zona o una región para los clústeres regionales o autopilotos.

Usar la configuración de gcloud

  • Configura tu ID de proyecto predeterminado:
    gcloud config set project PROJECT_ID
  • Si trabajas con clústeres de zonas, define tu zona de Compute Engine predeterminada:
    gcloud config set compute/zone COMPUTE_ZONE
  • Si trabajas con clústeres de Autopilot o regionales, define tu región de Compute Engine predeterminada:
    gcloud config set compute/region COMPUTE_REGION
  • Actualiza gcloud a la última versión:
    gcloud components update
  • Asegúrate de que tu aplicación en contenedor esté almacenada en un registro de imágenes, como Container Registry.

  • Si es la primera vez que utilizas GKE, debes completar la guía de inicio rápido, con la que podrás habilitar la API de GKE y conocer cómo funciona el producto.

Anatomía de un despliegue

A continuación, se muestra un ejemplo de un archivo de manifiesto de despliegue sencillo. Este despliegue crea tres pods replicados que tienen la etiqueta app=my-app y ejecutan la imagen hello-app almacenada en Container 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: gcr.io/google-samples/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 proporcionada a cada pod, que la implementación utiliza para gestionar los pods.
  • .spec.template.spec: es la especificación de pod, que define cómo se debe ejecutar cada pod. spec.containers incluye el nombre del contenedor que se debe ejecutar en cada pod y la imagen de contenedor que debe ejecutarse.

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

Crear un despliegue

Puedes crear un despliegue mediante uno de los siguientes métodos:

  • Puedes usar la función de despliegue en el menú Cargas de trabajo de la consola de Google Cloud para crear un despliegue sencillo a partir de una imagen de contenedor que has almacenado en Container Registry
  • Puedes escribir un archivo de manifiesto de despliegue y ejecutar kubectl apply para crear el recurso

kubectl apply

Puedes declarar y desplegar despliegues a partir de archivos de manifiesto con kubectl apply. Este método también conserva las actualizaciones realizadas en los recursos publicados sin volver a combinar los cambios en los archivos de manifiesto.

Para crear un despliegue 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 existen) definidos en los archivos de manifiesto almacenados en un directorio.

Consola

Para crear un despliegue, lleva a cabo los siguientes pasos:

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

    Ir a Cargas de trabajo

  2. Haz clic en Implementar.

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

    • Imagen de contenedor disponible. Para elegir una imagen de contenedor disponible en Container Registry, En Ruta de imagen, introduzca la ruta de la imagen del contenedor y de la versión.

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

  4. Si quieres, puedes desplegar la implementación con:

    • 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. Haga clic en Listo y, a continuación, en Continuar.

  6. En la sección Configuración, asigna un nombre de aplicación a tu despliegue y especifica el espacio de nombres de Kubernetes en el que desplegarlo.

  7. De forma opcional, en Etiquetas, puedes añadir etiquetas de Kubernetes al despliegue.

  8. Para guardar el archivo YAML que crea este despliegue para 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 Resultado de YAML.

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

  10. Haz clic en Implementar.

Inspeccionar el despliegue

Después de crear un despliegue, 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 del despliegue.

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 clave-valor. Por ejemplo, si has etiquetado la implementación app: my-app, ejecutas kubectl get pods -l app=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

Si quieres ver el archivo de manifiesto de un despliegue, 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 un despliegue, lleva a cabo estos pasos:

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

    Ir a Cargas de trabajo

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

  3. En la página Detalles de la implementación, puedes hacer lo siguiente:

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

Actualizar el despliegue

Puedes desplegar actualizaciones de especificaciones de pods relativas a los objetos de despliegue, como de su imagen, el uso de recursos o la configuración.

Puedes actualizar un despliegue mediante los siguientes métodos:

  • Puedes usar el menú Actualización progresiva y editor de YAML desde el menú Cargas de trabajo de la consola de Cloud.
  • Puedes cambiar el archivo de manifiesto y aplicarlo a través de kubectl apply.
  • Puedes actualizar los campos image, resources o selector de la especificación de pod con kubectl set.
  • Puedes actualizar un despliegue directamente desde el shell o en el editor que prefieras mediante kubectl edit.

kubectl apply

Puedes actualizar el despliegue si aplicas un archivo de manifiesto nuevo o actualizado. Esta tarea sirve para realizar varios cambios en el despliegue, como escalar una nueva versión de la aplicación o indicarla.

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 de un despliegue, los recursos (solicitudes o límites) o los campos de selecció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 despliegue desde las versiones nginx.7.9 a 1.9.1, ejecuta el siguiente comando:

kubectl set image deployment nginx nginx=nginx:1.9.1

Consola

Para acceder al menú Actualización progresiva del despliegue:

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

    Ir a Cargas de trabajo

  2. En la lista de cargas de trabajo, haz clic en el nombre del despliegue que quieres modificar.

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

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

    • Número mínimo de segundos de preparación: especifica el número mínimo de segundos en que deben estar listos los pods creados recientemente.
    • Número máximo de pods: especifica el número máximo de pods que se pueden crear con respecto al número de pods que quieras. El valor puede ser un número absoluto o un porcentaje.
    • Número máximo de pods no disponibles: 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, introduzca la ruta de la imagen y la versión de la imagen de contenedor actualizada.

  6. Haz clic en Update (Actualizar).

Restaurar una actualización

Puedes restaurar 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 pasar a una revisión concreta:

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

Escalar un despliegue

Puedes escalar un despliegue manualmente mediante la consola de Cloud o kubectl scale.

Más información sobre los despliegues de autoescalado

kubectl

kubectl scale se puede usar en cualquier momento para escalar el despliegue.

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 pods replicados 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 consola de Cloud.

    Ir a Cargas de trabajo

  2. En la lista de cargas de trabajo, haz clic en el nombre del despliegue que quieres modificar.

  3. Haz clic en Acciones > Escala.

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

  5. Haz clic en Escalar.

Eliminar un despliegue

Puedes eliminar un despliegue con la consola de 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 consola de Cloud.

    Ir a Cargas de trabajo

  2. En la lista de cargas de trabajo, selecciona uno o varios despliegues que quieras eliminar.

  3. Haz clic en Eliminar.

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

Siguientes pasos