Despliegue en la nube interna

Recomendaciones y buenas prácticas durante las distintas etapas de los proyectos

    Las soluciones basadas en la nube están cada vez más presentes en los diferentes frameworks del mercado y están siendo asumidas por un gran número de grandes empresas en el mundo por sus beneficios: escalabilidad, facilidad de configuración, flexibilidad y reducción de tiempos de desarrollo y despliegue.
  1. Fase de Desarrollo.- Uno de los principales fases afectadas por la orientación hacia la nube es la fase de desarrollo, pues condiciona la arquitectura y Diseño de las soluciones informáticas. Las mejores prácticas en esta fase son:
    • Crecimiento vertical.- Las aplicaciones deben estar diseñadas para ejecutarse sobre una sola máquina. El crecimiento de las necesidades se harán en base al hardware de esta máquina.
    • Crecimiento horizontal.- Las aplicaciones deben estar diseñadas para poder tener múltiples instancias de la misma ejecutandose sobre varias máquinas. Para ello, las aplicaciones deberán ser Stateless, o disponer de un mecanismo de compartición de los datos de sesión compatible con los entornos de la nube.
    • Generación de datos y métricas.- Las aplicaciones deberán recopilar y generar todos los datos necesarios para que puedan ser centralizados y consumidos de cara a evaluar su estado, disponibilidad, nivel de servicio y detectar necesidades de crecimiento/corrección.
  2. Integración.- La integración dentro de la nube implica la conteneirización de la misma. Por ello, se exponen a continuación una serie de buenas prácticas de este proceso:
    • Utilice imágenes base ligeras. Desde el STIC recomendamos la distribución Alpine Linux, a partir de la cual instalar exclusivamente los paquetes/librerías necesarios para la correcta ejecución del proyecto
    • Utilice repositorios oficiales.
    • Dejar toda información persistente fuera del contenedor.
    • Configurar la imagen para que reciba todos la información necesaria para su correcta ejecución por variables de entorno o parámetro
    • Tener una sola aplicación por contenedor.
    • Se debe entregar el dockerfile, nunca una imagen creada.
    • Dentro del dockerfile, se deberán organizar las diferentes líneas que lo componen para optimizar la cache
    • La creación de artefactos debe ser autocontenida salvo que se justifique lo contrario. La creación de los contenedores de aplicación para su despliegue no debe depender de la máquina en la que se generen estos contenedores. La configuración e instalación de los artefactos que componen la aplicación (paquetes, librerías ejecutables, etc) debe proveerse como parte de la propia generación del contenedor de aplicación de forma que el entorno de creación de estos artefactos (compiladores, librerías y otras herramientas) sea reproducible y quede explícitamente documentado en un Dockerfile. Para facilitar esta tarea y generar contenedores finales más pequeños se recomienda el uso de multi-stage builds de docker.
  3. Despliegue
    • El despliegue de los productos desarrollados en la nube implica el conocimiento de la arquitectura de objetos y relaciones entre ellos de la plataforma de orquestación Kubernetes, que es la utilizada dentro del Cabildo.
    • Básicamente, una aplicación normalmente utiliza los siguientes objetos para su despliegue: deployment, service, secrets, por lo que se requerirá la entrega de los mismos.