Descripción de la administración de estado en Kubernetes

Completado

Al hablar sobre las aplicaciones en general, es posible que a menudo escuche sobre el estado de la aplicación. En esta unidad, revisamos la definición de estado y los distintos tipos de estados para que pueda preparar mejor la aplicación para controlarlos.

Estado

El estado de la aplicación es todo lo que se almacena en memoria en el momento en que se ejecuta la aplicación. El estado puede implicar varias cosas, pero principalmente nos centramos en los datos del usuario.

Como ejemplo de estado de la aplicación, imagine que tiene abierto el reproductor de música. Esta aplicación tiene un estado. Sabe quién es, qué le gusta escuchar y qué música ha descargado. Toda esta información forma parte del estado de la aplicación.

El estado en memoria es la información que la aplicación no necesita buscar en ningún otro lugar. El estado del disco contiene la información que la aplicación no tiene disponible, por lo que necesita recuperarla de otro origen de datos.

Tipos de estados

Hay dos tipos de estados de la aplicación. El primer tipo es el estado efímero, que no es persistente y que desaparece al cerrar la aplicación.

Los contenedores tienen un estado efímero. Todos los datos almacenados en ellos se pierden al instante cuando se elimina el contenedor. Algunas aplicaciones pueden funcionar solo con esto, ya que pueden volver a generar el estado desde otros orígenes y no es necesario almacenarlo de forma local. Estas aplicaciones se denominan aplicaciones stateless.

Todo el estado restante que no es efímero se llama estado persistente. El estado persistente continúa existiendo después del ciclo de vida de un contenedor. La mayoría de las tecnologías de contenedor que se usan tienen el concepto de volumen, una ubicación en disco donde se encuentra el estado. Incluso si quita el contenedor y lo vuelve a activar, el estado permanece almacenado en una ubicación segura y se puede reutilizar.

Las aplicaciones que se basan en un estado externo que se va a recuperar se denominan aplicaciones stateful.

Los estados y Kubernetes

Kubernetes puede controlar aplicaciones sin estado y con estado. Las aplicaciones sin estado son más fáciles porque solo podemos centrarnos en la propia aplicación y no en su estado (ya que no existe).

En la mayoría de las aplicaciones sin estado, una carga de trabajo de implementación sencilla con un pod sería suficiente para tener un sistema totalmente operativo y sacar el máximo partido del clúster.

Trabajar con aplicaciones con estado es lo contrario. En estos casos, tiene que considerar la aplicación y su estado, dónde se almacena el estado y cómo puede almacenarlo de forma segura y confiable.

Por este motivo Kubernetes también tiene el concepto de PersistentVolumes (PV) y PersistentVolumeClaims (PVC).

Sugerencia

En este módulo no se describen aún más los conceptos de almacenamiento, pero puede consultar los recursos de Azure Kubernetes Service en el resumen para obtener más información.

PersistentVolumes son discos asignados en nodos para almacenar los estados desde el contenedor de un pod. Dado que Kubernetes es la mejor opción para las aplicaciones distribuidas, todos los volúmenes creados se encuentran en un grupo de volúmenes disponibles. A continuación, los contenedores reclaman ese espacio para sí mismos. Puede usar PersistentVolumeClaims para enlazar un elemento PersistentVolume con un pod y usar su espacio para almacenar los datos necesarios.

Todos los proveedores de bases de datos son aplicaciones con estado. Si va a implementar un proveedor de bases de datos en el clúster, necesita un PV y un PVC para almacenar los datos de la base de datos en un lugar seguro y permitir que el proveedor recupere esos datos incluso aunque sus contenedores se hayan eliminado.

Procedimientos recomendados para control del estado

El estado está presente en la mayoría de aplicaciones. Sin embargo, un procedimiento recomendado para controlar el estado es no tratarlo en absoluto.

Cualquier aplicación eficaz se diseña con el objetivo de hacer que sea escalable y tenga alta disponibilidad. El estado va en la dirección opuesta. A pesar de las opciones proporcionadas por los proveedores de almacenamiento y la facilidad de implementación y uso, el estado no se escala fácilmente. Tampoco cuenta con una alta disponibilidad.

Estado de alta disponibilidad

Para tener una alta disponibilidad, una aplicación debe estar en línea en todo momento. Esto se realiza a través de la replicación de zona y región. Kubernetes cuenta con reconocimiento de zona en la mayoría de sus cargas de trabajo. Esto significa que puede tener varias instancias de una aplicación que se hayan implementado en distintas zonas. Sin embargo, los discos no reconocen la zona.

Cuando se implementa un nuevo objeto PersistentVolume en Kubernetes, se enlaza al disco de un nodo. Ese disco también está enlazado a una zona determinada de una región en concreto. El uso de la replicación de zona o región con PV es complejo y requiere mucho mantenimiento, tanto para replicar como para sincronizar los datos.

Estado muy escalable

Para ser altamente escalable, una aplicación debe aumentar su rendimiento junto con el número de usuarios que están conectados a él. Esto es complicado en la administración de estados porque, en esencia, cualquier estado externo es un disco y un disco tiene una velocidad de entrada y salida limitada. La administración del rendimiento ayuda a resolver este problema.

Las soluciones de base de datos llegaron con la idea de ReplicaSets, que replican toda la base de datos en varias instancias. La replicación aumenta el número de discos y la E/S para el estado.

El estado se debe sincronizar con cada cambio que se produzca en la base de datos, de modo que todos los discos contengan los mismos datos. Esta sincronización también es compleja.

Externalización del estado

Azure tiene soluciones de plataforma como servicio (PaaS), como Azure Cosmos DB, que son de alta disponibilidad y escalables, y resuelven la mayoría de los problemas de administración de estado.

El almacenamiento externo del estado y el hecho de no tener que mantenerlo le ayudan a centrarse en la aplicación y reducir la sobrecarga que supone trabajar con la integridad de los datos en la infraestructura.

Comprobación de conocimientos

1.

¿Cuál es el estado persistente de una aplicación?

2.

¿Cómo controla Kubernetes los estados?

3.

¿Cuál es el procedimiento recomendado para controlar el estado en las aplicaciones de Kubernetes?