Ben sappiamo che in ambito IT la parola “container” è da diversi anni sulle labbra (o sotto le dita sulla tastiera) di tutti. Che optiate per Docker o per rkt, che orchestriate con Kubernetes o Swarm, che siate su bare-metal o su qualche cloud pubblico, probabilmente avete già avuto modo di usare i container.
Uno dei punti più comuni su cui fare leva quando viene chiesto quale sia il reale vantaggio di usare un container al posto di lanciare il mero processo direttamente sulla macchina è la loro portabilità: spesso si sente dire
Un container lo puoi eseguire e funziona allo stesso modo sul portatile dello sviluppatore così come sul cluster di produzione
Ed è vero; la semplificazione introdotta da Docker e la successiva standardizzazione delle diverse componenti in gioco (grazie ad attori quali CNCF), ha reso i container davvero portabili.
C’è un però grande come una casa: seppure i singoli container siano portabili, ben sappiamo che un’applicazione difficilmente è composta da un singolo componente (processo) indipendente da tutto. Spesso abbiamo diversi web server, alcuni application server e magari dei database per tenere i dati; e la nostra applicazione necessita di tutti questi componenti per essere realmente funzionante.
Al momento è proprio qui che si apre il vaso di Pandora: ci sono mille modi per distribuire uno stack applicativo basato su container completo, ed online ne troviamo parecchi già pronti all’uso, però non è detto che le tecnologie su cui questo “pacchetto” siano le stesse della nostra infrastruttura.
Magari il deployment che trovate è basato su CloudFormation e Compose, o Terraform ed Ansible, ma se non vi trovate nella situazione di avere esattamente quelle tecnologie, dovete fondamentalmente “reimpacchettarvi lo stack”.
Alla DockerCon di Barcellona di questi giorni, però, è stato presentato un nuovo progetto: nato dalla collaborazione tra Docker Inc. e Microsoft, con la partnership di Bitnami ed HashiCorp, è stato presentato CNAB (Cloud Native Application Bundle).
CNAB si propone come un formato standard ed open source in grado di fornire delle specifiche di pacchettizzazione; come si traduce questo? Semplice, l’idea è quello di creare pacchetti standard contenenti gli stack applicativi in una struttura (basata su json) che sia agnostica all’infrastruttura container su cui questa dovrà girare; queste le parole di Matt Butcher alla presentazione:
By design, it is cloud agnostic. It works with everything from Azure to on-prem OpenStack, from Kubernetes to Swarm, and from Ansible to Terraform. It can execute on a workstation, a public cloud, an air-gapped network, or a constrained IoT environment.
E’ cloud-agnostica per design. Funziona con tutto, da Azure ad ambienti OpenStack on-premise, da Kubernetes a Swarm, da Terraform ad Ansible. Può essere usata su una workstation, un cloud pubblico, una rete estremamente compressa, o in un ambiente IoT limitato.
Queste alcune delle feature promesse:
- Utilizzo di verbi operazionali per la gestione della vita della app (installazione, aggiornamento, disinstallazione): questo permetterà di separare il pacchetto dall’infrastruttura utilizzata per la sua erogazione
- Firmare e verificare un pacchetto applicativo, anche quando la tecnologia al suo interno non supporta nativamente questo tipo di controlli
- Abilitare l’esportazione di un pacchetto e tutte le sue dipendenze in maniera che possa essere riprodotto con sicurezza in altri ambienti, compresi quelli offline
- Gestire questi pacchetti in repository, così da poter gestire l’installazione remota
Molto interessante dunque, vorrebbe dire che finalmente riusciremo a rendere non solo i singoli processi ma interi stack applicativi realmente indipendenti dall’infrastruttura su cui questi girano, permettendo di poter testare nuove tecnologie (che comunque devono abbracciare lo standard) e sostituire componenti infrastrutturali in maniera realmente trasparente.
Al momento, però, CNAB è ancora un grande work-in-progress. Microsoft e Docker stanno spingendo al fine di far si che altri si uniscano al gruppo ed aiutino a renderlo una specifica funzionante a livelli di produzione.
Leggi il contenuto originale su Mia mamma usa Linux!