Inicie la aplicaci贸n en Openshift y compare las herramientas existentes.

Esto esta bien


Quiero contar una historia de c贸mo se lanz贸 la aplicaci贸n en Openshift. Tambi茅n en el transcurso de la obra, consideramos utilidades para administrar la aplicaci贸n dentro de Openshift. Esta es una transcripci贸n de la actuaci贸n en la reuni贸n # 3 de Kubernetes SPB .


Prop贸sito


Por lo general, los clientes se implementan en servidores separados, pero luego surge la tarea, para probar la posibilidad de ejecutar en OpenShift y recoger el rastrillo.


Primero debes hablar sobre nuestra aplicaci贸n. Un proyecto con una rica historia. Usado en grandes organizaciones y probablemente cada uno de ustedes se cruza indirectamente. La aplicaci贸n admite muchas bases de datos, integraciones, etc., etc.


Prerrequisitos


Implementar


La aplicaci贸n deber铆a funcionar en entornos completamente diferentes. Como resultado, nuestra documentaci贸n de instalaci贸n es muy extensa. Pero si te menosprecia, entonces no hay nada complicado:


  • Aplicar esquema de base de datos.
  • Configurar el servidor de aplicaciones.
  • Instalar una licencia.
  • Personalice la aplicaci贸n y la integraci贸n con sistemas externos.

Implementar


Pero el mundo es cruel, tuvimos una serie de restricciones:


  • La aplicaci贸n solo se puede construir espec铆ficamente en Jenkins, que se dedica a la firma. Y solo ahi.
  • No hay acceso desde el cliente Openshift al entorno de desarrollo.
  • Por una serie de razones ideol贸gicas, no fue posible reutilizar las im谩genes existentes de Docker para el desarrollo.
  • Tenemos playbooks ansibles para instalar y configurar la aplicaci贸n en los servidores.

Demostraci贸n de contenedor de Ansible


Contenedor Ansible


Ansible container es un software de c贸digo abierto que tiene como objetivo automatizar el ensamblaje de contenedores, la implementaci贸n y el control de procesos. Como se puede adivinar por el nombre. Ansible se usa para construir contenedores. Ya escribimos roles de Ansible para instalar e implementar aplicaciones en la parte superior de los servidores, por lo que decidimos no reinventar la rueda y reutilizarlos. No solo ser铆a la herramienta perfecta, sino que la reutilizaci贸n r谩pida de los roles existentes fue un factor decisivo para la demostraci贸n.


En general, para hacer una demostraci贸n, tomamos los roles existentes que configuran todo y todo, e hicimos un "contenedor monol铆tico". No hubo problemas particulares con la recolecci贸n del contenedor, ya que OpenShift tiene algunas recomendaciones excelentes , pero mencionar茅 por separado:


  • Los roles necesitaban ser finalizados. Utilizamos systemd.
  • De manera predeterminada, por razones de seguridad, est谩 prohibido usar syscall en openshift. Como resultado, habr谩 matices con chroot, sudo. Hola CVE-2019-5736 .
  • Del mismo modo, por razones de seguridad, el contenedor se inicia desde debajo de un usuario con una ID aleatoria, esto tambi茅n es un comportamiento personalizado.

La idea principal en este punto es que hicimos una demostraci贸n muuuy r谩pido.


Demo de contenedores m煤ltiples


Contenedores m煤ltiples


El contenedor de demostraci贸n cumpli贸 su funci贸n y lo dividimos en componentes separados:


  1. Nuestra aplicaci贸n.
  2. La base de datos
  3. Servicios externos, etc.

Contenedores m煤ltiples


Lo primero que encontr贸, 驴c贸mo inicializar la base de datos? Est谩 claro que usamos migraciones, pero 驴cu谩ndo y c贸mo aplicarlas? Aqu铆 vale la pena dar un enlace a un maravilloso art铆culo que describe el dispositivo POD: la vida de los POD . En general, hay varios enfoques:


  • Use init-container
  • Utilice sistemas de orquestaci贸n que determinar谩n el orden de implementaci贸n de los servicios y la migraci贸n de rollos cuando sea necesario.

Decidimos seguir la ruta del contenedor de Init. Es decir En el POD de nuestra aplicaci贸n, antes del inicio de nuestra aplicaci贸n, se inicia un contenedor que realiza las migraciones. Pero, 驴c贸mo configurar la aplicaci贸n en s铆 y las integraciones externas?


Inicializa la aplicaci贸n


Contenedores m煤ltiples


Como ya mencion茅, nuestra aplicaci贸n puede y debe funcionar en entornos completamente diferentes, con diferentes bases de datos e integraciones. Una vez m谩s, la pregunta es c贸mo configurarlo todo.


  • Utilice sistemas de orquestaci贸n que determinen el orden en que se implementan los servicios y aplique la configuraci贸n despu茅s de que se inicie la aplicaci贸n.
  • Pase a trav茅s de las variables de entorno al contenedor c贸mo configurarlo.
  • Use el gancho de inicio.
  • Haga un contenedor separado que contenga la configuraci贸n y apl铆quelo a la aplicaci贸n. Migraci贸n m谩s o menos anal贸gica para la base de datos.

Elegimos el 煤ltimo enfoque, porque le permite hacer que la configuraci贸n sea reproducible y autosuficiente. Pero por alguna raz贸n, inicialmente hicimos este contenedor en un controlador de replicaci贸n separado con un factor de 1.


Contenedores m煤ltiples


Ok, lea la documentaci贸n nuevamente.


Una vaina (como en una vaina de ballenas o vaina de guisantes) es un grupo de uno o m谩s contenedores (como los contenedores Docker), con almacenamiento / red compartidos y una especificaci贸n sobre c贸mo ejecutar los contenedores.

POD es un grupo de contenedores. Como resultado, nuestro submarino constaba de 3 contenedores.


  1. Inicia contenedor para inicializar un PostgreSQL.
  2. Contenedor con aplicaci贸n.
  3. Contenedor con configuraci贸n de la aplicaci贸n.

Kit de herramientas


Tenemos un diagrama de c贸mo se ve la aplicaci贸n implementada. Ahora es el momento de discutir las herramientas en la naturaleza, hay muchas cosas que ya est谩n listas, considerar茅 algunos de la lista a continuaci贸n y sacar茅 conclusiones subjetivas.



Plantillas OpenShift


Plantillas OpenShift


Plantillas OpenShift


Pros:


  • Nativos y tienen excelente documentaci贸n.

Contras:


  • Otro motor de plantillas.
  • Largos y terribles archivos YAML.
  • Si tiene dependencias entre los servicios y su orden de inicio, ser谩 dif铆cil.

Guiones y plantilla


Guiones personalizados


Pros:


  • Puede utilizar excelentes herramientas y todo el poder de OOP.

Contras:


  • Muletas que soportan. Y no solo para ti.

Proveedor de Terraform k8s


Proveedor de Terraform k8s


Proveedor de Terraform k8s


Pros:


  • No te preocupes por la prioridad de crear elementos de infraestructura.
  • Puede reutilizar el c贸digo de infraestructura como m贸dulos.
  • Puede agregar la l贸gica de inicializaci贸n de la aplicaci贸n.

Contras:


  • No hay soporte para Openshift, solo k8s.
  • A veces muelle y m贸dulos obsoletos.
  • Otra tula en tu equipo.

Contenedor Ansible


Contenedor Ansible


Contenedor Ansible


Pros:


  • Hacer CM, no bash
  • Puede reutilizar el c贸digo como roles.
  • En nuestro caso, una herramienta para todo.

Contras:


  • Enormes im谩genes, porque ir en una capa.
  • Parece abandonado y sin apoyo. Ha sido reemplazado por Ansible bender .

Ansible k8s module


Ansible k8s module


M贸dulo Ansible + k8s


Pros:


  • Un libro de jugadas para describir todas las infraestructuras de proyectos dentro de Openshift.
  • Reutilizando c贸digo en forma de roles.
  • Puede agregar la l贸gica de inicializaci贸n de la aplicaci贸n.

Contras:


  • No hay soporte de proxy.
  • Usted se encarga de la eliminaci贸n. Si el objeto ya no es necesario, describa su eliminaci贸n.
  • Usted mismo describe la secuencia de creaci贸n de elementos de infraestructura.

Paquete de libro de jugadas ansible


Paquete de libro de jugadas ansible


La utilidad Ansible Playbook Bundle (APB) ofrece un enfoque: empaquetemos los roles ansibles para implementar una aplicaci贸n dentro de k8s / openshift en un contenedor y ejecutarla dentro de k8s / openshift.


Pros:


  • Llevo todo conmigo.
  • Probable y reproducible.
  • Integraci贸n con el cat谩logo de servicios (interfaz web f谩cil de usar para iniciar aplicaciones).

Contras:


  • Necesita privilegios de nivel de administrador.
  • La documentaci贸n a veces deja mucho que desear.

Resultado


Resultado


No quiero ser el 煤ltimo recurso, pero compartir茅 mis conclusiones:



PS


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


All Articles