Symfony ❤ Kubernetes
Dynamic feature-review environments

Docker ha cominciato da qualche tempo a far parte dei nostri ambienti di sviluppo e il suo utilizzo è aumentato di recente nel rilascio in produzione di alcuni progetti.

Nell’intervento al Codemotion di Milano 2019,ALessandro Lai conferma questo trend e ci espone il deploy dei container in produzione attraverso Kubernetes. Ma questo strumento ha notevoli feature in più e Lai ha affrontato un esempio completo di applicazione Symfony dalla sua creazione, configurazione e distribuzione attraverso Docker e Kubernetes.

Tesi

Per comprendere al meglio questo speech dobbiamo analizzare nel dettaglio tre strumenti indispensabili

  • Docker : è un sistema che permette di automatizzare la gestione di un sistema software dalla creazione, all’installazione e alla messa in produzione, attraverso dei container software virtualizzati a livello di sistema operativo. In un’applicazione che utilizza docker, quindi, possono coesistere diversi container indipendenti che evitano la creazione di una macchina virtuale ad-hoc.

  • Kubernetes : è un progetto che permette la gestione e l’interoperabilità dei container ad esempio in un sistema Docker.
  • Symfony : è un framework per applicazioni web basato su linguaggio PHP.

Concretamente abbiamo assistito ad un’overview completa nell’utilizzo della tecnologia Kubernetes per gli sviluppatori web.

Focus

Partiamo dalla foglia più piccola dell’intera alberatura di Kubernetes: il POD. Al suo interno è contenuto il vero e proprio cuore dell’applicativo scritto e sviluppato in Symfony. Al suo interno quindi verranno definite le classi e le procedure PHP dell’applicazione Web. Rappresenta un gruppo di uno o più container distribuiti su un singolo nodo/servizio. Tutti i container dichiarati in un pod condividono indirizzo IP, nome host ed altre risorse. I pods astraggono la rete e lo storage dal container sottostante. I PODs possono essere raggruppati in nodi (servizi) e gestiti da un controller-runtime specifico e a loro volta sono controllati dal nodo master di Kubernetes. La comunicazione tra nodo master e servizi sottostanti è data dal “Kubelet”: un servizio eseguito sui nodi che legge i manifest (file .yml) del container e garantisce che i container definiti vengano avviati ed eseguiti. Questo sarà il punto esposto e di comunicazione con il mondo esterno attraverso l’API server. Per gli sviluppatori, invece, ci sarà un ulteriore strumento per poter configurare e gestire Kubernetes: “Kubectl”, la vera e propria riga di comando per lo sviluppo. Quando viene assegnato un pod a un servizio, il kubelet presente su quel nodo chiede a docker di avviare i container specificati. Quindi, il kubelet legge continuamente lo stato di quei container da docker e aggrega le informazioni nel nodo master. Docker invia i container sul nodo, avvia e arresta normalmente i container. Kubernetes automatizza queste operazioni eseguite dal docker anziché costringere gli sviluppatori ad eseguirle manualmente.

Conclusione

Lo speech di Alessandro Lai è stato molto sperimentale, con esempi concreti di utilizzo del codice su un’applicazione web reale. Per comprendere al meglio tutte le particolarità riportate in questo articolo è necessario approfondire ulteriormente gli argomenti chiave in modo pratico. Ecco dei link molto interessanti a riguardo

  • Tutorials Kubernetes mette a disposizione dei veri e propri tutorial on-line su una VM dedicata. In questo modo si impara passo passo con esempi e prove reali sul campo, proprio come al Codemotion con la presentazione di Alessandro Lai.

Grazie alle nozioni di questo specch abbiamo concretizzato la linea di utilizzo dei docker e della loro importanza per il rilascio in produzione di applicativi web e non solo. L’accostamento con Kubernetes permette di organizzare e rendere scalabile ancor di più un software basato su docker.