Introduzione
Kubernetes è uno strumento per la gestione di contenitori gratuito e open source. Viene utilizzato per distribuire automaticamente applicazioni basate su container in ambiente cluster, oltre a essere utilizzato anche per gestire i contenitori Docker attraverso gli host del cluster kubernetes. Kubernetes è anche conosciuto come K8s.
In questa guida configureremo il cluster Kubernetes il più semplice possibile composto da due nodi. Il primo nodo con hostname kubernetes-master fungerà da nodo principale.
Il secondo nodo, con hostname kubernetes-slave eseguirà anche Ubuntu 18.04 sarà un nodo slave che si unirà semplicemente al cluster di Kuberneets. Una volta ottenuto il cluster Kubernetes attivo e funzionante verrà implementato un contenitore del server Nginx.
Se il vostro intento è installare Kubernetes su di un server in remoto continuate a leggere, altrimenti se volete installare Kubernetes sul vostro computer locale saltate il primo paragrafo "Connessione al Server" e leggere il successivo.
Connessione al Server
Per accedere al server, è necessario conoscere l'indirizzo IP. Avrai anche bisogno della password per l'autenticazione.
Per connettersi al server come utente root digitare questo comando:
ssh root@IP_DEL_SERVER
Successivamente vi verrà chiesto di inserire la password dell'utente root.
Se non utilizzate l'utente root potete connettervi con un'altro nome utente utilizzando lo stesso comando, quindi modificare il primo parametro:
ssh VOSTRO_UTENTE@IP_DEL_SERVER
Successivamente vi verrà chiesto di inserire la password del vostro utente.
Siete ora connessi al vostro server, siete pronti per iniziare l'installazione di Kubernetes su Ubuntu 18.04 LTS.
Installare Docker
Installare Docker su entrambi i server Ubuntu, quindi sia sul kubernetes-master che sul kubernetes-slave.
Docker è presente nei repository ufficiale di Ubuntu.
Aggiornare la lista dei pacchetti di Ubuntu:
sudo apt-get update
Per installare Docker ci basterà digitare da terminale:
sudo apt install docker.io
Una volta installato, assicurarsi che sia abilitato l'avvio automatico dopo un riavvio del server:
sudo systemctl enable docker
Installare Kubernetes
Ancora una volta abbiamo bisogno di installare Kubernetes su tutti i nodi. Eseguire quindi i comandi seguenti su entrambi i server (master e slave) per installare Kubernetes:
Aggiungere la chiave di firma di Kubernetes:
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add
Aggiungere il repository necessario per scaricare Kubernetes:
sudo apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main"
Installare kudeadm:
sudo apt install kubeadm
Kubernetes non funzionerà se il tuo sistema utilizza la memoria di swap, quindi è necessario disabilitare la memoria di scambio su tutti i tuoi nodi (master e slave):
sudo swapoff -a
Assicurarsi che tutti i nodi abbiano un hostname univoco. Quindi, impostare l'hostname ad entrambi i nodi.
Il nodo principale con hostname kubernetes-master:
sudo hostnamectl set-hostname kubernetes-master
Il nodo secondario con hostname kubernetes-slave
sudo hostnamectl set-hostname kubernetes-slave
Refresh di bash:
exec bash
Importate è impostare correttamente la data e l'orario su tutti i nodi, altrimenti potrebbero riscontrarsi dei problemi con i certificati TLS.
Configurare Kubernetes-master
Ora siamo pronti per inizializzare il nodo master di Kubernetes. Per fare ciò, eseguite il seguente comando sul vostro nodo principale:
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
Attenzione: sono richieste almeno 2 CPU per inizializzare il nodo principale, se non si dispone di 2 CPU, è possibile aggiungere il flag --ignore-preflight-errors=NumCPU per procedere senza errori. Da non utilizzare su un server in produzione, ma solo per test.
Quindi:
sudo kubeadm init --pod-network-cidr=10.244.0.0/16 --ignore-preflight-errors=NumCPU
Attenzione: copiare l'ultima parte del messaggio di ouput dell'inizializzazione del nodo master di Kubernetes, in quanto è presente un comando necessario un secondo momento per accedere dal nodo slave di Kubernetes.
Eseguire questi comandi suggeriti dall'inizializzazione di Kubernetes utilizzando un utente non root con privilegi sudo:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
Il prossimo passo è implementare una rete pod. La rete pod viene utilizzata per la comunicazione tra i nodi all'interno del cluster Kubernetes. Per questo useremo la rete di pod Flannel:
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
Usare il seguente comando per confermare lo stato:
kubectl get pods --all-namespaces
Configurare Kubernetes-slave
Adesso possiamo connetterci con il nodo slave al cluster di Kubernetes. Utilizzare il comando kubeadm join copiato precedentemente dall'output di inizializzazione di kubernetes-master:
Attenzione: non copiare il seguente codice di esempio, non funzionerebbe sul vostro server.
sudo kubeadm join 10.1.1.9:6443 --token qdjnpd.5glu39uxr92xarsj --discovery-token-ca-cert-hash sha256:ed0684156c718caf425ceae6c85a56c05f7b49037cde3a2f1fd57430a4f58f89
Potrebbero volerci diversi minuti.
Sul nodo principale Kubernetes-master dare il seguente comando per confermare la connessione con il nodo kubernetes-slave:
kubectl get nodes
Distribuire un servizio sul cluster Kubernetes
Per verificare l'implementazione è possibile utilizzare Nginx nel cluster di Kubernetes.
Eseguire questi comandi dal nodo principale, kubernetes-master:
kubectl run nginx --image=nginx --port 80
kubectl expose deploy nginx --port 80 --target-port 80 --type NodePort
Ora dovreste visualizzare un nuovo contenitore docker di Nginx nel nodo secondario, slave:
sudo docker ps
Per confermare che il servizio Nginx è attivo e in esecuzione, elencare tutti i servizi disponibili sul nodo master e usare il comando curl per eseguire una richiesta HTTP sull'IP del cluster:
kubectl get svc
Dovreste ricevere un messaggio di output simile al seguente:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 5m52s
nginx NodePort 10.103.44.31 <none> 80:new_nginx_port/TCP 2m50s
Per verificare che tutto funzioni, connettersi all'indirizzo IP del nodo secondario, kubernetes-slave, utilizzando la porta visualizzata nell'ouput precedente. Dovreste visualizzare la pagina di benvenuto di Nginx:
http://INDIRIZZO_IP_NODO_SLAVE:new_nginx_port
Se si desidera rimuovere l'applicazione Nginx, eliminare innanzitutto il servizio Nginx dal nodo principale:
kubectl delete service nginx
Per assicurare l'eliminazione del servizio, dare il seguente comando:
kubectl get services
Dovreste ricevere un messaggio di output simile al seguente:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 9m59s
Quindi per eliminare la distribuzione Nginx:
kubectl delete deployment nginx
Comando di conferma:
kubectl get deployments
Dovreste ricevere un messaggio di output simile al seguente:
No resources found.
L'installazione e la configurazione di Kubernetes su Ubuntu 18.04 LTS è terminata