¬ŅPor qu√© Kubernetes es tan complicado con los repositorios?


Cuando llegaron los orquestadores de contenedores como Kubernetes, el enfoque para desarrollar e implementar aplicaciones cambió drásticamente. Han aparecido microservicios, y para el desarrollador, la lógica de la aplicación ya no está conectada con la infraestructura: cree aplicaciones para usted y ofrezca nuevas funciones.


Kubernetes extrae de las computadoras físicas que controla. Solo dígale cuánta memoria y potencia de procesamiento necesita, y obtendrá todo. Infraestructura? No, no escuchado.


Administrar imágenes de Docker, Kubernetes y aplicaciones lo hace portátil. Después de haber desarrollado aplicaciones de contenedor con Kubernetes, puede implementarlas en cualquier lugar: en una nube abierta, localmente o en un entorno híbrido, sin cambiar el código.


Nos encanta Kubernetes por su escalabilidad, portabilidad y capacidad de administración, pero no almacena estados. Pero tenemos casi todas las aplicaciones con estado, es decir, necesitan almacenamiento externo.


Kubernetes tiene una arquitectura muy din√°mica. Los contenedores se crean y destruyen seg√ļn la carga y las instrucciones de los desarrolladores. Las vainas y los contenedores se autocuran y se replican. Son esencialmente ef√≠meros.


El almacenamiento externo es demasiado resistente para tal variabilidad. No obedece las reglas de creación y destrucción dinámicas.


Solo necesito implementar una aplicación con estado en otra infraestructura: en otra nube allí, localmente o en un modelo híbrido, cómo tiene problemas de portabilidad. El almacenamiento externo se puede vincular a una nube específica.


Pero solo en estos almacenes para aplicaciones en la nube, el mismo diablo se romperá la pierna. Y ve a entender los significados ficticios y los significados de la terminología de almacenamiento en Kubernetes . Y hay repositorios propios de Kubernetes, plataformas de código abierto, servicios administrados o pagos ...


Estos son algunos ejemplos de almacenamiento en la nube CNCF :



Parece que implementa la base de datos en Kubernetes: solo necesita seleccionar la soluci√≥n adecuada, empacarla en un contenedor para trabajar en el disco local e implementarla en el cl√ļster como la pr√≥xima carga de trabajo. Pero la base de datos tiene sus propias peculiaridades, por lo que pensar no es un hielo.


Contenedores: est√°n tan empedrados que no conservan su estado. Es por eso que son tan f√°ciles de iniciar y detener. Y como no hay nada que guardar y transferir, el cl√ļster no se molesta con las operaciones de lectura y copia.


Deber√° almacenar el estado con la base de datos. Si la base de datos implementada en el cl√ļster en el contenedor no migra a ning√ļn lado y no se inicia con demasiada frecuencia, la f√≠sica del almacenamiento de datos entra en juego. Idealmente, los contenedores que usan datos deben estar en el mismo hogar que la base de datos.


En algunos casos, la base de datos, por supuesto, se puede implementar en un contenedor. En un entorno de prueba o en tareas donde hay poca información, las bases de datos viven cómodamente en grupos.


La producción generalmente requiere almacenamiento externo.


Kubernetes se comunica con el repositorio a través de interfaces de plano de control. Vinculan Kubernetes al almacenamiento externo. El almacenamiento externo conectado a Kubernetes se denomina complementos de volumen. Con ellos, puede abstraer el almacenamiento y transferir el almacenamiento.


Los complementos de volumen solían crearse , vincularse, compilarse y entregarse utilizando la base de código de Kubernetes. Esto limitó enormemente a los desarrolladores y requirió mantenimiento adicional: si desea agregar nuevos repositorios, cambie la base de código de Kubernetes.


Ahora implemente complementos de volumen en el cl√ļster; no quiero hacerlo. Y no necesita profundizar en la base del c√≥digo. Gracias a CSI y Flexvolume.



Kubernetes Native Storage


¬ŅC√≥mo resuelve Kubernetes los problemas de almacenamiento? Hay varias soluciones: opciones ef√≠meras, almacenamiento persistente en vol√ļmenes persistentes, consultas de reclamo de volumen persistente, clases de almacenamiento o StatefulSets. Ve a resolverlo, en general.


Los vol√ļmenes persistentes (PV) son unidades de almacenamiento preparadas por el administrador. No dependen de hogares y sus vidas fugaces.


El reclamo de volumen persistente (PVC) son solicitudes de almacenamiento, es decir, PV. Con PVC, puede vincular el almacenamiento a un nodo, y este nodo lo usar√°.


Puede trabajar con almacenamiento de forma est√°tica o din√°mica.


Con un enfoque estático, el administrador prepara los PV que se supone que deben servirse de antemano, antes de las solicitudes, y estos PV se vinculan manualmente a módulos específicos mediante PVC explícitos.


En la práctica, los PV especialmente definidos no son compatibles con la estructura portátil de Kubernetes: el almacenamiento depende del entorno, como AWS EBS o un disco GCE permanente. Para enlazar manualmente, debe apuntar a un repositorio específico en el archivo YAML.


El enfoque estático generalmente contradice la filosofía de Kubernetes: las CPU y la memoria no se asignan de antemano y no están conectadas a pods o contenedores. Se emiten dinámicamente.


Para el aprovisionamiento din√°mico, utilizamos clases de almacenamiento. El administrador del cl√ļster no necesita crear el PV por adelantado. Crea varios perfiles de almacenamiento, como plantillas. Cuando un desarrollador realiza una solicitud de PVC, en el momento de la solicitud, se crea uno de estos patrones y se adjunta a la chimenea.



Entonces, en los términos más generales, Kubernetes trabaja con almacenamiento externo. Hay muchas otras opciones.


CSI - Interfaz de almacenamiento de contenedores


Existe tal cosa - Interfaz de almacenamiento de contenedores . CSI fue creado por el grupo de trabajo de bóveda CNCF, que decidió definir una interfaz de almacenamiento de contenedor estándar para que los controladores de bóveda funcionen con cualquier orquesta.


Las especificaciones CSI ya est√°n adaptadas para Kubernetes, y hay toneladas de complementos de controladores para implementaciones en el cl√ļster de Kubernetes. Debe acceder al repositorio a trav√©s de un controlador de volumen compatible con CSI; use el tipo de volumen csi en Kubernetes.


Con CSI, el almacenamiento puede considerarse otra carga de trabajo para la contenedorizaci√≥n y la implementaci√≥n en el cl√ļster de Kubernetes.


Para m√°s detalles, escuche a Jie Yu hablar sobre CSI en nuestro podcast .


Proyectos de código abierto


Las herramientas y proyectos para tecnologías en la nube se multiplican rápidamente, y una parte justa de los proyectos de código abierto, lo cual es lógico, resuelve uno de los principales problemas de producción: trabajar con el almacenamiento en la arquitectura de la nube.


Los m√°s populares son Ceph y Rook.


Ceph es un cl√ļster de almacenamiento distribuido y administrado din√°micamente con escala horizontal. Ceph proporciona una abstracci√≥n l√≥gica para los recursos de almacenamiento. No tiene un solo punto de falla, se maneja solo y funciona sobre la base del software. Ceph proporciona interfaces para almacenar bloques, objetos y archivos simult√°neamente para un solo cl√ļster de almacenamiento.


Ceph tiene una arquitectura muy compleja con algoritmos RADOS, librados, RADOSGW, RDB, CRUSH y varios componentes (monitores, OSD, MDS). No profundizaremos en la arquitectura, es suficiente entender que Ceph es un cl√ļster de almacenamiento distribuido que simplifica la escalabilidad, elimina un solo punto de falla sin sacrificar el rendimiento y proporciona un almacenamiento √ļnico con acceso a objetos, bloques y archivos.


Naturalmente, Ceph est√° adaptado para la nube. Puede implementar un cl√ļster Ceph de diferentes maneras, por ejemplo, usando Ansible o en un cl√ļster de Kubernetes a trav√©s de CSI y PVC.



Arquitectura Ceph


Rook es otro proyecto interesante y popular. Combina Kubernetes con su computaci√≥n y Ceph con sus repositorios en un cl√ļster.


Rook es un orquestador de almacenamiento en la nube que complementa a Kubernetes. Empacan Ceph en contenedores con √©l y usan la l√≥gica de administraci√≥n de cl√ļster para un funcionamiento confiable de Ceph en Kubernetes. Rook automatiza la implementaci√≥n, el arranque, el ajuste, el escalado, el reequilibrio, en general, todo lo que hace el administrador del cl√ļster.


Con Rook, se puede implementar un cl√ļster Ceph desde yaml, como Kubernetes. En este archivo, el administrador describe lo que necesita en el cl√ļster. Rook lanza un cl√ļster y comienza a monitorear activamente. Esto es algo as√≠ como un operador o controlador: garantiza que se cumplan todos los requisitos de yaml. Rook funciona con ciclos de sincronizaci√≥n: ve el estado y toma medidas si hay desviaciones.


√Čl no tiene su estado permanente y no necesita ser controlado. Est√° en el esp√≠ritu de Kubernetes.



Rook, que combina Ceph y Kubernetes, es una de las soluciones de almacenamiento en la nube m√°s populares: 4.000 estrellas en Github, 16,3 millones de descargas y m√°s de cien colaboradores.
El proyecto Rook ya ha sido aceptado en CNCF, y recientemente terminó en una incubadora .


Bassam Tabara le contar√° m√°s sobre Rook en nuestro episodio de repositorio de Kubernetes .
Si la aplicaci√≥n tiene un problema, debe conocer los requisitos y crear un sistema o tomar las herramientas necesarias. Esto tambi√©n se aplica al almacenamiento en la nube. Y aunque el problema no es simple, las herramientas y los enfoques se han quedado cortos. La tecnolog√≠a en la nube contin√ļa evolucionando y seguramente nos esperan nuevas soluciones.

Source: https://habr.com/ru/post/441222/


All Articles