Cloud native journey per una maison del lusso
Il cliente
Il cliente è una prestigiosa maison del lusso italiana, punto di riferimento a livello mondiale nella produzione di capi e tessuti di altissima qualità a partire dalle materie prime più rare e pregiate. Con una storia decennale di eccellenza artigianale, l’azienda è oggi parte di uno dei principali gruppi internazionali del lusso, pur mantenendo intatta la propria identità e tradizione.
Il cliente opera con diversi siti di produzione in Italia e una rete di negozi monomarca in tutto il mondo, producendo ogni anno milioni di metri di tessuto.
La tensione verso l’innovazione si evince anche sul fronte digitale e infrastrutturale: la divisione IT interna ha la piena consapevolezza di quanto adottare un approccio Cloud Native sia ormai imprescindibile.
L'obiettivo
Avviare un percorso verso l’approccio Cloud Native che migliorasse i processi di sviluppo e permettesse una progressiva modernizzazione del legacy.
La sfida
Il Cliente aveva la necessità di capire se la migrazione in Cloud, e nello specifico su Kubernetes, di un loro applicativo legacy fosse fattibile, sostenibile in termini di risorse e concretamente efficace. Nel dettaglio gli obiettivi erano:
- Approfondire la conoscenza in ambito Cloud Native con un focus particolare su Kubernetes.
- Valutare le modalità di trasferimento da un’architettura OnPrem a Public Cloud.
- Approntare la migrazione in cloud di alcuni progetti di sviluppo: applicazione per gestione Retail on Line 'ROL' (Java-based); siti statici (Apache-based)
- Supportare il miglioramento dei processi di sviluppo.
- Introdurre best practice, velocità e qualità di rilascio.
Al momento dell’assessment del livello di maturità secondo il Cloud Native Maturity Model, una serie di difficoltà infrastrutturali e di organizzative, come la mancanza di documentazione o la conservazione di interventi manuali su una serie di attività già automatizzabili, hanno reso la sfida ancora più interessante.

Un orchestratore, di solito Kubernetes, è essenziale per coordinare la distribuzione e la supervisione dei microservizi all'interno di un'applicazione distribuita basata su container, allocandoli su varie macchine in modo dinamico al momento dell'esecuzione.
La soluzione
Gli stadi evolutivi verso l’approccio Cloud Native riguardano diversi diversi ambiti sia tecnici sia organizzativi:
- Cultura
- Design della soluzione
- Team/Competenze
- Processo
- Architettura
- Manutenzione
- Delivery
- Provisioning
- Infrastruttura
Nel contesto del Cloud Native Journey suggerito, è stata implementata su Azure una piattaforma completa per la gestione del codice sorgente e delle pipeline di Continuous Integration / Continuous Delivery basata su GitLab CE (Community Edition).

Il mantenimento di un ciclo breve di build/test/deliver assicura che il codice sia sempre pronto per la produzione, facilitando il rilascio rapido delle funzionalità ai clienti.
Ciò consente agli sviluppatori di ricevere prontamente il feedback dei clienti e di adattarsi di conseguenza.
Per mezzo di un approccio completamente IaC (Infrastructure as Code), tramite “Terraform” e apposite pipeline di CI sono stati deployati:
- Kubernetes AKS Cluster
- GitLab Server Community Edition
- GitLab runner kubernetes based (modulo)
Nello specifico, il Cloud Native Journey del cliente ha previsto i seguenti step:
- Deployment usando un’architettura a container, per standardizzare gli ambieniti di sviluppo locale ed i processi di rilascio.
- Implementazione dell’automazione per la costruzione degli elementi di infrastruttura necessari per il setup up degli ambienti di sviluppo e di produzione tramite Terraform e IaC.
- Installazione di GitLab come sistema di versioning oltre che tool per la creazione di pipeline CI/CD.
- Utilizzo di CI anche per generare artefatti pronti per il deployment.
- Implementazione di sistema di monitoring dell’infrastruttura con relativo sistema di alerting.
- Applicazione dei principi di CD per aumentare la capacità di rilasciare in modo frequente e affidabile.
- Mantenimento dell'infrastruttura aggiornata tramite commit e merge requests sui repository di IaC.
I risultati
La PoC ha confermato la fattibilità di quanto il Cliente si fosse prefissato e si aspettasse di ottenere, dimostrando peraltro di essere facilmente replicabile. A valle del progetto, uno dei deliverables fondamentali attesi dal Cliente è stato un report di analisi sui risultati ottenuti e sullo stato dell’arte raggiunto.

È fondamentale evitare di affrontare la Cloud Native Transformation con un semplice Lift and Shift del sistema attuale nel cloud.
Meglio considerare la migrazione selettiva di alcuni componenti alla fine del processo.
Quali sono stati, in dettaglio, i principali risultati ottenuti?
- Una piattaforma di CI/CD e di versionamento del codice (GitLab) che sia facilmente manuntenibile e replicabile tramite un progetto di Infrastructure as Code.
- Maggiore conoscenza e consapevolezza di cosa sia necessario fare per trasformare un’applicazione legacy in un’applicazione Cloud Native, seguendo i principi della metodologia nota come 'The twelve-factor app'.
- Due cluster Kubernetes, uno per gli ambienti di sviluppo ed uno per gli ambienti di produzione, su cui era possibile deployare utilizzando le pipeline CI/CD di GitLab.
- Una serie di POC costituite da alcuni progetti GitLab in cui un semplice sito web statico scritto in HTML e PHP versionato in git, veniva containerizzato e deployato su diversi cluster Kubernetes (sviluppo e produzione) utilizzando una pipeline CI/CD di GitLab.
- La consapevolezza che migrare un applicativo legacy su Kubernetes non sempre è possibile senza un sostanzioso refactoring; le conoscenze acquisite durante il percorso hanno fornito gli strumenti necessari per capire in modo oggettivo i requisiti minimi cui un’applicazione deve soddisfare per poter funzionare in un ambiente dinamico come Kubernetes. Dall’altra parte è emerso che esistono anche altre strade che permettono di approcciare la migrazione in cloud in modo più graduale, fosse anche partendo con un semplice lift and shift e sfruttando ad esempio i servizi di Database as a service che il cloud vendor mette a disposizione.
Risultati chiave
Tecnologie utilizzate
Cloud
- Azure
- Kubernetes AKS
- Docker
DevOps
- GitLab CE
- Terraform
- CI/CD
Backend
- Java
- Containerization
- Microservices
Metodologia
- IaC
- Training on the job
- Assessment