El camino de Mercadona hacia el Cloud: cómo desplegamos la nube privada en nuestros 17 Bloques Logísticos

Carlos Gilabert
MercadonaIT
Published in
5 min readOct 30, 2023

Suelen pasar años antes de que una empresa decida abordar la modernización de sus aplicaciones. Años de soluciones ingeniosas hacen que las aplicaciones sean difíciles de usar y mantener, perdiendo en muchos casos la capacidad de escalar con las nuevas necesidades del negocio.

Esta modernización supone un gran esfuerzo para las empresas, por lo que hay que consensuar con todos los implicados los casos de negocio más adecuados para garantizar que en proyectos con un ciclo de vida tan largo, todas las partes permanecen involucradas. En Mercadona, decidimos, entre otras, modernizar una de las aplicaciones core del negocio, la aplicación de gestión de los Almacenes.

Aplicación legacy vs Aplicación moderna

Seleccionar la plataforma de nube adecuada

Una vez escogida la aplicación, el siguiente paso fue seleccionar la plataforma de nube adecuada. Nosotros nos decidimos por Tanzu Kubernetes Grid (TKG), la nube privada de VMware.

TKG se integra perfectamente con la infraestructura subyacente de vSphere, además, utiliza un cluster de K8s de administración central basado en cluster API, lo que nos permite aprovisionar, actualizar y operar de forma centralizada múltiples clústeres de Kubernetes en sedes distribuidas.

Escoger las tecnologías correctas

Una aplicación orientada a nube necesita, no solo un orquestador de contenedores como K8s, sino también, una serie de servicios que nos permita desplegar las aplicaciones con garantías. En nuestro caso utilizamos las siguientes tecnologías:

  • Orquestador de contenedores: Tanzu.
  • Balanceador de red: NSX Load Balancer.
  • Observabilidad y tracing: Prometheus, Filebeat y Opentelemetry.
  • Registry: Nexus.
  • CI/CD: CloudBees, Spinnaker.

Estrategia de implantación — Automatizar todo

Una vez decidido el tipo de cluster de K8s y las aplicaciones de infraestructura, tocaba implantarlo en todos los Bloques Logísticos y Almacenes de Mercadona.

Desde el principio tuvimos claro que aprovecharíamos la infraestructura física y la capa de virtualización ya desplegada en los Almacenes, un cluster vSphere con almacenamiento distribuido entre los dos CPD’s.

Cluster vSphere con almacenamiento distribuido entre dos CPDs

Arrancamos el proyecto con una hoja en blanco y sin apenas experiencia en el mundo Cloud. Ni que decir tiene que el primer cluster nos llevó días desplegarlo, mucho que aprender, manualidades, fallos y más aprendizaje.

Para los siguientes Almacenes decidimos cambiar de estrategia, automatizar todo lo posible con el fin de acelerar la entrega y evitar errores humanos.

Cómo lo hicimos

Creamos un script en Bash, al que llamamos mercatanzu, con el propósito de ejecutar, una tras otra, todas las acciones necesarias para desplegar el cluster de K8s, configurarlo y crear los prerrequisitos necesarios por las aplicaciones de infraestructura, todo con una única ejecución.

Decidimos hacer mercatanzu en Bash por la flexibilidad que aporta a la hora de integrarse con diferentes APIs (vSphere, AWX, Jira, Google Cloud, Commvault) así como la facilidad de ejecutar binarios como tanzu, kubectl o terraform.

Qué acciones realiza mercatanzu de forma automática

  • Realiza todas las tareas necesarias para la creación y configuración de un cluster Tanzu K8s.
Procedimiento de creación de un cluster Tanzu K8s 2.x
  • Revisa en intervalos de 2 min la creación de los nodos de K8s en el cluster de vSphere.
Comprobación despliegue de nodos en el cluster vSphere
  • Una vez desplegado y configurado el cluster , mercatanzu crea los objetos de K8s necesarios para el despliegue de las aplicaciones de infraestructura como namespaces, serviceaccount, storageclass y secretos. Despliega también el servidor desde el que los desarrolladores acceden al cluster de K8s.
Configuraciones con terraform
  • En los nodos control plane, abre los puertos necesarios por las métricas de Prometheus. Para que la configuración tenga efecto, hay que recrear los tres nodos.
Recreación de los control plane necesario por Prometheus
  • Finalmente, hace una última revisión y abre un ticket al equipo de CI/CD para que continúen con el despliegue de las aplicaciones de infraestructura.
Resumen de la creación de la plataforma Cloud

Un proceso que la primera vez nos llevó más de un día de trabajo, ejecutando cada paso de forma manual, quedó reducido con mercatanzu a 25 min. Teniendo en cuenta que teníamos por delante el despliegue de una nube privada en cada uno de los Bloques Logísticos de Mercadona, el ahorro en tiempo fue más que considerable.

En este punto ya teníamos un cluster de K8s totalmente funcional, con balanceador de red, autenticación ADFS y con las configuraciones previas necesaria para el despliegue de las aplicaciones de infraestructura.

Plataforma nube desplegada con mercatanzu

Despliegue de las aplicaciones de Infraestructura

Cuando un desarrollador sube el código al repositorio de GitLab, este se puede desplegar en PRO utilizando herramientas de CI/CD, pasando previamente por los diferentes entornos.

En Mercadona IT, hemos seleccionado Spinnaker como herramienta de despliegues multi-cloud.

Spinnaker is an open-source, multi-cloud continuous delivery platform that helps you release software changes with high velocity and confidence.

— Spinnaker — Concepts

Cómo lo hicimos

Implementamos varias pipelines para realizar cada una de las tareas necesarias, y una pipeline padre encargada de orquestar todas las anteriores.

Pipeline Padre

Las pipelines que utilizamos realizaban las siguientes tareas:

  • Aplicar permisos de RBAC con Terraform. Para ello tuvimos que extender la funcionalidad de Spinnaker con Custom Job Stages, lo que nos permitió operar con Terraform directamente desde nuestros repositorios de código.
  • Despliegue y configuración de Nexus como repositorio local al Bloque Logístico. La configuración consistió en crear los usuarios de servicio, roles y repositorios necesarios mediante una Custom Job Stages que, mediante un job de K8s y bash, realizaba llamadas REST a los distintos endpoint que expone la herramienta. Por último, mediante el uso de skopeo, copiamos las imágenes desde el repositorio principal (JFrog Artifactory) a los Nexus de los Almacenes.
  • Despliegue del stack de herramientas de observabilidad, compuesto por Prometheus, Filebeat y Opentelemetry. En este caso, usamos la chart de Helm de cada una de las herramientas con la configuración adhoc que necesita, aprovechando las funciones propias de Spinnaker.
Despliegue de las aplicaciones de infraestructura con Spinnaker

Conclusiones

El tiempo que dedicamos a automatizar, además de ayudarnos a comprender cómo funciona nuestra plataforma Cloud, se recuperó con creces durante el proyecto de implantación en todos los Bloques Logísticos de Mercadona:

  • Agilizando la entrega.
  • Quitando tiempos muertos de espera entre los diferentes equipos de soporte.
  • Evitando errores humanos.
Despliegue plataforma Cloud en Bloques Logísticos y Almacenes de Mercadona

--

--