Kubernetes è il software leader nell'orchestrazione di container. Kubernetes funziona gestendo i cluster, che è semplicemente un insieme di host pensato per l'esecuzione di applicazioni containerizzate. Per avere un cluster Kubernetes, sono necessari almeno due nodi:un nodo master e un nodo di lavoro . Ovviamente puoi espandere il cluster aggiungendo tutti i nodi di lavoro di cui hai bisogno.
In questa guida, implementeremo un cluster Kubernetes composto da due nodi, entrambi con Ubuntu 20.04 Focal Fossa. Avere due nodi nel nostro cluster è la configurazione più semplice possibile, ma potrai ridimensionare tale configurazione e aggiungere più nodi se lo desideri.
In questo tutorial imparerai:
- Come installare Docker
- Come installare Kubernetes
- Come configurare un nodo master e di lavoro
- Come unire un nodo di lavoro a un cluster Kubernetes
- Come distribuire Nginx (o qualsiasi app containerizzata) in un cluster Kubernetes
Distribuzione di Kubernetes su Ubuntu 20.04 Focal Fossa
Categoria | Requisiti, convenzioni o versione del software utilizzata |
---|---|
Sistema | Installato Ubuntu 20.04 o aggiornato Ubuntu 20.04 Focal Fossa |
Software | Kubernetes |
Altro | Accesso privilegiato al tuo sistema Linux come root o tramite sudo comando. |
Convenzioni | # – richiede che i comandi linux dati vengano eseguiti con i privilegi di root direttamente come utente root o usando sudo comando$ – richiede che i comandi linux dati vengano eseguiti come un normale utente non privilegiato |
Scenario
Prima di immergerci, stabiliamo i dettagli del nostro scenario. Come accennato in precedenza, il nostro cluster avrà due nodi ed entrambi eseguono Ubuntu 20.04 Focal Fossa. Uno sarà il nodo principale e può essere facilmente identificato con il suo nome host di kubernetes-master
. Il secondo nodo sarà il nostro nodo di lavoro e avere un nome host di kubernetes-worker
.
Il nodo master distribuirà un cluster Kubernetes e il nodo di lavoro si unirà semplicemente ad esso. Poiché i cluster Kubernetes sono progettati per eseguire software containerizzato, dopo aver avviato il nostro cluster, distribuiremo un container server Nginx come prova del concetto.
Installa Docker
Entrambi i nodi dovranno avere Docker installato su di essi, poiché Kubernetes si basa su di esso. Apri un terminale e digita i seguenti comandi sia sul master che sul nodo di lavoro per installare Docker:
$ sudo apt update $ sudo apt install docker.io
Al termine dell'installazione di Docker, utilizzare i seguenti comandi per avviare il servizio e assicurarsi che si avvii automaticamente dopo ogni riavvio:
$ sudo systemctl start docker $ sudo systemctl enable docker
Installa Kubernetes
Ora siamo pronti per installare Kubernetes. Proprio come tutti gli altri comandi fino a questo punto, assicurati di farlo su entrambi i nodi. Sul tuo master e worker Kubernetes, prima installa apt-transport-https
pacchetto, che ci consentirà di utilizzare http e https nei repository di Ubuntu. Ora è anche un buon momento per installare curl
poiché ne avremo bisogno tra un momento:
$ sudo apt install apt-transport-https curl
Quindi, aggiungi la chiave di firma Kubernetes a entrambi i sistemi:
$ curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add
Successivamente, aggiungeremo il repository del pacchetto Kubernetes. Nota che al momento della stesura di questo articolo, Ubuntu 16.04 Xenial Xerus è l'ultimo repository Kubernetes disponibile. Questo dovrebbe alla fine essere sostituito da Ubuntu 20.04 Focal Fossa e il seguente comando può quindi essere aggiornato da xenial
a focal
.
$ sudo apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main"
Ora possiamo installare Kubernetes:
$ sudo apt install kubeadm kubelet kubectl kubernetes-cni
Disabilita la memoria di scambio
Kubernetes si rifiuterà di funzionare se il tuo sistema utilizza la memoria di scambio. Prima di procedere oltre, assicurati che il master e il nodo di lavoro abbiano la memoria di scambio disabilitata con questo comando:
$ sudo swapoff -a
Quel comando disabiliterà la memoria di scambio fino al riavvio dei tuoi sistemi, quindi per rendere persistente questa modifica, usa nano o il tuo editor di testo preferito per aprire questo file:
$ sudo nano /etc/fstab
All'interno di questo file, commenta il /swapfile
riga facendola precedere da un #
simbolo, come si vede di seguito. Quindi, chiudi questo file e salva le modifiche.
Imposta nomi host
Quindi, assicurati che tutti i tuoi nodi abbiano un nome host univoco. Nel nostro scenario, utilizziamo i nomi host kubernetes-master
e kubernetes-worker
per differenziare facilmente i nostri host e identificare i loro ruoli. Usa il seguente comando se hai bisogno di cambiare i tuoi nomi host:
$ sudo hostnamectl set-hostname kubernetes-master
E sul nodo di lavoro:
$ sudo hostnamectl set-hostname kubernetes-worker
Non noterai le modifiche al nome host nel terminale finché non ne aprirai uno nuovo. Infine, assicurati che tutti i tuoi nodi abbiano un'ora e una data precise, altrimenti avrai problemi con certificati TLS non validi.
Inizializza il server principale Kubernetes
Ora siamo pronti per inizializzare il nodo master Kubernetes. Per farlo, inserisci il seguente comando sul tuo nodo principale:
kubernetes-master:~$ sudo kubeadm initKubernetes su Ubuntu 20.04 master node è ora inizializzato
Il nodo master Kubernetes è stato inizializzato. L'output ci fornisce un kubeadm join
comando che dovremo utilizzare in seguito per unire i nostri nodi di lavoro al nodo master. Quindi, prendi nota di questo comando per dopo.
L'output di cui sopra ci consiglia anche di eseguire diversi comandi come utente normale per iniziare a utilizzare il cluster Kubernetes. Esegui questi tre comandi sul nodo master:
kubernetes-master:~$ mkdir -p $HOME/.kube kubernetes-master:~$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config kubernetes-master:~$ sudo chown $(id -u):$(id -g) $HOME/.kube/config
Distribuire una rete pod
Il passaggio successivo consiste nel distribuire una rete pod. La rete pod viene utilizzata per la comunicazione tra host ed è necessaria per il corretto funzionamento del cluster Kubernetes. Per questo utilizzeremo la rete di pod Flannel. Emetti i seguenti due comandi sul nodo master:
kubernetes-master:~$ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml kubernetes-master:~$ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/k8s-manifests/kube-flannel-rbac.yml
A seconda dell'ambiente, potrebbero essere necessari solo pochi secondi o un minuto per attivare l'intera rete di flanella. Puoi usare il kubectl
comando per confermare che tutto è pronto e pronto:
kubernetes-master:~$ kubectl get pods --all-namespacesLa rete pod è stata implementata correttamente
Quando tutta la colonna STATUS mostra "In esecuzione", è un'indicazione che tutto è terminato e che tutto è pronto per partire.
Unisciti al cluster Kubernetes
Ora il nostro cluster è pronto per l'unione dei nodi di lavoro. Usa kubeadm join
comando recuperato in precedenza dall'output di inizializzazione del nodo master Kubernetes per unirsi al tuo cluster Kubernetes:
kubernetes-worker:~$ sudo kubeadm join 192.168.1.220:6443 --token 1exb8s.2t4k3b5syfc3jfmo --discovery-token-ca-cert-hash sha256:72ad481cee4918cf2314738419356c9a402fb609263adad48c13797d0cba2341Unione del nodo di lavoro al cluster Kubernetes
Di nuovo sul tuo nodo master Kubernetes, conferma che kubernetes-worker
fa ora parte del nostro cluster Kubernetes con questo comando:
kubernetes-master:~$ kubectl get nodesMostra quali nodi sono attualmente nel cluster Kubernetes
Distribuzione di un servizio sul cluster Kubernetes
Ora siamo pronti per distribuire un servizio nel cluster Kubernetes. Nel nostro esempio, implementeremo un server Nginx nel nostro nuovo cluster come prova del concetto. Esegui i seguenti due comandi sul tuo nodo principale:
kubernetes-master:~$ kubectl run --image=nginx nginx-server --port=80 --env="DOMAIN=cluster" kubernetes-master:~$ kubectl expose deployment nginx-server --port=80 --name=nginx-http
Ora dovresti vedere un nuovo contenitore docker nginx distribuito sul tuo nodo di lavoro:
kubernetes-worker:~$ sudo docker psIl nuovo contenitore Docker Nginx è attivo e in esecuzione sul nodo di lavoro Kubernetes
Puoi visualizzare un elenco in esecuzione di tutti i servizi disponibili in esecuzione nel tuo cluster con il comando seguente, emesso dal nodo maser Kubernetes:
kubernetes-master:~$ kubectl get svcMostra quali servizi containerizzati sono in esecuzione nel cluster Kubernetes
Conclusione
In questo articolo, abbiamo imparato come configurare Kubernetes per distribuire applicazioni containerizzate su Ubuntu 20.04 Focal Fossa. Impostiamo un cluster di base composto da due host, un master e un worker, anche se questo può essere ridimensionato a molti più nodi di lavoro, se necessario.
Abbiamo visto come configurare Docker e altri prerequisiti, oltre a distribuire un server Nginx nel nostro nuovo cluster come prova del concetto. Naturalmente, questa stessa configurazione può essere utilizzata per distribuire un numero qualsiasi di applicazioni containerizzate.