La contenerización es sinónimo de desarrollo de aplicaciones nativas de la nube, y Kubernetes es clave entre las plataformas de orquestación de contenedores disponibles. En este artículo, analizamos la contenerización, qué la define, cómo se adapta Kubernetes a la contenerización, cómo se organiza Kubernetes y cómo maneja el almacenamiento persistente y la protección de datos. También analizamos la interfaz de almacenamiento de contenedores (CSI), que proporciona un controlador de Kubernetes para vincularse al hardware del fabricante de la matriz de almacenamiento. Por último, analizamos las plataformas de gestión de Kubernetes proporcionadas por los principales proveedores de almacenamiento. ¿Qué es la contenerización? La contenedorización es una forma de virtualización, que quizás se comprenda mejor comparándola con la virtualización de servidores «tradicional». La virtualización de servidores (piense en VMware, Nutanix) crea una capa de hipervisor que enmascara los recursos físicos del servidor y es la ubicación en la que se ejecutan numerosos servidores lógicos conocidos como máquinas virtuales. La contenedorización de aplicaciones elimina esa capa de hipervisor y funciona con el sistema operativo del servidor. Los contenedores encapsulan todo lo necesario para que se ejecute una aplicación y se pueden crear, poner en marcha, clonar, escalar y extinguir muy rápidamente. Los contenedores son “más livianos”, sin la necesidad del hipervisor y múltiples iteraciones del sistema operativo de virtualización. Requieren menos recursos del servidor y son muy portátiles en entornos locales y en la nube. Eso hace que los contenedores sean adecuados para cargas de trabajo que experimentan picos masivos de demanda, especialmente en la web. Los contenedores también funcionan según el principio de microservicios, en el que la funcionalidad de la aplicación discreta se integra en pequeñas instancias de código construidas alrededor de interfaces de programación de aplicaciones (API) que las vinculan entre sí, esto contrasta con las aplicaciones grandes y monolíticas del pasado. Los contenedores y los microservicios también son sinónimos de las metodologías de desarrollo de software iterativas de DevOps. ¿Qué es Kubernetes? Kubernetes es un orquestador de contenedores. No es el único. También existen Apache Mesos, Docker Swarm, Nomad, Red Hat OpenShift y otros. Existen AWS Elastic Container Services (ECS), Azure Kubernetes Service y Google Cloud Kubernetes en la nube. Y existen productos VMware Tanzu que administran Kubernetes en su entorno de virtualización. Los orquestadores de contenedores se encargan de funciones como la creación, la gestión, la automatización, el equilibrio de carga y la relación con el hardware (incluido el almacenamiento) de los contenedores. Están organizados, en el lenguaje de Kubernetes, en pods, que es una colección de uno o más contenedores. En esta explicación, nos centraremos en Kubernetes. Como se mencionó, no es el único orquestador de contenedores, pero según algunas investigaciones, es el líder abrumador del mercado con una participación de más del 97 %. ¿Cómo está organizado Kubernetes? El contenedor es la unidad básica que contiene el tiempo de ejecución y el código de la aplicación, además de las dependencias, las bibliotecas, etc. Los contenedores no tienen estado en el sentido de que no almacenan ningún dato ni información sobre estados anteriores. Son sumamente portátiles, clonables, escalables, etc., porque llevan consigo todo lo que necesitan. Esa falta de estado también es un posible talón de Aquiles, como veremos. A continuación están los clústeres, que contienen pods y que alojan y administran contenedores. Estos contenedores pueden cumplir distintas funciones (como una interfaz de usuario o una base de datos de back-end), pero se encuentran en el mismo nodo (es decir, un servidor) y están cerca unos de otros, por lo que se comunican rápidamente. Los nodos son máquinas físicas o máquinas virtuales dentro de ellos que ejecutan pods. Pueden ser nodos maestros o nodos de trabajo. Los nodos maestros son el plano de control que administra la implementación y el estado del clúster de Kubernetes. Los nodos maestros de componentes incluyen: el servidor de API, a través del cual se lleva a cabo la interacción con el clúster; un programador que encuentra y determina los mejores nodos para ejecutar pods; el administrador del controlador, que ayuda a mantener el estado requerido del clúster, como la cantidad de réplicas que se deben mantener; y etcd, que es un almacén de valores clave que contiene el estado del clúster. Los nodos de trabajo ejecutan contenedores con tareas delegadas por los nodos maestros. Los nodos de trabajo comprenden: Kubelets, que son la interfaz principal entre el nodo de trabajo y el plano de control del nodo maestro; kube-proxy, que maneja las comunicaciones de red con los pods; y el tiempo de ejecución del contenedor, que es el software que realmente ejecuta los contenedores. ¿Cuál es el desafío con el almacenamiento y Kubernetes? En su forma más básica, el almacenamiento en Kubernetes es efímero. Eso significa que no es persistente y no estará disponible después de que se elimine el contenedor. El almacenamiento nativo de Kubernetes se escribe en el contenedor y se crea a partir de un espacio temporal en la máquina host que solo existe durante la vida útil del pod de Kubernetes. Pero, por supuesto, las aplicaciones empresariales requieren almacenamiento persistente y Kubernetes tiene formas de lograrlo. ¿Cómo proporciona Kubernetes almacenamiento persistente? Kubernetes admite el almacenamiento persistente que se puede escribir en una amplia gama de formatos locales y en la nube, incluidos archivos, bloques y objetos, y en servicios de datos, como bases de datos. Se puede hacer referencia al almacenamiento desde dentro del pod, pero esto no se recomienda porque viola el principio de portabilidad. En cambio, Kubernetes usa volúmenes persistentes (PV) y reclamos de volumen persistente (PVC) para definir los requisitos de almacenamiento y aplicación. Los PV y los PVC desacoplan el almacenamiento y permiten que un pod lo consuma de forma portátil. Un PV (que no es portátil entre clústeres de Kubernetes) define el almacenamiento en el clúster que se ha perfilado según sus parámetros de rendimiento y capacidad. Define un volumen de almacenamiento persistente y contiene detalles como la clase de rendimiento/costo, la capacidad, el complemento de volumen utilizado, las rutas, las direcciones IP, los nombres de usuario y las contraseñas, y qué hacer con el volumen después de su uso. Mientras tanto, un PVC describe una solicitud de almacenamiento para la aplicación que se ejecutará en Kubernetes. Los PVC son portátiles y viajan con la aplicación en contenedores. Kubernetes determina qué almacenamiento está disponible a partir de los PV definidos y vincula el PVC a él. Los PVC se definen en el archivo de configuración YAML del pod para que la solicitud viaje con él y pueda especificar la capacidad, el rendimiento del almacenamiento, etc. StatefulSet duplica los PVC para el almacenamiento persistente entre pods, entre otras cosas. Una colección de PV se puede agrupar en una clase de almacenamiento, que especifica el complemento de volumen de almacenamiento utilizado, el proveedor externo (como la nube) y el nombre del controlador CSI (consulte a continuación). A menudo, una clase de almacenamiento se marcará como «predeterminada» para que no tenga que invocarse mediante el uso de un PVC, o para que pueda invocarse si un usuario no especifica una clase de almacenamiento en un PVC. También se puede crear una clase de almacenamiento para datos antiguos a los que las aplicaciones en contenedores puedan tener acceso. ¿Qué es CSI? CSI es una interfaz de almacenamiento de contenedores. CSI describe los controladores para Kubernetes y otros orquestadores de contenedores proporcionados por proveedores de almacenamiento para exponer su capacidad a aplicaciones en contenedores como almacenamiento persistente. Al momento de escribir este artículo, hay más de 130 controladores CSI disponibles para almacenamiento de archivos, bloques y objetos en formatos de hardware y nube. CSI proporciona una interfaz que define la configuración del almacenamiento persistente externo al orquestador, su entrada/salida (E/S) y funcionalidad avanzada como instantáneas y clonación. Se puede utilizar un volumen CSI para definir PV. Por ejemplo, puede crear PV y clases de almacenamiento que apunten a un almacenamiento externo definido por un complemento CSI, con aprovisionamiento activado por un PVC que lo especifica. ¿Qué ofrecen los proveedores de almacenamiento para ayudar con el almacenamiento y la protección de datos de K8s? Los componentes de Kubernetes son numerosos y modulares. Tal vez no sea sorprendente que los proveedores de matrices de almacenamiento hayan aprovechado la posibilidad de envolver una capa de gestión adicional sobre eso y hacer que la provisión de servicios de almacenamiento y datos sea más sencilla para los administradores. Aquí, analizamos los productos de los proveedores de almacenamiento en ese espacio. Los requisitos aquí varían desde la configuración de los recursos según el perfil de almacenamiento requerido por las aplicaciones, así como el origen y el destino de las copias de seguridad y otras funciones de protección de datos, todo lo cual puede cambiar rápidamente. Dell EMC, IBM, HPE, Hitachi, NetApp y Pure Storage tienen plataformas de gestión de contenedores que permiten a los desarrolladores escribir requisitos de almacenamiento y protección de datos en código más fácilmente, al mismo tiempo que permiten que las funciones de TI tradicionales, como la protección de datos, se administren sin habilidades profundas. Todos usan controladores CSI de alguna forma para ofrecer aprovisionamiento y gestión de almacenamiento y copia de seguridad para su propio entorno de almacenamiento y, en algunos casos, para cualquier entorno de almacenamiento, incluidos los de la nube. ¿Qué hacen los módulos de almacenamiento de contenedores de Dell? Los módulos de almacenamiento de contenedores (CSM) de Dell se basan en controladores CSI. Mientras que los controladores CSI básicos ayudan a aprovisionar, eliminar, mapear y anular el mapeo de volúmenes de datos, los CSM de Dell ayudan a la automatización, el control y la simplicidad. Varios CSM permiten a los clientes acceder a funciones de matriz de almacenamiento a las que normalmente no tendrían acceso. Estos complementos de CSM apuntan a funcionalidades o servicios de datos específicos, que incluyen replicación, observabilidad, resiliencia, movilidad de aplicaciones (clonación), instantáneas, autorización (es decir, acceso a recursos de almacenamiento) y cifrado. Los CSM de Dell permiten a los clientes preparar el almacenamiento existente para contenedores al brindar acceso a las matrices de almacenamiento de Dell en lugar de usar software adicional para acceder a esas funciones. ¿Qué hace Red Hat Openshift de IBM por los contenedores? La adquisición de Red Hat por parte de IBM en 2018 le dio la cartera OpenShift, que es el sitio principal de sus esfuerzos de gestión de contenedorización. OpenShift utiliza reclamos de volumen persistente (PVC) de Kubernetes a través de controladores CSI para permitir que los desarrolladores soliciten recursos de almacenamiento. Los PVC pueden acceder a volúmenes persistentes desde cualquier lugar en la plataforma OpenShift. La plataforma de contenedores OpenShift admite muchos complementos PV populares en el sitio y en la nube, incluidos Amazon EBS, Azure Files, Azure Managed Disks, Google Cloud Persistent Disk, Cinder, iSCSI, Local Volume, NFS y VMware vSphere. El proveedor de infraestructura hiperconvergente Nutanix también utiliza OpenShift como plataforma de implementación de contenedores. ¿Cómo ayuda Ezmeral Runtime Enterprise de HPE a administrar los contenedores? HPE ha desarrollado su propia plataforma de administración de Kubernetes, HPE Ezmeral Runtime Enterprise, que se puede implementar a través del entorno Synergy de HPE. Es una plataforma de software diseñada para implementar aplicaciones nativas y no nativas de la nube utilizando Kubernetes y puede ejecutarse en una infraestructura virtualizada o de hardware, en las instalaciones o en cualquier nube. Va más allá de la implementación de aplicaciones, ya que la administración de datos incluye el borde. Ezmeral ofrece almacenamiento de contenedores persistente y automatización de configuración para configurar la alta disponibilidad de contenedores, la copia de seguridad y la restauración, la validación de seguridad y la supervisión para minimizar las tareas administrativas manuales ¿Qué hace Hitachi Kubernetes Service por las implementaciones de contenedores? En 2021, Hitachi se unió a la contienda de almacenamiento de Kubernetes con Hitachi Kubernetes Service (HKS), que permite a los clientes administrar el almacenamiento de contenedores en centros de datos locales y en las tres nubes públicas principales. HKS permite la implementación de Hitachi Unified Compute Platform como una nube privada administrada por Kubernetes en entornos de nube local e híbrida. HKS utiliza controladores CSI para administrar volúmenes persistentes directamente en los nodos de Kubernetes, lo que lo distingue de las ofertas nativas de contenedores de otros proveedores. ¿Cómo ayuda NetApp Astra a implementar y administrar contenedores? Astra de NetApp es su plataforma de gestión de contenedores. Incluye una serie de componentes, entre ellos Astra Control, para la gestión del ciclo de vida de las aplicaciones de Kubernetes; Astra Control Service, para la gestión de datos de cargas de trabajo de Kubernetes en nubes públicas; Astra Control Centre para cargas de trabajo de Kubernetes locales y Astra Trident para el aprovisionamiento y la gestión de almacenamiento CSI. También existe Astra Automation y sus API y SDK para flujos de trabajo de Astra. ¿Qué funcionalidad proporciona Pure Storage Portworx a las implementaciones de contenedores? Portworx es la plataforma de contenedores de Pure Storage y le brinda aprovisionamiento nativo de contenedores, conectividad y configuración de rendimiento para clústeres de Kubernetes. Puede descubrir almacenamiento y proporcionar capacidad persistente para aplicaciones empresariales con acceso a almacenamiento en bloques, archivos y objetos y en la nube. Los clientes pueden usar Portworx para crear grupos de almacenamiento, administrar el aprovisionamiento y proporcionar funcionalidad avanzada como respaldo, recuperación ante desastres, seguridad, escalado automático y migración de almacenamiento local o en la nube en los principales proveedores de nube.