Torna al blog

Come installare e utilizzare Kubernetes su Ubuntu 20.04

Come installare e utilizzare Kubernetes su Ubuntu 20.04

Introduzione

Kubernetes è uno strumento open-source fondamentale nell'orchestrazione dei container. Kubernetes funziona orchestrando e gestendo cluster su scala in vari ambienti cloud o anche su server on-premise. Un cluster è un insieme di host destinati all'esecuzione di applicazioni e servizi containerizzati. Un cluster ha bisogno di un minimo di due nodi per funzionare – un nodo master e un nodo worker. Tenendo a mente la scalabilità, hai l'opzione di espandere il cluster con tutti i nodi worker necessari.

Un nodo in Kubernetes si riferisce a un server. Un nodo master è un server che gestisce lo stato del cluster. I nodi worker sono server che eseguono i carichi di lavoro – questi sono tipicamente applicazioni e servizi containerizzati.

Questa guida ti accompagnerà attraverso i passaggi per installare e distribuire un cluster Kubernetes composto da due nodi su Ubuntu 20.04. Come menzionato, avere due nodi è la configurazione più elementare quando si lavora con Kubernetes. Hai anche l'opzione di aggiungere altri nodi worker una volta compresi i concetti fondamentali. Ti mostreremo inoltre come collegare i due server per consentire al nodo master di controllare il nodo worker.

Per testare la nostra configurazione, distribuiremo un Docker container che esegue il web server Nginx nel cluster. Questa è una tipica applicazione reale di Kubernetes. Imparerai di più su alcuni componenti distintivi di Kubernetes come kubectl e kubeadm man mano che procediamo. Si consiglia inoltre di familiarizzare prima con il nostro tutorial su conoscere le basi del tool-kit di Kubernetes per familiarizzare con le basi della piattaforma Kubernetes.

Ora, iniziamo!

Prerequisiti

Dovrai predisporre due server, in esecuzione su Ubuntu 20.04. Per le migliori prestazioni, i requisiti minimi di sistema per Kubernetes sono 2 GB di RAM e 2 CPU. Puoi seguire i passaggi da 1 a 4 di questo tutorial passo-passo per aiutarti a configurare il tuo server Ubuntu su CloudSigma. Un server sarà il nodo master, l'altro sarà il nodo worker. Abbiamo opportunamente nominato i nostri due server come kubernetes-master e kubernetes-worker. Questo rende più facile seguire il tutorial. Tuttavia, sei libero di scegliere gli hostname che preferisci.

  • Assicurati di aggiungere un utente con privilegi sudo su entrambi i nodi che utilizzeremo per eseguire i comandi come descritto nel tutorial sopra. Segui questo tutorial sulla configurazione del file sudoers di Linux per le istruzioni.

  • Connettività di rete – i server nel cluster dovrebbero essere in grado di comunicare. Quando distribuisci le tue VM da CloudSigma, saranno connesse a Internet con un IP pubblico per impostazione predefinita. Se stai lavorando da una rete locale, potresti dover modificare il tuo file /etc/hosts in ciascun server e collegarli in modo appropriato.

  • Dovrai installare e abilitare Docker su ciascuno dei nodi. Kubernetes si affida a un runtime di container per eseguire i container nei pod. Sebbene ci siano altre piattaforme di container tra cui scegliere, in questo tutorial utilizzeremo Docker. Docker fornirà l'ambiente di runtime necessario per Ubuntu. Puoi seguire i passaggi 1, 2 e 3 del nostro tutorial sull'installazione e il funzionamento di Docker.

Passaggio 1: Installa Kubernetes

In questo passaggio, installeremo Kubernetes. Proprio come hai fatto con Docker nei prerequisiti, devi eseguire i comandi in entrambi i nodi per installare Kubernetes. Usa ssh per accedere a entrambi i nodi e procedere. Inizierai installando il pacchetto apt-transport-https che consente di lavorare con http e https nei repository di Ubuntu. Inoltre, installa curl poiché sarà necessario per i passaggi successivi. Esegui il seguente comando:

Quindi, aggiungi la chiave di firma di Kubernetes a entrambi i nodi eseguendo il comando:

Successivamente, aggiungiamo il Kubernetes repository come sorgente di pacchetti su entrambi i nodi utilizzando il seguente comando:

Successivamente, aggiorna i nodi:

  • Installa gli strumenti di Kubernetes

Una volta completato l'aggiornamento, installeremo Kubernetes. Questo comporta l'installazione dei vari strumenti che compongono Kubernetes: kubeadm, kubelet, kubectl, e kubernetes-cni. Questi strumenti sono installati su entrambi i nodi. Definiamo ciascuno strumento di seguito:

  • kubelet – un agente che viene eseguito su ciascun nodo e gestisce la comunicazione con il nodo master per avviare i carichi di lavoro nel runtime del container. Inserisci il seguente comando per installare kubelet:

  • kubeadm – parte del progetto Kubernetes e aiuta a inizializzare un cluster Kubernetes. Inserisci il seguente comando per installare kubeadm:

  • kubectl – lo strumento da riga di comando di Kubernetes che consente di eseguire comandi all'interno dei cluster Kubernetes. Esegui il seguente comando per installare kubectl:

  • kubernetes-cni – abilita la rete all'interno dei container garantendo che i container possano comunicare e scambiare dati. Esegui il seguente comando per installare:

In alternativa, puoi installarli tutti e quattro con un unico comando:

Passo 2: Disabilitare la memoria di swap

Kubernetes non funziona in un sistema che utilizza swap memoria. Pertanto, deve essere disabilitata nel nodo master e in tutti i nodi worker. Esegui il seguente comando per disabilitare la memoria di swap:

Questo comando disabilita la memoria di swap fino al riavvio del sistema. Dobbiamo assicurarci che rimanga disattivata anche dopo i riavvii. Questo deve essere fatto sul master e su tutti i nodi worker. Possiamo farlo modificando il file fstab file e commentando la riga /swapfile riga con un #. Apri il file con l'editor di testo nano inserendo il seguente comando:

All'interno del file, commenta la riga swapfile come mostrato nello screenshot qui sotto:

install Kubernetes fstab swap disable

Se non vedi la riga swapfile, ignorala semplicemente. Salva e chiudi il file quando hai finito di modificarlo. Segui lo stesso processo per entrambi i nodi. Ora, le impostazioni della memoria di swap rimarranno disattivate, anche dopo il riavvio del server.

Passo 3: Impostare hostname univoci

I tuoi nodi devono avere hostname univoci per una più facile identificazione. Se stai distribuendo un cluster con molti nodi, puoi impostarlo per identificare i nomi dei tuoi nodi worker come node-1, node-2, ecc. Come abbiamo menzionato in precedenza, abbiamo nominato i nostri nodi come kubernetes-master e kubernetes-worker. Li abbiamo impostati al momento della creazione del server. Tuttavia, puoi regolare o impostare i tuoi se non lo hai già fatto dalla riga di comando. Per regolare l'hostname sul nodo master, esegui il seguente comando:

Sul nodo worker, esegui il seguente comando:

Puoi chiudere la sessione corrente del terminale ed effettuare nuovamente l'accesso tramite ssh al server per vedere le modifiche.

Passo 4: Consentire a Iptables di vedere il traffico con bridge

Affinché i nodi master e worker vedano correttamente il traffico con bridge, devi assicurarti che net.bridge.bridge-nf-call-iptables sia impostato su 1 nella tua configurazione. Innanzitutto, assicurati che il modulo br_netfilter sia caricato. Puoi confermarlo eseguendo il comando:

In alternativa, puoi caricarlo esplicitamente con il comando:

Ora puoi eseguire questo comando per impostare il valore su 1:

Passo 5: Modifica del driver Cgroup di Docker

Per impostazione predefinita, Docker viene installato con cgroupfs come driver cgroup. Kubernetes raccomanda che Docker debba essere eseguito con systemd come driver. Se salti questo passaggio e provi a inizializzare kubeadm nel passaggio successivo, riceverai il seguente avviso nel terminale:

Sia sui nodi master che su quelli worker, aggiorna il cgroupdriver con i seguenti comandi:

Quindi, esegui i seguenti comandi per riavviare e abilitare Docker all'avvio del sistema:

Una volta impostato questo, possiamo procedere alla parte divertente, il deployment del cluster Kubernetes!

Passo 6: Inizializzazione del nodo Master di Kubernetes

Il primo passo nel deployment di un cluster Kubernetes consiste nell'avviare il nodo master. Sul terminale del tuo nodo master, esegui il seguente comando per inizializzare il kubernetes-master:

Se esegui il comando precedente e il tuo sistema non soddisfa i requisiti previsti, come la RAM o la CPU minime spiegate nella sezione Prerequisiti, riceverai un avviso e il cluster non si avvierà:

install Kubernetes InitError

Nota: Se stai creando un ambiente di produzione, è una buona idea soddisfare sempre i requisiti minimi affinché Kubernetes funzioni correttamente. Tuttavia, se stai seguendo questo tutorial a scopo di apprendimento, puoi aggiungere il seguente flag al comando kubeadm init per ignorare gli avvisi di errore:
sudo kubeadm init --ignore-preflight-errors=NumCPU,Mem --pod-network-cidr=10.244.0.0/16

Lo screenshot qui sotto mostra che l'inizializzazione è andata a buon fine. Abbiamo anche aggiunto un flag per specificare la rete dei pod con l'IP 10.244.0.0. È l'IP predefinito che kube-flannel utilizza. Discuteremo più dettagliatamente della rete dei pod nel prossimo passaggio.

install Kubernetes Kubeadm Init

Nell'output, puoi vedere il comando kubeadm join (abbiamo nascosto il nostro indirizzo IP) e un token univoco che eseguirai sul nodo worker e su tutti gli altri nodi worker che desideri unire a questo cluster. Successivamente, copia e incolla questo comando poiché lo utilizzerai più avanti nel nodo worker.

Nell'output, Kubernetes mostra anche alcuni comandi aggiuntivi che dovresti eseguire come utente normale sul nodo master prima di iniziare a utilizzare il cluster. Eseguiamo questi comandi:

Ora abbiamo inizializzato il nodo master. Tuttavia, dobbiamo anche configurare la rete dei pod sul nodo master prima di unire i nodi worker.

Passo 7: Deployment di una rete di pod

Una rete di pod facilita la comunicazione tra i server ed è necessaria per il corretto funzionamento del cluster Kubernetes. Puoi leggere di più sulla rete del cluster Kubernetes nella documentazione ufficiale. Utilizzeremo la rete di pod Flannel per questo tutorial. Flannel è una semplice rete overlay che soddisfa i requisiti di Kubernetes.

Prima di distribuire la rete pod, dobbiamo verificare lo stato del firewall. Se hai abilitato il firewall dopo aver seguito il passaggio 5 del tutorial sulla configurazione del server Ubuntu, devi prima aggiungere una regola del firewall per creare eccezioni per la porta 6443 (la porta predefinita per Kubernetes). Esegui i seguenti ufw comandi sia sul nodo master che sui nodi worker:

Dopodiché, puoi eseguire i seguenti due comandi per distribuire la rete pod sul nodo master:

Questo potrebbe richiedere da un paio di secondi a un minuto a seconda del tuo ambiente per caricare la rete flannel. Esegui il seguente comando per confermare che tutto sia avviato:

L'output del comando dovrebbe mostrare lo stato di tutti i servizi come in esecuzione se tutto è andato a buon fine:

install Kubernetes Pod Status

Puoi anche visualizzare lo stato di salute dei componenti utilizzando il comando get component status:

install Kubernetes Component Status

Questo comando ha una forma abbreviata cs:

Component Status Short

Se vedi lo stato non integro (unhealthy), modifica i seguenti file ed elimina la riga in (spec->containers->command) contenente questa frase - --port=0 :

Do the same for this file:

Infine, riavvia il servizio Kubernetes:

Passaggio 8: Unione dei nodi worker al cluster Kubernetes

Con il nodo kubernetes-master attivo e la rete pod pronta, possiamo unire i nostri nodi worker al cluster. In questo tutorial abbiamo solo un nodo worker, quindi lavoreremo con quello. Se hai più nodi worker, puoi sempre seguire gli stessi passaggi che spiegheremo di seguito per unirti al cluster.

Innanzitutto, accedi al tuo nodo worker in una sessione di terminale separata. Utilizzerai il tuo comando kubeadm join che è stato mostrato nel tuo terminale quando abbiamo inizializzato il nodo master nel Passaggio 6. Esegui il comando:

Dovresti vedere un output simile a quello dello screenshot qui sotto quando l'unione al cluster è completata:

Worker Join

Una volta completato il processo di unione, passa al terminale del nodo master ed esegui il seguente comando per confermare che il tuo nodo worker si è unito al cluster:

Nello screenshot dell'output del comando sopra, possiamo vedere che il nodo worker si è unito al cluster:

install Kubernetes K8S Node Status

Passaggio 9: Distribuzione di un'applicazione nel cluster Kubernetes

A questo punto, hai configurato con successo un cluster Kubernetes. Rendiamo utilizzabile il cluster distribuendovi un servizio. Nginx è un server web molto popolare che vanta velocità incredibili anche con migliaia di connessioni. Distribuiremo il server web Nginx nel cluster per dimostrare che puoi utilizzare questa configurazione in un'applicazione reale.

Esegui il seguente comando sul nodo master per creare un deployment di Kubernetes per Nginx:

Puoi visualizzare il deployment creato utilizzando il comando describe deployment :

Nginx Deployment

To make the nginx service accessible via the internet, run the following command:

NodePort Svc Create

The command above will create a public-facing service for the Nginx deployment. This being a nodeport deployment, Kubernetes assigns the service a port in the range of 32000+.

You can get the current services by issuing the command:

NodePort Svc Status

You can see that our assigned port is 32264. Take note of the port displayed in your terminal to use in the next step.

To verify that the Nginx service deployment is successful, issue a curl call to the worker node from the master. Replace your worker node IP and the port you got from the above command:

You should see the output of the default Nginx index.html:

Curl Nginx Svc

Optionally, you can visit the worker node IP address and port combination in your browser and view the default Nginx index page:

install Kubernetes Nginx Webpage

You can delete a deployment by specifying the name of the deployment. For example, this command will delete our deployment:

We have now successfully tested our cluster!

Conclusion

In this tutorial, you have learned how to install a Kubernetes cluster on Ubuntu 20.04. You set up a cluster consisting of a master and worker node. You were able to install the Kubernetes toolset, created a pod network, and joined the worker node to the master node. We also tested our concept by doing a basic deployment of an Nginx webserver to the cluster. This should work as a foundation to working with Kubernetes clusters on Ubuntu.

While we only used one worker node, you can extend your cluster with as many nodes as you wish. If you would like to get deeper into DevOps with automation tools like Ansible, we have a tutorial that delves into provisioning Kubernetes cluster deployments with Ansible and Kubeadm, check it out. If you want to learn how to deploy a PHP application on a Kubernetes cluster check this tutorial.

Happy Computing!

author

Pranay Kapgate

Autore · CloudSigma

Preslav Dobrev è un designer creativo presso CloudSigma, con un focus su un'identità aziendale coerente attraverso l'uso di canali di marketing tradizionali e innovativi. È abile nel fondere la visione artistica con il marketing strategico per creare narrazioni di brand di grande impatto.

Commenti

Ancora nessun commento. Scrivi il primo.