Introduzione
La distribuzione dei container ha trasformato le pratiche consolidate di sviluppo del software. Erano necessari nuovi strumenti e tecniche, quindi Google ha sviluppato Kubernetes, un sistema di orchestrazione di container open source per il ridimensionamento, l'implementazione e la gestione automatizzati delle applicazioni.
Fornisce un'interfaccia API unificata in grado di gestire anche i sistemi più complessi, distribuiti su più server e piattaforme.
Scopri cosa rende Kubernetes uno strumento indispensabile per la gestione e la distribuzione di container.
Cos'è l'orchestrazione container?
Uno strumento di orchestrazione dei contenitori , come Kubernetes, automatizza la gestione dei container in un ambiente caotico e in costante mutamento. Per comprendere appieno il suo ruolo, ci addentreremo nella complessità degli ambienti container.
Contenitori sono piccoli ambienti virtuali con memoria individuale, file di sistema e spazio di elaborazione. Non necessitano di sistemi operativi propri e sono molto più leggeri delle tradizionali macchine virtuali . Le loro dimensioni e l'autosufficienza li rendono portatili e infinitamente scalabili su diversi dispositivi e sistemi operativi.
Gli sviluppatori possono ora progettare le applicazioni come un insieme di microservizi più piccoli e indipendenti. Idealmente, un singolo servizio dovrebbe svolgere solo una singola funzione. Questi microservizi vengono quindi accoppiati e distribuiti in modo rapido e semplice su un cluster Kubernetes.
Come funziona Kubernetes?
I contenitori sono progettati per essere il più leggeri possibile. Di conseguenza, sono fragili e transitori. Invece di aumentare la durata di un singolo container, Kubernetes sfrutta la natura instabile di un container e trasforma quella debolezza in una risorsa.
Kubernetes ha solo bisogno di un quadro generale di come vorresti che fosse il tuo cluster. Questo framework è in genere un file manifest di base che fornisci a Kubernetes utilizzando uno strumento di interfaccia a riga di comando.
L'interfaccia della riga di comando predefinita di Kubernetes si chiama kubectl . Kubectl viene utilizzato per gestire direttamente le risorse del cluster e fornire istruzioni al server dell'API Kubernetes. Il server API aggiunge e rimuove automaticamente i contenitori nel tuo cluster per assicurarsi che lo stato desiderato definito e lo stato effettivo del cluster corrispondono sempre.
Gli elementi principali di un cluster Kubernetes sono il Nodo principale , Nodi di lavoro e baccelli . I componenti che prendono decisioni globali sul cluster, come il server API, si trovano sul nodo principale.
Nodo principale Kubernetes
Un nodo è una macchina fisica o VM. Il nodo principale è il livello di orchestrazione del contenitore di un cluster. I componenti del Master Node amministrano i nodi di lavoro e assegnano singole attività a ciascuno. È responsabile della creazione e del mantenimento della comunicazione all'interno del cluster e del bilanciamento del carico dei carichi di lavoro.
Nodo principale
Server API | Il server API comunica con tutti i componenti all'interno del cluster. |
Archivio valori-chiave (ecc) | Un archivio chiave-valore distribuito leggero utilizzato per accumulare tutti i dati del cluster. |
Controller | Utilizza il server API per monitorare lo stato del cluster. Prova a spostare lo stato effettivo del cluster in modo che corrisponda allo stato desiderato dal file manifest. |
Programmazione | Programma i pod appena creati sui nodi di lavoro. Seleziona sempre i nodi con il minor traffico per bilanciare il carico di lavoro. |
Nodo di lavoro Kubernetes
I componenti del nodo principale controllano i nodi di lavoro . Esistono più istanze di nodi di lavoro, ciascuna delle quali esegue le attività assegnate. Questi nodi sono le macchine in cui vengono distribuiti i carichi di lavoro containerizzati e i volumi di archiviazione.
Nodo di lavoro
Kubelet | Un demone che viene eseguito su ciascun nodo e risponde alle richieste del master di creare, distruggere e monitorare i pod su quella macchina. |
Runtime del contenitore | Un runtime del contenitore recupera le immagini da un registro immagini contenitore e avvia e arresta i contenitori. Di solito si tratta di un software o plug-in di terze parti, come Docker. |
Proxy Kube | Un proxy di rete che mantiene la comunicazione di rete con i tuoi Pod dall'interno o dall'esterno del cluster. |
Componenti aggiuntivi (DNS, interfaccia utente Web..) | Funzionalità aggiuntive che puoi aggiungere al tuo cluster per estendere determinate funzionalità. |
Cacca | Un baccello è l'elemento più piccolo della pianificazione in Kubernetes. Rappresenta un "wrapper" per il contenitore con il codice dell'applicazione. Se devi ridimensionare la tua app all'interno di un cluster Kubernetes, puoi farlo solo aggiungendo o rimuovendo i pod. Un nodo può ospitare più pod. |
Come gestire i cluster Kubernetes
Kubernetes dispone di diversi strumenti che gli utenti o i componenti interni utilizzano per identificare, gestire e manipolare gli oggetti all'interno del cluster Kubernetes.
Etichetta
Etichette sono semplici coppie chiave/valore che possono essere assegnate ai pod. Una volta assegnati, i pod sono più facili da identificare e controllare. Le etichette raggruppano e organizzano i pod in un sottoinsieme definito dall'utente. La possibilità di raggruppare i pod e fornire loro identificatori significativi migliora il controllo dell'utente su un cluster.
Annotazioni
Proprio come etichette, annotazioni sono anche coppie chiave/valore e possono essere utilizzate per allegare metadati agli oggetti. Tuttavia, Kubernetes non utilizza le annotazioni per selezionare e identificare gli oggetti.
Le annotazioni memorizzano informazioni che non devono essere utilizzate dalle risorse interne di Kubernetes. Potrebbero contenere informazioni di contatto dell'amministratore, informazioni generali sull'immagine o sulla build, posizioni di dati specifici o suggerimenti per la registrazione. Con le annotazioni, queste informazioni utili non devono più essere archiviate su risorse esterne, aumentando le prestazioni.
Spazi dei nomi in Kubernetes
Ogni oggetto in un cluster Kubernetes ha un ID univoco e un nome che denota il suo tipo di risorsa. Uno spazio dei nomi viene utilizzato per mantenere separato un gruppo di risorse. Ogni nome all'interno di uno spazio dei nomi deve essere univoco per interrompere i problemi di collisione dei nomi. Non ci sono tali limitazioni quando si utilizza lo stesso nome in spazi dei nomi diversi.
Questa caratteristica distintiva ti consente di mantenere istanze staccate dello stesso oggetto, con lo stesso nome, in un ambiente distribuito.
Per elencare gli spazi dei nomi esistenti in un cluster, digita il seguente comando nell'interfaccia della riga di comando:
kubectl get namespaces
Controller della replica
Il concetto di microservizi implica implicitamente che più istanze di un determinato servizio devono essere distribuite ed eseguite contemporaneamente. Replica controller gestire il numero di repliche per una determinata istanza di un pod. Combinando i controller di replica con le etichette definite dall'utente, puoi facilmente gestire il numero di pod in un cluster utilizzando l'etichetta appropriata.
Ad esempio, possiamo impostare il numero di repliche nel nostro file di configurazione su cinque (5). Se ci sono solo tre (3) repliche in esecuzione al momento, Kubernetes ne attiverà altre due (2) per corrispondere allo stato desiderato. Se sono in esecuzione 10 repliche, Kubernetes ne terminerà cinque (5).
Kubernetes lavora continuamente per armonizzare il numero di repliche con il numero definito nel file di configurazione.
Distribuzione
Un dimpiego è un meccanismo che stabilisce un modello che garantisce che i pod siano attivi e in esecuzione, aggiornati o ripristinati come definito dall'utente. Una distribuzione può superare un singolo pod e distribuirsi su più pod.
I controller di replica controllano il numero di repliche di un servizio. I pod vengono aggiunti o rimossi regolarmente da un cluster. Durante questo processo, i pod spesso si spostano all'interno del cluster e vengono persino distribuiti su nodi diversi. Per questo motivo, l'indirizzo IP di un pod non è costante. Il servizio Kubernetes utilizza un selettore di etichette per raggruppare i pod e astrarli con un unico IP virtuale utilizzato per scoprire questi pod e interagire con essi.
Perché hai bisogno di Kubernetes?
Uso efficiente delle risorse
Gli strumenti di orchestrazione dei container, come Kubernetes, conservano le risorse in modo più efficiente di quanto un essere umano possa mai fare. Kubernetes monitora il cluster e fa scelte su dove lanciare i tuoi container in base alle risorse attualmente consumate sui tuoi nodi.
Comunicazione e sincronizzazione dei container
Poiché un'app richiede spesso più di un container, Kubernetes può distribuire applicazioni multi-container e assicurarsi che tutti i container siano sincronizzati e comunichino tra loro.
Kubernetes offre informazioni sullo stato di salute della tua applicazione. Può fornire informazioni e metriche vitali dei tuoi contenitori e cluster. Quando un'applicazione si interrompe, Kubernetes la ripristina automaticamente facendo girare un altro container con tempi di inattività minimi con l'uso ottimale delle risorse di sistema.
Adatta in modo efficiente
Senza strumenti di orchestrazione, il ridimensionamento delle applicazioni diventerebbe un processo che richiede tempo. Le organizzazioni possono ora adattarsi rapidamente alle esigenze del mercato aggiungendo o rimuovendo container a seconda dei carichi di lavoro momentanei. Ad esempio, i rivenditori online possono aumentare istantaneamente la capacità della loro applicazione durante l'aumento della domanda. Nei periodi di minore domanda, gli amministratori possono ridimensionare rapidamente l'applicazione.
Come iniziare con Kubernetes
Poiché Kubernetes è un sistema per impostare e coordinare i container, un prerequisito per utilizzarlo è disporre di un motore di containerizzazione .
Esistono molte soluzioni di container tra cui Docker è il più popolare oggi. Altri fornitori di container includono AWS, LXD , Contenitori Java , Contenitori Hyper-V e Contenitori di Windows Server .
Oltre ai container, ci sono altri progetti e supporto su cui Kubernetes fa affidamento per offrire ai propri utenti un'esperienza completa. Alcuni di loro sono:
- Docker o Atomic Registry (per il registro ufficiale)
- Ansible (per l'automazione)
- OpenvSwitch e routing edge intelligente (per il networking)
- LDAP, SELinux, RBAC e OAUTH con livelli multi-tenancy (per la sicurezza Kubernetes)
- Heapster, Kibana, Hawkular ed Elastic (per la telemetria)
Per i principianti che non hanno ancora esperienza nella distribuzione di più container, Minikube è un ottimo modo per iniziare. Minikube è un sistema per eseguire localmente un cluster a nodo singolo ed è eccellente per imparare le basi, prima di passare a Kubernetes.
Se desideri saperne di più su Ansible e Kubernetes, consulta il nostro articolo sulle differenze tra Ansible e Kubernetes.