4 motivi per cui dovresti usare Kubernetes

Sirish Raghuram è co-fondatore e CEO di Platform9 Systems.

Come possono attestare la maggior parte degli sviluppatori di software moderni, i container ci hanno fornito una flessibilità notevolmente maggiore per l'esecuzione di applicazioni native del cloud su infrastrutture fisiche e virtuali. I contenitori impacchettano i servizi che comprendono un'applicazione e li rendono portabili in diversi ambienti di elaborazione, sia per sviluppo / test che per uso in produzione. Con i container, è facile aumentare rapidamente le istanze dell'applicazione per soddisfare i picchi di domanda. E poiché i contenitori si basano sulle risorse del sistema operativo host, sono molto più leggeri delle macchine virtuali. Ciò significa che i contenitori fanno un uso altamente efficiente dell'infrastruttura server sottostante.

Fin qui tutto bene. Tuttavia, sebbene le API di runtime del contenitore siano adatte alla gestione di singoli contenitori, sono decisamente inadeguate quando si tratta di gestire applicazioni che potrebbero comprendere centinaia di contenitori distribuiti su più host. I container devono essere gestiti e connessi al mondo esterno per attività come la pianificazione, il bilanciamento del carico e la distribuzione, ed è qui che uno strumento di orchestrazione dei container come Kubernetes entra in gioco.

Un sistema open source per la distribuzione, il ridimensionamento e la gestione di applicazioni containerizzate, Kubernetes gestisce il lavoro di pianificazione dei container su un cluster di elaborazione e gestisce i carichi di lavoro per garantire che vengano eseguiti come previsto dall'utente. Invece di concentrarsi sulle operazioni come un ripensamento, Kubernetes unisce lo sviluppo del software e le operazioni in base alla progettazione. Utilizzando costrutti dichiarativi e indipendenti dall'infrastruttura per descrivere come sono composte le applicazioni, come interagiscono e come vengono gestite, Kubernetes consente un aumento dell'ordine di grandezza nell'operabilità dei moderni sistemi software.

Kubernetes è stato costruito da Google sulla base della propria esperienza nell'esecuzione di container in produzione e deve sicuramente gran parte del suo successo al coinvolgimento di Google. Google ha alcuni degli sviluppatori di software più talentuosi del pianeta e gestisce alcuni dei più grandi servizi software su scala. Questa combinazione ha assicurato che Kubernetes diventasse una piattaforma solida come una roccia in grado di soddisfare le esigenze di scalabilità di praticamente qualsiasi organizzazione. Questo articolo spiega perché Kubernetes è importante e perché segna un significativo passo avanti per i team devops.

Video correlato: che cos'è Kubernetes?

In questo video di 90 secondi, scopri Kubernetes, il sistema open source per l'automazione di applicazioni containerizzate, da uno degli inventori della tecnologia, Joe Beda, fondatore e CTO di Heptio.

Un framework infrastrutturale per oggi

In questi giorni, gli sviluppatori sono chiamati a scrivere applicazioni che vengono eseguite su più ambienti operativi, inclusi server locali dedicati, cloud privati ​​virtualizzati e cloud pubblici come AWS e Azure. Tradizionalmente, le applicazioni e gli strumenti che le supportano erano strettamente legati all'infrastruttura sottostante, quindi era costoso utilizzare altri modelli di distribuzione nonostante i loro potenziali vantaggi. Ciò significava che le applicazioni diventavano dipendenti da un particolare ambiente sotto diversi aspetti, inclusi i problemi di prestazioni relativi a una specifica architettura di rete; aderenza a costrutti specifici del provider di servizi cloud, come le tecniche di orchestrazione proprietarie; e le dipendenze da un particolare sistema di archiviazione back-end.

PaaS cerca di aggirare questi problemi, ma spesso a costo di imporre requisiti rigorosi in aree come i linguaggi di programmazione e i framework delle applicazioni. Pertanto, PaaS è off limits per molti team di sviluppo.

Kubernetes elimina il blocco dell'infrastruttura fornendo funzionalità di base per i container senza imporre restrizioni. Ottiene questo risultato attraverso una combinazione di funzionalità all'interno della piattaforma Kubernetes, inclusi pod e servizi.

Migliore gestione grazie alla modularità

I contenitori consentono di scomporre le applicazioni in parti più piccole con una chiara separazione delle preoccupazioni. Il livello di astrazione fornito per un'immagine di un singolo contenitore ci consente di ripensare in modo fondamentale a come vengono costruite le applicazioni distribuite. Questo approccio modulare consente uno sviluppo più rapido da parte di team più piccoli e più concentrati, ciascuno responsabile di contenitori specifici. Ci consente inoltre di isolare le dipendenze e fare un uso più ampio di componenti più piccoli e ben sintonizzati.

Ma questo non può essere ottenuto solo con i container; richiede un sistema per integrare e orchestrare queste parti modulari. Kubernetes ottiene questo risultato in parte utilizzando i pod, in genere una raccolta di contenitori controllati come una singola applicazione. I contenitori condividono risorse, come file system, spazi dei nomi del kernel e un indirizzo IP. Consentendo ai contenitori di essere collocati in questo modo, Kubernetes elimina la tentazione di stipare troppe funzionalità in un'unica immagine del contenitore.

Il concetto di servizio in Kubernetes viene utilizzato per raggruppare una raccolta di pod che svolgono una funzione simile. I servizi possono essere facilmente configurati per rilevabilità, osservabilità, scalabilità orizzontale e bilanciamento del carico.

Distribuzione e aggiornamento del software su larga scala

Devops è emerso come metodo per accelerare il processo di creazione, test e rilascio del software. Il suo corollario è stato uno spostamento di enfasi dalla gestione dell'infrastruttura alla gestione del modo in cui il software viene distribuito e aggiornato su larga scala. La maggior parte dei framework di infrastruttura non supporta questo modello, ma Kubernetes lo fa, in parte tramite i controller Kubernetes. Grazie ai controller, è facile utilizzare l'infrastruttura per gestire il ciclo di vita dell'applicazione.

Il Deployment Controller semplifica una serie di complesse attività di gestione. Per esempio:

  • Scalabilità. Il software può essere distribuito per la prima volta in modo scalabile tra i pod e le distribuzioni possono essere ridimensionate in entrata o in uscita in qualsiasi momento.
  • Visibilità. Identifica le distribuzioni completate, in corso e non riuscite con funzionalità di query sullo stato.
  • Risparmio di tempo. Sospendi una distribuzione in qualsiasi momento e riprendila in un secondo momento.
  • Controllo della versione. Aggiorna i pod distribuiti utilizzando versioni più recenti delle immagini dell'applicazione e ripristina una distribuzione precedente se la versione corrente non è stabile.

Tra le altre possibilità, Kubernetes semplifica alcune operazioni di distribuzione specifiche particolarmente utili per gli sviluppatori di applicazioni moderne. Questi includono quanto segue:

  • Scalabilità automatica orizzontale. I programmi di scalabilità automatica Kubernetes ridimensionano automaticamente il numero di pod di una distribuzione in base all'utilizzo di risorse specificate (entro limiti definiti).
  • Aggiornamenti in sequenza. Gli aggiornamenti a una distribuzione Kubernetes sono orchestrati in "modo progressivo", attraverso i pod della distribuzione. Questi aggiornamenti in sequenza vengono orchestrati mentre si lavora con limiti predefiniti opzionali sul numero di pod che possono non essere disponibili e sul numero di pod di riserva che possono esistere temporaneamente.
  • Distribuzioni canarie. Un modello utile quando si distribuisce una nuova versione di una distribuzione consiste nel testare prima la nuova distribuzione in produzione, parallelamente alla versione precedente, e aumentare la nuova distribuzione riducendo contemporaneamente la distribuzione precedente.

A differenza delle tradizionali offerte PaaS all-inclusive, Kubernetes offre un'ampia latitudine per i tipi di applicazioni supportate. Non detta i framework delle applicazioni (come Wildfly), non limita i runtime dei linguaggi supportati (Java, Python, Ruby), soddisfa solo le applicazioni a 12 fattori o distingue le "app" dai "servizi". Kubernetes supporta un'ampia varietà di carichi di lavoro, inclusi carichi di lavoro senza stato, con stato e di elaborazione dati. Se un'applicazione può essere eseguita in un contenitore, dovrebbe funzionare bene su Kubernetes.

Gettare le basi per le app native del cloud

Non sorprende dato l'interesse per i container, sono emersi altri strumenti di gestione e orchestrazione. Alternative popolari includono Apache Mesos con Marathon, Docker Swarm, AWS EC2 Container Service (ECS) e Nomad di HashiCorp.

Ognuno ha i suoi meriti. Docker Swarm è strettamente collegato al runtime Docker, quindi gli utenti possono passare facilmente da Docker a Swarm; Mesos with Marathon non si limita ai container, ma può distribuire qualsiasi tipo di applicazione; AWS ECS è più facile da accedere agli attuali utenti AWS. Tuttavia, i cluster Kubernetes possono essere eseguiti su EC2 e integrarsi con servizi come Amazon Elastic Block Storage, Elastic Load Balancing, Auto Scaling Groups e così via.

Questi framework stanno iniziando a duplicarsi a vicenda in caratteristiche e funzionalità, ma Kubernetes rimane immensamente popolare grazie alla sua architettura, innovazione e alla grande comunità open source che lo circonda.

Kubernetes segna una svolta per i DevOps perché consente ai team di stare al passo con i requisiti dello sviluppo software moderno. In assenza di Kubernetes, i team sono stati spesso costretti a creare script per i propri flussi di lavoro di distribuzione, scalabilità e aggiornamento del software. Alcune organizzazioni impiegano grandi team per gestire queste attività da sole. Kubernetes ci consente di ottenere la massima utilità dai container e di creare applicazioni cloud native che possono essere eseguite ovunque, indipendentemente dai requisiti specifici del cloud. Questo è chiaramente il modello efficiente per lo sviluppo di applicazioni e le operazioni che stavamo aspettando.

Il New Tech Forum offre un luogo per esplorare e discutere la tecnologia aziendale emergente in profondità e ampiezza senza precedenti. La selezione è soggettiva, in base alla nostra scelta delle tecnologie che riteniamo importanti e di maggiore interesse per i lettori. non accetta materiale di marketing per la pubblicazione e si riserva il diritto di modificare tutti i contenuti forniti. Invia tutte le richieste a [email protected]