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:
Ve a la página Cargas de trabajo de la Google Cloud consola.
Haz clic en add_box Desplegar.
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.
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.
Haz clic en Hecho y, a continuación, en Continuar.
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.
Opcionalmente, en Etiquetas, puede añadir etiquetas de Kubernetes a la implementación.
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.
En el menú desplegable Clúster de Kubernetes, elige el clúster que quieras.
Haz clic en Desplegar.
Inspeccionar el despliegue
Después de crear un Deployment, puedes usar uno de los siguientes métodos para inspeccionarlo:
- Puedes usar el menú Cargas de trabajo
Puedes usar
kubectl describe
ykubectl get
.
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:
Ve a la página Cargas de trabajo de la Google Cloud consola.
En la lista de cargas de trabajo, haga clic en el nombre del despliegue que quiera inspeccionar.
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
oselector
de la especificación de Pod mediantekubectl 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:
Ve a la página Cargas de trabajo de la Google Cloud consola.
En la lista de cargas de trabajo, haga clic en el nombre del Deployment que quiera modificar.
Haz clic en list Acciones > Actualización continua.
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.
En Imágenes de contenedor, introduce la ruta y la versión de la imagen de contenedor actualizada.
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:
Ve a la página Cargas de trabajo de la Google Cloud consola.
En la lista de cargas de trabajo, haga clic en el nombre del Deployment que quiera modificar.
Haz clic en list Acciones > Escalar > Editar réplicas.
Introduce el nuevo número de Réplicas del despliegue.
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:
Ve a la página Cargas de trabajo de la Google Cloud consola.
En la lista de cargas de trabajo, selecciona una o varias implementaciones que quieras eliminar.
Haz clic en delete Eliminar.
Cuando se te pida que confirmes la acción, haz clic en Eliminar.
Siguientes pasos
- Más información sobre los despliegues
- Más información sobre las aplicaciones con reconocimiento del estado