Come installare Kubernetes in 10 minuti su Ubuntu 18.04 o CentOS 7

Kubernetes è senza dubbio una delle tecnologie più prorompenti che abbiamo sperimentato negli ultimi anni. Nata dall’esperienza acquisita in casa Google con Borg, ha rivoluzionato il modo di comporre sistemi con microservizi e containers. Le sue caratteristiche principali sono molteplici e ci vorrebbero una serie di articoli per scoprirle in dettaglio. Tanto per menzionarne almeno una, basti pensare al concetto di Pod, attraverso cui è possibile accomunare containers con mansioni specifiche in un’unità di distribuzione. Nasce così la sidecar pattern, dove il container dell’applicazione principale è accompagnato nel Pod da containers addetti a compiti operativi come l’aggregazione di log e la configurazione, lasciando spazio allo sviluppatore di concentrarsi esclusivamente sulla logica di business e ridurre le dipendenze e competenze dell’applicazione.

In questo articolo, ti spiegherò come installare Kubernetes utilizzando kubeadm in soli 10 minuti: master e nodi inclusi. È importante tenere presente che kubeadm è una tecnologia ancora in fase Alpha e Beta. Per installazioni in produzione non c’è alternativa migliore che utilizzare installazioni preconfigurate nelle cloud principali (AWS, Azure e Google) a meno che non si disponga di sistemisti con le giuste risorse tecniche.

Prerequisiti

Dobbiamo avere a disposizione una o più macchine con un sistema operativo compatibile con debrpm.

Ogni macchina deve avere almeno 2 GB di RAM. Il master deve avere almeno 2 CPUs.

Ci deve essere connettività completa tra le macchine con una rete privata o pubblica.

Se intendi utilizzare più macchine devi assicurarti che MAC address e product_uuid siano unici per ogni nodo. Per controllare il MAC address dell’interfaccia di rete puoi utilizzare ip link o ifconfig -a. Per controllare il product_uuid usa il comando sudo cat /sys/class/dmi/id/product_uuid

Se utilizzi un firewall devi accettare connessioni in entrata su protocollo TCP alle porte: 6443, 2379, 2380, 10250, 10251, 10252 (per il master) 10250 e 30000-32767 (per i nodi). Se stai sperimentando, fai prima a disabilitare il firewall e utilizzare una rete privata.

Installazione di kubeadm, kubelet e kubectl

Su Ubuntu, Debian o HypriotOS:

Su CentOS, RHEL o Fedora (nota bene che stiamo per disattivare SELinux):

Creiamo il master

Creare il master è un gioco da ragazzi. La cosa più importante da ricordare per evitare di dover ripetere la creazione del master è di esporre l’API di Kubernetes sull’ indirizzo IP appropriato. Questo IP deve essere raggiungibile dai nodi, dalla tua macchina se intendi comandare Kubernetes da remoto, e da server di integrazione continua come Jenkins, Concourse o GitLab se intendi creare una pipeline per il rilascio delle tue applicazioni.

Durante questa fase kubeadm fà dei controlli prima di procedere con l’installazione. Molto probabilmente riscontrerà degli errori che dovremo correggere o ignorare. Il più comune è che la versione installata di Docker non è supportata. Consiglierei di ignorare questo se stiamo semplicemente sperimentando, perchè spesso abbiamo sulla nostra macchina una versione più recente. Un altro che invece bisogna correggere è avere lo swap attivato, perchè totalmente non compatibile con un componente di Kubernetes.

Come indicato dall’output del nostro comando dobbiamo copiare il file di configurazione di kubectl nella nostra home. Salvate anche su un file a parte il commando per connettere nodi aggiuntivi al master kubeadm join ... perchè ci servirà dopo.

Installiamo il pod network

Il pod network è un componente necessario per il corretto funzionamento di Kubernetes. Ci sono varie opzioni che possiamo prendere in considerazione. Le opzioni differiscono sia per il tipo di implementazione che per caratteristiche offerte. Ad esempio, Calico si propone di prendersi cura delle rete dei Pod e di creare profili di sicurezza. In questo esempio, ho deciso di usare Weave Net.

Adesso controlliamo che tutto sia in ordine:

Abilitiamo il master a eseguire Pods (opzionale)

Il master non esegue Pod con la configurazione di base. Se non hai intenzione di testare un’installazione con master e nodi dipendenti e ti accontenti di girare tutto sul master, devi usare questo comando:

Aggiungiamo i nodi (opzionale)

I nodi sono i server dove i nostri Pod girano. Per procedere al settaggio di un nodo dobbiamo ripetere l’installazione di kubeadm, kubelet e kubectl, tenendo a mente i prerequisiti specificati in precedenza. Dopo di che useremo la stringa che abbiamo salvato in precedenza. Nel mio caso:

Per controllare la presenza e lo stato dei nodi basta eseguire:

Bene abbiamo completato la fase d’installazione!

Celebriamo eseguendo un Pod

Creeremo un Pod con busybox, un’applicazione che combina un insieme di comandi Linux. Definiamo il nostro Pod in un file chiamato busybox.yaml

Adesso creiamo il Pod:

Controlliamo che sia online:

Perfetto. Connettiamoci al container ed eseguiamo alcuni comandi per vedere se sia funzionale:

Libidine!

Conclusione

Come vedete installare Kubernetes non è difficile con kubeadm. Ovviamente se riscontrate dei problemi potete commentare e proverò ad aiutarvi. Tempo fà, nel 2016, scrissi anche un articolo in Inglese dove descrivevo l’architettura di Kubernetes che potete consultare qui. Potete anche notare come l’installazione a quei tempi fosse molto più complessa.

Bene è tutto per oggi! Buon proseguimento e alla prossima!