GNU/Linux >> Linux Esercitazione >  >> Cent OS

Comprensione dell'architettura Kubernetes con i diagrammi

Introduzione

Questo tutorial è il primo di una serie di articoli incentrati su Kubernetes e sul concetto di distribuzione di container. Kubernetes è uno strumento utilizzato per gestire i cluster di applicazioni containerizzate. In informatica, questo processo viene spesso definito orchestrazione .

L'analogia con un'orchestra musicale è, per molti versi, calzante. Proprio come farebbe un direttore d'orchestra, Kubernetes coordina molti microservizi che insieme formano un'applicazione utile. Kubernetes monitora automaticamente e perennemente il cluster e apporta modifiche ai suoi componenti.

La comprensione dell'architettura Kubernetes è fondamentale per la distribuzione e la gestione delle applicazioni containerizzate.

Cos'è Kubernetes?

Kubernetes o k8s in breve, è un sistema per automatizzare la distribuzione delle applicazioni. Le applicazioni moderne sono sparse su cloud, macchine virtuali e server. L'amministrazione manuale delle app non è più un'opzione praticabile.

K8s trasforma le macchine virtuali e fisiche in una superficie API unificata. Uno sviluppatore può quindi utilizzare l'API Kubernetes per distribuire, ridimensionare e gestire applicazioni containerizzate.

La sua architettura fornisce anche un framework flessibile per i sistemi distribuiti. K8s orchestra automaticamente il ridimensionamento e il failover per le tue applicazioni e fornisce modelli di distribuzione.

Aiuta a gestire i contenitori che eseguono le applicazioni e garantisce che non vi siano tempi di inattività in un ambiente di produzione. Ad esempio, se un container va giù, un altro container prende automaticamente il suo posto senza che l'utente finale se ne accorga.

Kubernetes non è solo un sistema di orchestrazione. È un insieme di processi di controllo indipendenti e interconnessi. Il suo ruolo è lavorare continuamente sullo stato attuale e spostare i processi nella direzione desiderata.

Consulta il nostro articolo su Cos'è Kubernetes se vuoi saperne di più sull'orchestrazione dei container.

Architettura e componenti Kubernetes

Kubernetes ha un'architettura decentralizzata che non gestisce le attività in sequenza. Funziona sulla base di un modello dichiarativo e implementa il concetto di "stato desiderato". .' Questi passaggi illustrano il processo di base di Kubernetes:

  1. Un amministratore crea e inserisce lo stato desiderato di un'applicazione in un file manifest.
  2. Il file viene fornito al server API Kubernetes utilizzando una CLI o un'interfaccia utente. Lo strumento da riga di comando predefinito di Kubernetes si chiama kubectl . Se hai bisogno di un elenco completo di comandi kubectl, dai un'occhiata al nostro Cheat Sheet di Kubectl.
  3. Kubernetes archivia il file (lo stato desiderato di un'applicazione) in un database chiamato Key-Value Store (etcd) .
  4. Kubernetes implementa quindi lo stato desiderato su tutte le applicazioni pertinenti all'interno del cluster.
  5. Kubernetes monitora continuamente gli elementi del cluster per assicurarsi che lo stato corrente dell'applicazione non vari dallo stato desiderato.

Esploreremo ora i singoli componenti di un cluster Kubernetes standard per comprendere il processo in modo più dettagliato.

Cos'è Master Node in Kubernetes Architecture?

Il Kubernetes Master (Master Node) riceve input da una CLI (Command-Line Interface) o UI (User Interface) tramite un'API. Questi sono i comandi che fornisci a Kubernetes.

Definisci pod, set di repliche e servizi che desideri che Kubernetes mantenga. Ad esempio, quale immagine del contenitore utilizzare, quali porte esporre e quante repliche di pod eseguire.

Fornisci anche i parametri dello stato desiderato per le applicazioni in esecuzione in quel cluster.

Nodo principale Kubernetes

Server API

Il server API è il front-end del piano di controllo e l'unico componente nel piano di controllo con cui interagiamo direttamente. I componenti interni del sistema, così come i componenti utente esterni, comunicano tutti tramite la stessa API.

Archivio valori chiave (ecc)

Il Key Value Store, chiamato anche etcd , è un database utilizzato da Kubernetes per eseguire il backup di tutti i dati del cluster. Memorizza l'intera configurazione e lo stato del cluster. Il nodo principale interroga etcd per recuperare i parametri per lo stato di nodi, pod e contenitori.

Titolare

Il ruolo del Titolare del trattamento consiste nell'ottenere lo stato desiderato dal server API. Verifica lo stato corrente dei nodi che ha il compito di controllare, determina se ci sono differenze e le risolve, se presenti.

Programmatore

Un programmatore controlla le nuove richieste provenienti dal server API e le assegna a nodi sani. Classifica la qualità dei nodi e distribuisce i pod al nodo più adatto. Se non ci sono nodi adatti, i pod vengono messi in uno stato in sospeso fino a quando non viene visualizzato tale nodo.

Cos'è il nodo di lavoro nell'architettura Kubernetes?

I nodi di lavoro ascoltano il server API per nuovi incarichi di lavoro; eseguono gli incarichi di lavoro e quindi riportano i risultati al nodo principale di Kubernetes.

Nodo di lavoro Kubernetes

Kubelet

Il kubelet viene eseguito su ogni nodo del cluster. È il principale agente di Kubernetes. Installando kubelet, la CPU, la RAM e lo storage del nodo diventano parte del cluster più ampio. Controlla le attività inviate dal server API, esegue l'attività e riporta al Master. Monitora inoltre i pod e segnala al pannello di controllo se un pod non è completamente funzionante. Sulla base di tali informazioni, il Master può quindi decidere come allocare compiti e risorse per raggiungere lo stato desiderato.

Runtime del contenitore

Il runtime del contenitore estrae le immagini da un registro immagini contenitore e avvia e arresta i contenitori. Un software o un plug-in di terze parti, come Docker, di solito esegue questa funzione.

Proxy Kube

Il proxy kube si assicura che ogni nodo ottenga il suo indirizzo IP, implementa iptables locali e regole per gestire il routing e il bilanciamento del carico del traffico.

Sacca

Un baccello è l'elemento più piccolo della pianificazione in Kubernetes. Senza di essa, un contenitore non può far parte di un cluster. Se devi ridimensionare la tua app, puoi farlo solo aggiungendo o rimuovendo i pod.

Il pod funge da "wrapper" per un singolo contenitore con il codice dell'applicazione. In base alla disponibilità delle risorse, il Master pianifica il pod su un nodo specifico e si coordina con il runtime del container per avviare il container.

Nei casi in cui i pod non riescono inaspettatamente a svolgere le loro attività, Kubernetes non tenta di risolverli. Invece, crea e avvia un nuovo pod al suo posto. Questo nuovo pod è una replica, fatta eccezione per il DNS e l'indirizzo IP. Questa funzionalità ha avuto un profondo impatto sul modo in cui gli sviluppatori progettano le applicazioni.

A causa della natura flessibile dell'architettura Kubernetes, le applicazioni non devono più essere collegate a un'istanza particolare di un pod. Al contrario, le applicazioni devono essere progettate in modo che un pod completamente nuovo, creato ovunque all'interno del cluster, possa sostituirlo senza problemi. Per assistere in questo processo, Kubernetes utilizza servizi .

Servizi Kubernetes

I baccelli non sono costanti. Una delle migliori funzionalità offerte da Kubernetes è che i pod non funzionanti vengono sostituiti automaticamente da quelli nuovi.

Tuttavia, questi nuovi pod hanno un diverso set di IP. Può causare problemi di elaborazione e abbandono degli IP poiché gli IP non corrispondono più. Se lasciata incustodita, questa proprietà renderebbe i pod altamente inaffidabili.

Vengono introdotti servizi per fornire una rete affidabile portando indirizzi IP e nomi DNS stabili nel mondo instabile dei pod.

Controllando il traffico in entrata e in uscita al pod, un servizio Kubernetes fornisce un endpoint di rete stabile:IP, DNS e porta fissi. Attraverso un servizio, qualsiasi pod può essere aggiunto o rimosso senza il timore che le informazioni di base della rete cambino in alcun modo.

Come funzionano i servizi Kubernetes?

I pod sono associati ai servizi tramite coppie chiave-valore denominate etichette e selettori . Un servizio rileva automaticamente un nuovo pod con etichette che corrispondono al selettore.

Questo processo aggiunge senza problemi nuovi pod al servizio e, allo stesso tempo, rimuove i pod terminati dal cluster.

Ad esempio, se lo stato desiderato include tre repliche di un pod e un nodo che esegue una replica non riesce , lo stato attuale è ridotto a due pod. Kubernetes osserva che lo stato desiderato è di tre capsule. Quindi programma una nuova replica per prendere il posto del pod guasto e assegnarlo a un altro nodo del cluster.

Lo stesso vale per l'aggiornamento o il ridimensionamento dell'applicazione aggiungendo o rimuovendo i pod. Una volta aggiornato lo stato desiderato, Kubernetes rileva la discrepanza e aggiunge o rimuove i pod in modo che corrispondano al file manifest. Il pannello di controllo di Kubernetes registra, implementa ed esegue cicli di riconciliazione in background che verificano continuamente se l'ambiente soddisfa i requisiti definiti dall'utente.

Cos'è la distribuzione di container?

Per comprendere appieno come e cosa orchestra Kubernetes, dobbiamo esplorare il concetto di distribuzione di container .

Distribuzione tradizionale

Inizialmente, gli sviluppatori hanno distribuito le applicazioni su singoli server fisici. Questo tipo di distribuzione ha posto diverse sfide. La condivisione delle risorse fisiche significava che un'applicazione poteva assorbire la maggior parte della potenza di elaborazione, limitando le prestazioni di altre applicazioni sulla stessa macchina.

Distribuzione tradizionale

L'espansione della capacità hardware richiede molto tempo, il che a sua volta aumenta i costi. Per risolvere i limiti hardware, le organizzazioni hanno iniziato a virtualizzare le macchine fisiche.

Distribuzione virtualizzata

La distribuzione virtualizzata ti consente di creare ambienti virtuali isolati, Macchine virtuali (VM) , su un unico server fisico. Questa soluzione isola le applicazioni all'interno di una macchina virtuale, limita l'uso delle risorse e aumenta la sicurezza. Un'applicazione non può più accedere liberamente alle informazioni elaborate da un'altra applicazione.

Distribuzione virtualizzata

Le implementazioni virtualizzate ti consentono di scalare rapidamente e distribuire le risorse di un singolo server fisico, aggiornare a piacimento e tenere sotto controllo i costi hardware. Ogni macchina virtuale ha il suo sistema operativo e può eseguire tutti i sistemi necessari sull'hardware virtualizzato.

Distribuzione container

La distribuzione dei container è il passo successivo nell'unità per creare un modello più flessibile ed efficiente. Proprio come le macchine virtuali, i container hanno memoria individuale, file di sistema e spazio di elaborazione. Tuttavia, il rigoroso isolamento non è più un fattore limitante.

Più applicazioni possono ora condividere lo stesso sistema operativo sottostante. Questa funzionalità rende i container molto più efficienti rispetto alle VM complete. Sono portabili su cloud, dispositivi diversi e quasi tutte le distribuzioni di sistemi operativi.

Distribuzione container

La struttura del contenitore consente inoltre alle applicazioni di funzionare come parti più piccole e indipendenti. Queste parti possono quindi essere distribuite e gestite dinamicamente su più macchine. La struttura elaborata e la segmentazione dei compiti sono troppo complesse per essere gestite manualmente.

È necessaria una soluzione di automazione, come Kubernetes, per gestire efficacemente tutte le parti mobili coinvolte in questo processo.


Cent OS
  1. Comprensione delle chiamate di sistema su Linux con strace

  2. Spiegazione dell'architettura Apache Hadoop (con diagrammi)

  3. Come installare Kubernetes con Minikube su Ubuntu 20.04

  4. Torna a uno stato di lavoro con btrfs + apt-btrfs-snapshot su Ubuntu 12.10

  5. Imposta il cluster Kubernetes con Rancher

Come configurare Kubernetes 1.5 con kubeadm su CentOS

Come distribuire il cluster Kubernetes su AWS con Amazon EKS

Come distribuire Kubernetes a nodo singolo con Microk8s su Ubuntu 20.04

Da Docker Compose a Kubernetes con Podman

Come visualizzare i registri dei pod Kubernetes con Kubectl

Capire Crontab in Linux con esempi