Implementa una aplicación con estado

En esta página, se explica cómo implementar una aplicación con estado con Google Kubernetes Engine.

Descripción general

Las aplicaciones con estado guardan datos en el almacenamiento de discos persistentes para que los use el servidor, los clientes y otras aplicaciones. Un ejemplo de aplicación con estado es una base de datos o un almacén de clave-valor en el que otras aplicaciones guardan y recuperan datos.

El almacenamiento continuo se puede aprovisionar de forma dinámica a pedido, de modo que no es necesario crear los volúmenes subyacentes de forma manual de antemano. En Kubernetes, el aprovisionamiento dinámico se configura mediante la creación de StorageClass. GKE incluye una instancia de StorageClass instalada de forma predeterminada, por lo que puedes aprovisionar discos persistentes de Google Compute Engine de forma dinámica.

Kubernetes usa el controlador StatefulSet para implementar aplicaciones con estado como objetos de StatefulSet. Los pods de StatefulSets no son intercambiables: cada uno usa un identificador único que se conserva más allá de dónde se programe.

A diferencia de las aplicaciones sin estado, las aplicaciones con estado son aquellas en las que los datos de los clientes no se almacenan en el servidor entre sesiones.

Antes de comenzar

Sigue estos pasos a fin de prepararte para esta tarea:

  • Asegúrate de que habilitaste la API de Google Kubernetes Engine.
  • Habilitar la API de Google Kubernetes Engine
  • Asegúrate de que instalaste el SDK de Cloud.
  • Establece tu ID del proyecto predeterminado:
    gcloud config set project [PROJECT_ID]
  • Si trabajas con clústeres zonales, establece tu zona de procesamiento predeterminada:
    gcloud config set compute/zone [COMPUTE_ZONE]
  • Si trabajas con clústeres regionales, establece tu región de procesamiento predeterminada:
    gcloud config set compute/region [COMPUTE_REGION]
  • Actualiza gcloud a la versión más reciente:
    gcloud components update
  • Asegúrate de que tu aplicación en contenedores se almacene en un registro de imagen, como Container Registry.

Si eres nuevo en GKE, te recomendamos completar la Guía de inicio rápido, en la que habilitarás la API de GKE y conocerás el funcionamiento del producto.

Solicita almacenamiento continuo en StatefulSet

Las aplicaciones pueden solicitar almacenamiento continuo con un objeto PersistentVolumeClaim.

Por lo general, el usuario debe crear los objetos PersistentVolumeClaim aparte del pod. Sin embargo, StatefulSets incluye un arreglo volumeClaimTemplates que genera de forma automática los objetos PersistentVolumeClaim. Cada réplica de StatefulSet recibe su propio objeto PersistentVolumeClaim.

Crea un StatefulSet

Debes usar kubectl apply para crear un StatefulSet.

kubectl apply usa archivos de manifiesto para crear, actualizar y borrar recursos en tu clúster. Este es un método declarativo de configuración de objetos. Con este método, se retienen las escrituras realizadas en objetos activos sin mezclar los cambios en los archivos de configuración del objeto.

A continuación, se muestra un ejemplo simple de StatefulSet regido por un servicio que se creó por separado:

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: [STATEFULSET_NAME]
spec:
  serviceName: [SERVICE_NAME]
  replicas: 3
  updateStrategy:
    type: RollingUpdate
  template:
    metadata:
      labels:
        app=[APP_NAME]
    spec:
      containers:
      - name: [CONTAINER_NAME]
        image: ...
        ports:
        - containerPort: 80
          name: [PORT_NAME]
        volumeMounts:
        - name: [PVC_NAME]
          mountPath: ...
  volumeClaimTemplates:
  - metadata:
      name: [PVC_NAME]
      annotations:
        ...
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 1Gi

en el que:

  • [STATEFULSET_NAME] es el nombre que eliges para StatefulSet.
  • [SERVICE_NAME] es el nombre que eliges para el servicio.
  • [APP_NAME] es el nombre que eliges para que la aplicación se ejecute en los pods.
  • [CONTAINER_NAME] es el nombre que eliges para los contenedores de los pods.
  • [PORT_NAME] es el nombre que eliges para el puerto que StatefulSet abre.
  • [PVC_NAME] es el nombre que eliges para PersistentVolumeClaim.

En este archivo, el campo kind especifica que se debe crear un objeto StatefulSet con las especificaciones definidas en el archivo. En este ejemplo, StatefulSet genera tres pods replicados y abre el puerto 80 para exponer StatefulSet en Internet.

Para crear un StatefulSet, ejecuta el comando siguiente:

kubectl apply -f [STATEFULSET_FILE]

También puedes usar kubectl apply -f [DIRECTORY]/ para crear todos los objetos (menos los existentes) definidos en los archivos de configuración almacenados en un directorio.

Para obtener más información sobre kubectl apply, consulta la documentación de referencia de kubectl.

Inspecciona un StatefulSet

kubectl

Para inspeccionar StatefulSet, ejecuta el siguiente comando:

kubectl get statefulset [STATEFULSET_NAME] -o yaml

Este comando muestra la configuración activa de StatefulSet en formato YAML.

Para generar una lista de los pods creados con StatefulSet, ejecuta el comando siguiente:

kubectl get pods -l app=[APP_NAME]

En este comando, la marca -l indica a kubectl que todos los pods se etiqueten para la app [APP_NAME].

El resultado es similar al siguiente:

NAME                                READY     STATUS    RESTARTS   AGE
[POD_NAME]                                      1/1       Running   0          1m
[POD_NAME]                                      1/1       Running   0          1m

Para obtener información detallada sobre StatefulSet, ejecuta el siguiente comando:

kubectl describe statefulset [STATEFULSET_NAME]

donde [STATEFULSET_NAME] es el nombre de StatefulSet.

Para obtener información sobre un pod específico, ejecuta el siguiente comando:

kubectl describe pod [POD_NAME]

Para enumerar los PersistentVolumeClaims que se crearon, ejecuta el siguiente comando:

kubectl get pvc

El resultado es similar al siguiente:

NAME                            STATUS    VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS    AGE
[STATEFULSET_NAME]-[PVC_NAME]-0 Bound     pvc-bdff4e1e-183e-11e8-bf6d-42010a800002   1G         RWO            standard        9s
[STATEFULSET_NAME]-[PVC_NAME]-1 Bound     pvc-bdff4e1e-183e-11e8-bf6d-42010a800003   1G         RWO            standard        9s
[STATEFULSET_NAME]-[PVC_NAME]-2 Bound     pvc-bdff4e1e-183e-11e8-bf6d-42010a800004   1G         RWO            standard        9s

Para obtener información sobre un PersistentVolumeClaim específico, ejecuta el siguiente comando:

kubectl describe pvc [STATEFULSET_NAME]-[PVC_NAME]-0

Para obtener información sobre PersistentVolume en específico, ejecuta el comando siguiente:

kubectl describe pv [PV_NAME]

Console

A fin de inspeccionar StatefulSet, sigue estos pasos:

  1. Visita el menú Cargas de trabajo de Google Kubernetes Engine en GCP Console.

    Visitar el menú Cargas de trabajo

  2. Selecciona la carga de trabajo deseada del menú.

El menú de cargas de trabajo ofrece varias opciones:

  • Para ver la configuración en vivo de StatefulSet, haz clic en YAML.
  • Para ver todos los eventos relacionados con StatefulSet, haz clic en Eventos.
  • Para ver el historial de revisión de StatefulSet, haz clic en Historial de revisión.

Actualizar StatefulSet

Existen varias formas de actualizar StatefulSets. El método declarativo común es kubectl apply. Para actualizar StatefulSet directo desde tu shell o en un editor preferido, puedes usar kubectl edit. También puedes usar el editor de YAML del menú de cargas de trabajo de GKE en GCP Console.

Puedes implementar actualizaciones de la especificación de pods de StatefulSets, como su imagen, solicitud o uso de recursos, o su configuración.

kubectl apply

Para actualizar StatefulSet, puedes aplicar un archivo de manifiesto nuevo o actualizado. Esto es útil para aplicar varios cambios en StatefulSet, como cuando escalas o quieres especificar una versión nueva de tu aplicación.

Para actualizar StatefulSet, ejecuta el comando siguiente:

kubectl apply -f [STATEFULSET_FILE]

donde [MANIFEST] es el archivo de manifiesto actualizado.

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

Para obtener más información sobre kubectl apply, consulta la documentación de referencia de kubectl.

Console

Para editar la configuración activa de StatefulSet, sigue estos pasos:

  1. Visita el menú Cargas de trabajo de Google Kubernetes Engine en GCP Console.

    Visitar el menú Cargas de trabajo

  2. Selecciona la carga de trabajo que desees.

  3. Haz clic en Editar.

  4. Usa el editor para realizar los cambios que desees en el objeto.

  5. Haz clic en Guardar.

Inspecciona el lanzamiento de actualizaciones

kubectl

Para inspeccionar el lanzamiento de StatefulSet, ejecuta el siguiente comando:

kubectl rollout status statefulset [STATEFULSET_NAME]

Para ver el historial de lanzamiento de StatefulSet, ejecuta el siguiente comando:

kubectl rollout history statefulset [STATEFULSET_NAME]

Para deshacer un lanzamiento, ejecuta el comando siguiente:

kubectl rollout undo statefulset [STATEFULSET_NAME]

Console

Para ver el historial de revisión de StatefulSet, sigue estos pasos:

  1. Visita el menú Cargas de trabajo de Google Kubernetes Engine en GCP Console.

    Visitar el menú Cargas de trabajo

  2. Selecciona la carga de trabajo deseada del menú.

  3. Haz clic en Historial de revisión.

  4. Selecciona la revisión que desees.

Actualiza estrategias

El campo updateStrategy de StatefulSet te permite configurar y, además, inhabilitar las actualizaciones progresivas automatizadas para contenedores, etiquetas, límites o solicitudes de recursos y anotaciones destinadas a los pods en un StatefulSet.

Para obtener información sobre las estrategias de actualización de StatefulSet, consulta Estrategias de actualización en la documentación de Kubernetes.

Escala StatefulSet

kubectl

kubectl scale se puede usar en cualquier momento para escalar StatefulSet.

Para escalar de forma manual un StatefulSet, ejecuta el comando siguiente:

kubectl scale statefulset [STATEFULSET_NAME] --replicas [NUMBER_OF_REPLICAS]

donde [NUMBER_OF_REPLICAS] es la cantidad deseada de pods replicados.

Console

Para escalar StatefulSet, sigue estos pasos:

  1. Visita el menú Cargas de trabajo de Google Kubernetes Engine en GCP Console.

    Visitar el menú Cargas de trabajo

  2. Selecciona la carga de trabajo deseada del menú.

  3. Haz clic en Acciones, y luego en Escalar.

  4. En el campo Réplicas, ingresa la cantidad de réplicas deseadas.

  5. Haz clic en Escalar.

Borra un StatefulSet

kubectl

Para borrar un StatefulSet, ejecuta el comando siguiente:

kubectl delete statefulset [STATEFULSET_NAME]

Console

Para borrar un StatefulSet, sigue estos pasos:

  1. Visita el menú Cargas de trabajo de Google Kubernetes Engine en GCP Console.

    Visitar el menú Cargas de trabajo

  2. En el menú, selecciona la carga de trabajo deseada.

  3. Haz clic en Borrar.

  4. Haz clic en Borrar en el menú de diálogo de confirmación.

Qué sigue

¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...

Documentación de Kubernetes Engine