Come ridimensionare i container Docker tra i server utilizzando Kubernetes

0
156

Docker è una piattaforma di containerizzazione orientata agli sviluppatori che consente di creare pacchetti di applicazioni come standalone contenitori. Funzioneranno ovunque sia disponibile un runtime di container compatibile.

La popolarità di Docker lo ha reso quasi sinonimo di container, ma non è la tecnologia perfetta per tutti i casi d'uso. L'utilizzo di Docker così com'è presenta sfide in produzione poiché la sua CLI è attrezzata solo per gestire singoli container.

Kubernetes è una piattaforma di orchestrazione che gestisce stack di container e li ridimensiona su più server. Puoi distribuire su una flotta di macchine fisiche, migliorando la ridondanza e la resilienza del tuo servizio. Ecco come puoi avviare il tuo cluster per ridimensionare il tuo “Docker” contenitori.

Nozioni di base su Kubernetes

Riconoscere alcuni termini chiave di Kubernetes ti aiuterà a capire le differenze rispetto a Docker. Il dizionario Kubernetes descrive decine di risorse che puoi aggiungere al tuo cluster. Solo i componenti che controllano la pianificazione del contenitore sono rilevanti per questo articolo.

A un livello elevato, un'installazione Kubernetes è un cluster di “nodi.” I nodi sono macchine fisiche indipendenti che ospitano i tuoi carichi di lavoro. Un unico “maestro” è responsabile del coordinamento (“orchestrazione”) delle operazioni del cluster “scheduling” nuovi contenitori al nodo di lavoro più appropriato.

Ecco alcuni termini critici:

  • Maestro – Il nodo master gestisce il cluster. Questa è la macchina su cui installi Kubernetes. Esegue il piano di controllo e delega l'hosting di app containerizzate ai nodi di lavoro.
  • Piano di controllo – Il piano di controllo è il componente software del nodo master. Incorpora diversi servizi, tra cui un server API, un archivio di configurazione e un pianificatore di contenitori.
  • Nodo– Un nodo è una macchina che ospita i tuoi contenitori. Ogni lavoratore esegue un componente Kubernetes chiamato Kubelet. Questo rimane in contatto con il piano di controllo, ricevendo istruzioni di programmazione su cui agisce per approvvigionare nuovi contenitori.
  • Pod – Un pod è l'unità di calcolo più piccola in un cluster Kubernetes, che rappresenta un gruppo di istanze di container. L'astrazione Pod ti consente di interagire con più contenitori in esecuzione in modo aggregato.
  • Set di repliche– I set di repliche sono responsabili del ridimensionamento dei pod per garantire che sia disponibile un numero specificato di repliche. Se richiedi tre repliche di un pod, il set di repliche garantirà il rispetto del vincolo di disponibilità. I pod vengono sostituiti automaticamente in caso di errore, consentendoti di automatizzare la replica dei container sui server.

Pubblicità

La creazione di un cluster scalabile richiede un nodo master, almeno due nodi di lavoro e una distribuzione che fornisca più repliche. Kubernetes sarà in grado di pianificare i tuoi pod su tutti i nodi disponibili, offrendoti resilienza nel caso in cui uno subisca un'interruzione.

Creazione del tuo cluster

Kubernetes è disponibile come offerta gestita dalla maggior parte dei principali fornitori di servizi cloud. Questi forniscono un modo con un clic per creare il tuo piano di controllo e aggiungere un numero variabile di nodi di lavoro.

Puoi eseguire un cluster sul tuo hardware utilizzando una distribuzione Kubernetes autonoma come MicroK8s. Avrai bisogno di almeno due macchine fisiche o virtuali isolate se vuoi avere un supporto per la pianificazione ridondante.

Installa MicroK8 su entrambe le macchine. Designare un nodo come master e utilizzare il comando add-node per avviare il processo di registrazione del nodo:

microk8s add-node

Questo emetterà un comando join microk8s. Passa al tuo nodo secondario ed esegui il comando. Si unirà al primo cluster come nuovo lavoratore. Ora entrambe le macchine sono pronte per ospitare i tuoi carichi di lavoro containerizzati.

Definizione di una distribuzione con scalabilità orizzontale

Un'applicazione che viene eseguita su più server è descritto come “ridimensionato orizzontalmente.” Si sta diffondendo in diversi ambienti distinti. La scalabilità verticale di un sistema implica l'aggiunta di risorse a un ambiente esistente.

Pubblicità

Il modo più semplice per definire un carico di lavoro Kubernetes è con una distribuzione. Questo tipo di risorsa crea pod da un'immagine contenitore e imposta percorsi di rete pubblici tramite un servizio. Le implementazioni predefinite su una singola istanza Pod ma possono essere configurate con più repliche.

Ecco un semplice manifest di implementazione:

apiVersion: apps/v1 kind: Deployment metadata: name: nginx spec: repliche: 3 selettore: matchLabels: app: nginx template: metadati: etichette: app: nginx spec: contenitori: – nome: nginx immagine: nginx: ultime porte: – containerPort: 80

Applica il manifest al tuo cluster usando Kubectl:

microk8s kubectl apply -f ./manifest.yaml

Kubernetes creerà tre Pod, ognuno dei quali ospita un server web NGINX creato dall'immagine nginx:latest. La porta 80 è esposta come porta container per abilitare il traffico in entrata.

I pod verranno automaticamente distribuiti tra i nodi del cluster. Un nodo sarà idoneo a ospitare un Pod se può fornire risorse sufficienti.

Puoi aggiornare il numero di repliche in qualsiasi momento. Modifica il campo delle repliche nel tuo manifest e riapplicalo al tuo cluster. Lo scheduler Kubernetes agirà per eseguire il provisioning di nuovi Pod o terminare quelli vecchi come richiesto. Se ridimensioni le repliche fino a 0, puoi portare la tua applicazione offline senza effettivamente eliminare la distribuzione o le risorse associate.

Aggiunta dinamica di nodi

L'aggiornamento del conteggio delle repliche ti consente di utilizzare le risorse esistenti all'interno del tuo cluster. Alla fine, potresti esaurire del tutto la capacità del nodo combinato, impedendo la pianificazione di nuovi pod. Kubernetes offre una struttura di ridimensionamento automatico del cluster in grado di creare e distruggere i nodi, modificando efficacemente il numero di pod che possono essere pianificati.

L'impostazione della scalabilità automatica è relativamente complessa. Il processo esatto dipende dall'ambiente di hosting del tuo cluster. Richiede l'integrazione con un Cluster Autoscaler in grado di collegarsi al tuo host per rilevare i cambiamenti nella domanda. La documentazione ufficiale è disponibile per Google Cloud; le soluzioni sono disponibili anche da Amazon EKS e Microsoft AKS.

Pubblicità

Il ridimensionamento automatico funziona mantenendo un controllo costante per i pod che non possono essere programmati a causa della capacità del cluster insufficiente. Valuta anche se i Pod pianificati correttamente potrebbero essere effettivamente collocati con un numero di nodi ridotto. L'auto-scaler utilizza quindi l'API del provider cloud per aggiungere e rimuovere istanze di calcolo, regolando dinamicamente le risorse del cluster. Ciò potrebbe influire sulla tua fattura poiché la creazione di una nuova istanza è solitamente un'operazione a pagamento.

Riepilogo

Kubernetes semplifica la distribuzione di istanze di container su più server. Registra le tue macchine come nodi o utilizza un cluster cloud gestito, quindi crea distribuzioni con i campi delle repliche impostati. Puoi ridimensionare il tuo carico di lavoro aggiornando il numero di repliche richieste.

Quando si prevedono forti cambiamenti nella domanda, utilizza la scalabilità automatica per espandere dinamicamente la capacità. Questa funzione ti consente di creare nuovi nodi al volo, aggiungendo risorse extra in modo da poter continuare ad aumentare il numero di repliche.

Quando ridimensioni i pod, devi ricordare che una forma di traffico in entrata è necessaria anche la distribuzione. Se stai esponendo la porta 80, Kubernetes deve essere in grado di mappare le richieste alla porta 80 su uno qualsiasi dei nodi. Funziona automaticamente con le distribuzioni e i servizi. Kubernetes crea un Load Balancer che monitora continuamente i Pod per capire dove può essere diretto il traffico.