Fase de Desarrollo

Uno de las principales fases del proyecto 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.

Fase de Integración

La integración del software desarrollado, dentro de la nube corporativa, implica la conteneirización del mismo. Se exponen a continuación una serie de buenas prácticas para este proceso:

  • Se crearán preferentemente imágenes Docker basadas en sistemas operativos minimalistas que refuercen la seguridad al reducir la superficie de ataque y faciliten la administra ción y el mantenimiento, como por ejemplo Alpine Linux.

  • Con el mismo objetivo del punto anterior, la instalación del resto de software se reducirá al mínimo imprescindible.

  • En aras de conseguir la reducción de imágenes explicada en el apartado anterior, y otras ventajas como las de facilitar la integración y despliegue continuos, se utilizará la técnica multistage de creación de contenedores en los casos en los que sea posible.

  • Se utilizarán repositorios oficiales.

  • Los datos que se deban persistir serán almacenados fuera del contenedor.

  • La imagen docker deberá ser configurada de tal forma que se le pueda proveer al contendor todos los datos necesarios para su correcta ejecución, mediante variables de entorno o parámetros.
  • Procurar desplegar una única aplicación por contenedor.

  • Se debe ejecutar el contenedor con un usuario con mínimos privilegios, nobody si fuera posible.
  • Las empresas desarrolladoras entregarán siempre el archivo Dockerfile y no la imagen ya 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 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.

  • 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.

  • Se aconseja seguir siempre estas y otras Mejores prácticas para trabajar con Docker.

Fase de Despliegue

  • El despliegue en la nube corporativa de las aplicaciones desarrollada implica el conocimiento de la arquitectura de la plataforma de orquestación de contenedores Kubernetes, así como de los objetos y relaciones entre ellos.

  • Una aplicación estándar podrá utilizar algunos de los siguientes objetos para su despliegue: deployment, service, secret, configmap, job, cronjob, etc. por lo que se requerirá la entrega de los ficheros manifests correspondientes y necesarios para su creación.

  • Ante cualquier duda se recomienda consultar la Documentación oficial sobre Kubernetes.