Conceptos de almacenamiento para Kubernetes

Completado

Kubernetes es una plataforma abierta que administra aplicaciones basadas en contenedores y sus componentes de red y almacenamiento asociados. Proporciona un enfoque declarativo de las implementaciones, respaldadas por un conjunto sólido de API para las operaciones de administración.

Puede compilar y ejecutar aplicaciones modernas, portátiles y basadas en microservicios, utilizando Kubernetes para orquestar y administrar la disponibilidad de los componentes de la aplicación.

Administración y orquestación de contenedores

La administración de contenedores es el proceso de organización, adición, eliminación o actualización de un número significativo de contenedores. Un orquestador de contenedores es un sistema que implementa y administra automáticamente aplicaciones en contenedores. Por ejemplo, un orquestador puede responder dinámicamente a los cambios en el entorno para aumentar o disminuir las instancias implementadas de la aplicación administrada, o puede garantizar que todas las instancias de contenedor implementadas se actualicen si se publica una nueva versión de un servicio.

Arquitectura de Kubernetes

La arquitectura de Kubernetes se basa en clústeres. Un clúster de Kubernetes se divide en dos componentes principales de la infraestructura:

  • Un plano de control que proporciona los servicios principales de Kubernetes y la orquestación de las cargas de trabajo de la aplicación.
  • Nodos que ejecutan las cargas de trabajo de las aplicaciones. Cada clúster tiene al menos un nodo, pero puede definir el número y el tamaño de los nodos. Un grupo de nodos es un grupo de nodos que comparten la misma configuración.

Los recursos de las cargas de trabajo de la aplicación se encuentran en pods. Un pod en Kubernetes es un recurso efímero que representa una sola instancia de la aplicación. Consta de uno o varios contenedores, con recursos de red y almacenamiento compartidos, y una especificación para ejecutar los contenedores. El contenido de un pod siempre se encuentra y se programa y se ejecuta en un contexto compartido.

Almacenamiento persistente en Kubernetes

En la unidad anterior, hemos aprendido sobre los mecanismos de compatibilidad en contenedores de Windows que permiten proporcionar almacenamiento persistente para las aplicaciones en un entorno local a través de montajes de enlace y volúmenes con nombre. Sin embargo, los volúmenes y los montajes de enlace tienen algunas desventajas cuando se usan en un entorno distribuido como Kubernetes.

Los volúmenes y los montajes de enlace están vinculados a una máquina host específica, lo que significa que no son portables entre nodos de un clúster. Si un contenedor está programado en un nodo diferente al que almacena sus datos, no podrá acceder a él. Además, los volúmenes y los montajes de enlace no son escalables o resistentes, ya que dependen de la disponibilidad y capacidad de una sola máquina host.

Kubernetes resuelve los desafíos de almacenamiento de los contenedores mediante la introducción de dos abstracciones: volúmenes persistentes y notificaciones de volumen persistentes.

Volúmenes persistentes

Un volumen persistente (PV) es un recurso de almacenamiento en el clúster, creado y administrado por la API de Kubernetes, que puede existir más allá de la duración de un pod individual. Un administrador de clústeres puede crear estáticamente un PersistentVolume, o el servidor de API de Kubernetes puede crearlo dinámicamente mediante clases de almacenamiento. Un volumen persistente es un recurso del clúster igual que un nodo. Los volúmenes persistentes tienen un ciclo de vida independiente de cualquier pod individual que use el volumen persistente.

Notificaciones de volúmenes persistentes

Una notificación de volumen persistente (PVC) solicita almacenamiento de un StorageClass determinado, modo de acceso y tamaño. La PVC actúa como comprobación de notificaciones para el recurso de almacenamiento. El servidor de API de Kubernetes puede aprovisionar dinámicamente el recurso de almacenamiento subyacente si ningún recurso existente puede cumplir la notificación en función de la clase de almacenamiento definida.

Un StorageClass proporciona una manera de que los administradores describan las "clases" de almacenamiento que ofrecen. Las diferentes clases pueden asignarse a los niveles de calidad de servicio, o a las directivas de copia de seguridad, o a directivas arbitrarias determinadas por los administradores del clúster. Kubernetes en sí mismo no está pensado sobre lo que representan las clases.

Una vez que el servidor de API de Kubernetes asigna un recurso de almacenamiento disponible al pod que solicita almacenamiento, el volumen persistente se enlaza a una PVC. Los volúmenes persistentes son una asignación uno a uno a una PVC.