Contenedor – en la cinta transportadora: CRI-O ahora es por defecto en OpenShift Container Platform 4

Plataforma Plataforma de Contenedores Red Hat OpenShift 4 permite establecer un proceso eficiente para la creación de hosts para el despliegue de contenedores, incluyendo la infraestructura de proveedores de servicios en la nube, en plataformas de virtualización o en sistemas bare-metal. Para crear una plataforma verdaderamente en la nube, tuvimos que ejercer un control estricto sobre todos los elementos utilizados y así aumentar la fiabilidad de un complejo proceso de automatización.

Contenedor – en la cinta transportadora: CRI-O ahora es por defecto en OpenShift Container Platform 4

La solución evidente fue adoptar Red Hat Enterprise Linux CoreOS (una variante de Red Hat Enterprise Linux) y CRI-O como estándar, y aquí está el porqué…

Dado que el tema de la navegación es un recurso exitoso para encontrar analogías al explicar el funcionamiento de Kubernetes y los contenedores, intentaremos ilustrar los problemas comerciales que resuelven CoreOS y CRI-O, utilizando como ejemplo la invención de Brunel para la producción de poleas de aparejo. En 1803, Mark Brunel se enfrentó a la tarea de fabricar 100 mil poleas de aparejo para satisfacer las necesidades de la creciente flota naval del Reino Unido. Una polea de aparejo es un tipo de equipo utilizado para fijar cuerdas a las velas. Hasta principios del siglo XIX, estas poleas se fabricaban manualmente, pero Brunel logró automatizar la producción y comenzó a elaborar poleas estandarizadas con el uso de maquinaria. La automatización de este proceso significó que todas las poleas resultantes eran prácticamente idénticas, podían ser fácilmente reemplazadas en caso de fallos y podían fabricarse en grandes cantidades.

Ahora imagina que Brunel tuviera que realizar este trabajo para 20 modelos diferentes de barcos (versiones de Kubernetes) y para cinco planetas distintos con corrientes y vientos marinos completamente diferentes (proveedores de nube). Además, se requería que todos los barcos (clústeres de OpenShift), independientemente de los planetas por los que navegaran, se comportaran de manera idéntica desde el punto de vista de los capitanes (operadores que gestionan el funcionamiento de los clústeres). Siguiendo la analogía marítima, a los capitanes de los barcos realmente no les importa qué poleas de aparejo (CRI-O) se utilizan en sus embarcaciones; lo que les importa es que estas poleas sean robustas y fiables.

Antes de OpenShift 4, había un desafío empresarial muy similar que enfrentar en la plataforma en la nube. Nuevos nodos deben ser creados al momento de establecer un clúster, en caso de fallo de uno de los nodos, o al escalar el clúster. Durante la creación e inicialización de un nuevo nodo, los componentes críticos del host también deben ser configurados adecuadamente, incluyendo CRI-O. Al igual que en cualquier otro tipo de producción, primero se debe suministrar la "materia prima". En el caso de los barcos, la materia prima es el metal y la madera. Sin embargo, para crear un host que despliegue contenedores en el clúster de OpenShift 4, se necesitan archivos de configuración y APIs proporcionadas. Después de esto, OpenShift garantizará el nivel adecuado de automatización a lo largo de todo el ciclo de vida, ofreciendo el soporte de producto necesario para los usuarios finales y recuperando así la inversión en la plataforma.

OpenShift 4 fue diseñado para permitir actualizaciones cómodas del sistema a lo largo de todo el ciclo de vida de la plataforma (para las versiones 4.X), para todos los principales proveedores de computación en la nube, plataformas de virtualización e incluso sistemas bare metal. Para ello, los nodos deben ser construidos utilizando elementos intercambiables. Cuando un clúster necesita una nueva versión de Kubernetes, también recibe la versión correspondiente de CRI-O en CoreOS. Dado que la versión de CRI-O está directamente vinculada a Kubernetes, esto simplifica en gran medida cualquier reconfiguración para propósitos de prueba, solución de problemas o soporte. Además, este enfoque ayuda a reducir los costos para los usuarios finales y Red Hat.

Esta es una nueva perspectiva fundamental en los clústeres de Kubernetes, que establece las bases para planificar nuevas funciones muy útiles y atractivas. CRI-O (proyecto de Contenedor Runtime Interface de la Open Container Initiative, abreviadamente CRI-OCI) ha demostrado ser la opción más adecuada para la creación masiva de nodos, lo que es necesario para trabajar con OpenShift. CRI-O reemplazará el motor Docker utilizado anteriormente, ofreciendo a los usuarios de OpenShift un motor de contenedor económico, estable, simple y aburrido – sí, no te has confundido – un motor de contenedor aburrido, creado específicamente para trabajar con Kubernetes.

El mundo de los contenedores abiertos

El mundo ya se mueve hacia contenedores abiertos. Ya sea en Kubernetes o en niveles más bajos, el desarrollo de estándares de contenedores está dando lugar a un ecosistema de innovación en cada nivel.

Todo comenzó con la creación de la iniciativa Open Containers Initiative en junio de 2015.En esta fase temprana, se establecieron especificaciones para las imágenes de contenedor (image) y y para el entorno de ejecución (runtime).Esto permitió garantizar que las herramientas pudieran utilizar un único estándar para imágenes de contenedor y un formato unificado para trabajar con ellas. Posteriormente, se añadieron especificaciones para la distribución (distribution),lo que facilitó a los usuarios el intercambio de imágenes de contenedor..

Luego, la comunidad de Kubernetes desarrolló un estándar único de interfaz conectable (pluggable interface) conocido comoContainer Runtime Interface (CRI).

Gracias a esto, los usuarios de Kubernetes pudieron conectar diferentes motores para trabajar con contenedores además de Docker. Los ingenieros de Red Hat y Google identificaron la necesidad existente en el mercado de un motor de contenedor que pudiera aceptar solicitudes de Kubelet mediante el protocolo CRI y presentaron contenedores compatibles con las especificaciones mencionadas anteriormente de la OCI. Así,nació OCID. Pero un momento, ¿no dijimos que este material estaría dedicado a CRI-O? En realidad, así es, simplemente que con el lanzamiento de la versión 1.0,

el proyecto fue renombrado a CRI-O.

Contenedor – en la cinta transportadora: CRI-O ahora es por defecto en OpenShift Container Platform 4

Fig. 1.

Innovaciones con CRI-O y CoreOS. Con el lanzamiento de la plataforma OpenShift 4, se cambió elmotor de contenedor

utilizado por defecto en la plataforma, y CRI-O reemplazó a Docker, ofreciendo un entorno económico, estable, simple y aburrido para ejecutar contenedores, que se desarrolla paralelamente a Kubernetes. Esto simplifica significativamente el soporte y la configuración del clúster. La configuración y gestión del motor de contenedor y del host se automatizan dentro de OpenShift 4.

Espera, ¿cómo es eso? Exactamente, con el advenimiento de OpenShift 4, ya no es necesario conectarse a hosts separados e instalar el motor de contenedor, configurar almacenamiento, ajustar servidores para búsqueda o configurar la red. La plataforma OpenShift 4 ha sido completamente rediseñada para utilizar el no solo desde la perspectiva de las aplicaciones de los usuarios finales, sino también desde la perspectiva de las operaciones básicas a nivel de plataforma, como el despliegue de imágenes, la configuración del sistema o la instalación de actualizaciones.

Kubernetes siempre ha permitido a los usuarios gestionar aplicaciones, definiendo el estado deseado y utilizando controladores (Controllers), para garantizar que el estado actual se asemeje lo más posible al estado especificado. Este enfoque basado en el estado deseado y el estado actual abre grandes oportunidades tanto desde la perspectiva del desarrollo como de las operaciones. Los desarrolladores pueden definir el estado requerido, transmitirlo al operador en forma de archivo YAML o JSON, y luego el operador puede crear en el entorno de producción la instancia necesaria de la aplicación, de modo que el estado operativo de esa instancia esté completamente en línea con el especificado.

Al utilizar operadores (Operators) en la plataforma, OpenShift 4 introduce esta nueva paradigma (usando el concepto de estado deseado y estado actual) en la gestión de RHEL CoreOS y CRI-O. Las tareas de configuración y gestión de versiones del sistema operativo y del motor de contenedores se automatizan mediante lo que se conoce como operador de configuración de máquina (Machine Config Operator, MCO). MCO simplifica considerablemente el trabajo del administrador del clúster, automatizando esencialmente las últimas etapas de la instalación, así como las operaciones posteriores a la instalación (day two operations). Todo esto convierte a OpenShift 4 en una auténtica plataforma en la nube. Hablaremos de esto más adelante.

Ejecución de contenedores

Los usuarios han tenido la posibilidad de utilizar el motor CRI-O en la plataforma OpenShift desde la versión 3.7 en estado de Tech Preview y desde la versión 3.9 en estado de Generally Available (actualmente soportado). Además, Red Hat utiliza masivamente CRI-O para ejecutar cargas de trabajo de producción en OpenShift Online desde la versión 3.10. Todo esto ha permitido al equipo que trabaja en CRI-O adquirir una gran experiencia en el despliegue masivo de contenedores en grandes clústeres de Kubernetes. Para obtener una idea básica de cómo Kubernetes utiliza CRI-O, veamos la siguiente ilustración, que muestra el principio de funcionamiento de la arquitectura.

Fig. 2. Cómo funcionan los contenedores en un clúster de Kubernetes

Contenedor – en la cinta transportadora: CRI-O ahora es por defecto en OpenShift Container Platform 4

CRI-O simplifica la creación de nuevos hosts de contenedores a través de la sincronización de todo el nivel superior al inicializar nuevos nodos y al lanzar nuevas versiones de la plataforma OpenShift. La revisión de toda la plataforma en su conjunto permite realizar actualizaciones / retrocesos transaccionales, así como prevenir bloqueos mutuos en las dependencias entre el núcleo del host de contenedores, el motor de contenedores, los nodos (Kubelets) y el nodo maestro de Kubernetes Master. Con la gestión centralizada de todos los componentes de la plataforma, con control y gestión de versiones, se puede siempre seguir un camino claro del estado A al estado B. Esto simplifica el proceso de actualizaciones, mejora la seguridad, optimiza el seguimiento del rendimiento y ayuda a reducir los costos de actualizaciones e implementación de nuevas versiones.

Demostración del poder de los elementos intercambiables

Como se mencionó anteriormente, el uso de Machine Config Operator para gestionar el host del contenedor y el motor de contenedores en OpenShift 4 proporciona un nuevo nivel de automatización que no era posible en la plataforma Kubernetes anteriormente. Para demostrar las nuevas capacidades, mostraremos cómo podría hacer cambios en el archivo crio.conf. Para evitar confusiones terminológicas, trate de concentrarse en los resultados.

Primero, vamos a crear lo que se llama la configuración del entorno de ejecución del contenedor – Container Runtime Config. Considere esto como un recurso de Kubernetes que representa la configuración para CRI-O. En realidad, es una versión especializada de lo que se denomina MachineConfig, que representa cualquier configuración implementada en la máquina RHEL CoreOS dentro del clúster OpenShift.

Este recurso personalizado, llamado ContainerRuntimeConfig, fue diseñado para facilitar a los administradores del clúster la configuración de CRI-O. Es una herramienta lo suficientemente poderosa como para aplicarse solo a nodos específicos según las configuraciones de MachineConfigPool. Considere esto como un grupo de máquinas que cumplen el mismo propósito.

Preste atención a las dos últimas líneas que vamos a modificar en el archivo /etc/crio/crio.conf. Estas dos líneas son muy similares a las líneas en el archivo crio.conf, son:

vi ContainerRuntimeConfig.yaml

Salida:

apiVersion: machineconfiguration.openshift.io/v1
kind: ContainerRuntimeConfig
metadata:
 name: set-log-and-pid
spec:
 machineConfigPoolSelector:
   matchLabels:
     debug-crio: config-log-and-pid
 containerRuntimeConfig:
   pidsLimit: 2048
   logLevel: debug

Ahora enviaremos este archivo al clúster de Kubernetes y verificaremos que realmente se haya creado. Tenga en cuenta que el trabajo se realiza exactamente igual que con cualquier otro recurso de Kubernetes:

oc create -f ContainerRuntimeConfig.yaml
oc get ContainerRuntimeConfig

Salida:

NAME              AGE
set-log-and-pid   22h

Después de crear ContainerRuntimeConfig, necesitamos modificar uno de los MachineConfigPools para indicar a Kubernetes que queremos aplicar esta configuración a un grupo específico de máquinas en el clúster. En este caso, modificaremos el MachineConfigPool para los nodos master:

oc edit MachineConfigPool/master

Salida (se ha dejado la esencia principal para mayor claridad):

...
metadata:
 creationTimestamp: 2019-04-10T23:42:28Z
 generation: 1
 labels:
   debug-crio: config-log-and-pid
   operator.machineconfiguration.openshift.io/required-for-upgrade: ""
...

En este momento, el MCO comienza a crear un nuevo archivo crio.conf para el clúster. A su vez, el archivo de configuración completamente listo se puede ver a través de la API de Kubernetes. Recuerde que ContainerRuntimeConfig es solo una versión especializada de MachineConfig, por lo que podemos ver el resultado al mirar las líneas necesarias en MachineConfigs:

oc get MachineConfigs | grep rendered

Salida:

rendered-master-c923f24f01a0e38c77a05acfd631910b                  4.0.22-201904011459-dirty 2.2.0 16h
rendered-master-f722b027a98ac5b8e0b41d71e992f626                  4.0.22-201904011459-dirty 2.2.0 4m
rendered-worker-9777325797fe7e74c3f2dd11d359bc62                  4.0.22-201904011459-dirty 2.2.0 16h

Tenga en cuenta que el archivo de configuración obtenido para los nodos master es una versión más nueva que las configuraciones originales. Para ver este archivo, ejecute el siguiente comando. Por cierto, cabe mencionar que este podría ser uno de los mejores scripts de una sola línea en la historia de Kubernetes:

python3 -c "import sys, urllib.parse; print(urllib.parse.unquote(sys.argv[1]))" $(oc get MachineConfig/rendered-master-f722b027a98ac5b8e0b41d71e992f626 -o YAML | grep -B4 crio.conf | grep source | tail -n 1 | cut -d, -f2) | grep pid

Salida:

pids_limit = 2048

Ahora asegurémonos de que la configuración se haya aplicado a todos los nodos master. Primero obtendremos una lista de nodos en el clúster:

oc get node | grep master

Salida:

ip-10-0-135-153.us-east-2.compute.internal   Listo master 23h v1.12.4+509916ce1

ip-10-0-154-0.us-east-2.compute.internal     Listo master 23h v1.12.4+509916ce1

ip-10-0-166-79.us-east-2.compute.internal    Listo master 23h v1.12.4+509916ce1

Ahora veamos el archivo instalado. Verá que el archivo se ha actualizado con los nuevos valores de las directivas pid y debug que especificamos en el recurso ContainerRuntimeConfig. La propia elegancia:

oc debug node/ip-10-0-135-153.us-east-2.compute.internal — cat /host/etc/crio/crio.conf | egrep 'debug||pid’

Salida:

...
pids_limit = 2048
...
log_level = "debug"
...

Todos estos cambios en el clúster se realizaron incluso sin iniciar SSH. Todo el trabajo se llevó a cabo haciendo uso del nodo maestro de Kubernetes. Es decir, estos nuevos parámetros se configuraron solo en los nodos maestros. Los nodos de trabajo no se cambiaron, lo que demuestra las ventajas de la metodología Kubernetes utilizando estados deseados y actuales en relación con los hosts de contenedores y los motores de contenedores con elementos intercambiables.

El ejemplo anterior muestra la posibilidad de hacer cambios en un pequeño clúster de OpenShift Container Platform 4 con tres nodos de trabajo o en un enorme clúster de producción con 3000 nodos. En cualquier caso, la carga de trabajo será la misma: y muy pequeña, solo se necesita configurar el archivo ContainerRuntimeConfig y modificar una etiqueta en MachineConfigPool. Y puedes hacerlo con cualquier versión de la plataforma OpenShift Container Platform 4.X utilizada en Kubernetes durante todo su ciclo de vida.

A menudo, las empresas tecnológicas crecen tan rápido que no podemos explicar por qué elegimos ciertas tecnologías para los componentes fundamentales. Históricamente, los motores de contenedores han sido el componente con el que los usuarios interactúan directamente. Dado que la popularidad de los contenedores comenzó con la aparición de los motores de contenedores, los usuarios suelen mostrar interés en ellos. Esta es otra razón por la cual Red Hat optó por CRI-O. Los contenedores evolucionan, y hoy en día se pone un mayor énfasis en la orquestación, y hemos llegado a la conclusión de que CRI-O ofrece la mejor experiencia al trabajar con OpenShift 4.

Fuente: habr.com

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster