
I container sono una buona scelta per raggruppare ed eseguire le nostre applicazioni. Quando il numero dei contenitori aumenta rapidamente ed è necessario gestirli in modo conveniente. Questo è il motivo per cui arriva Kubernetes. Kubernetes (K8s) è un sistema open source per automatizzare la distribuzione, la scalabilità e la gestione di applicazioni e servizi containerizzati.
Il cluster Kubernetes contiene nodi master e di lavoro. Il nodo master controlla e gestisce un gruppo di nodi di lavoro. Puoi avere più nodi master per i cluster ad alta disponibilità.
Questo tutorial mostra come installare un cluster Kubernetes con kubeadm su Ubuntu 20.04.
Preparazione dell'ambiente
- Utilizza 2 host Linux con Ubuntu 20.04
Impostazione di indirizzi IP statici per il nodo Master e il nodo di lavoro
- Nodo principale:192.168.1.11
- Nodo di lavoro:192.168.1.12
- Configura il nome host per ogni macchina
Useremo il nodo 1 come master e il nodo 2 come nodo di lavoro.
$ sudo hostnamectl set-hostname node-1
$ sudo hostnamectl set-hostname node-2
- Disabilita la memoria di scambio su ogni nodo Ubuntu
$ sudo swapoff -a
Aggiungi repository Kubernetes
Kubernetes non è disponibile nel repository predefinito di Ubuntu, quindi devi aggiungerlo manualmente.
Sul nodo Master e Worker eseguire le seguenti operazioni:
Aggiunta della chiave di firma Kubernetes come segue:
$ sudo -i
# curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
Quindi, aggiungi il repository Kubernetes, esegui:
$ echo "deb http://apt.kubernetes.io/ kubernetes-xenial main" >> ~/kubernetes.list
$ sudo mv ~/kubernetes.list /etc/apt/sources.list.d
$ sudo apt update
Installazione degli strumenti Kubernetes
In questa sezione installeremo Kubeadm, cri-o, Kubelet e Kubernetes-cni. Tutti questi strumenti devono essere installati su sia nodi master che nodi di lavoro .
Assicurati di installare la versione consigliata e supportata. Qui stiamo installando la versione 1.18 di Kubernetes e crio.
Installa Kubeadm
Kubeadm è uno strumento che fa parte del progetto Kubernetes che aiuta a inizializzare il cluster Kubernetes.
In questo tutorial, installeremo kubeadm versione 1.18.0-00, digita:
$ sudo apt install -y kubeadm=1.18.0-00 --allow-unauthenticated
Nota :puoi trovare la versione specifica con il seguente comando:
$ curl -s https://packages.cloud.google.com/apt/dists/kubernetes-xenial/main/binary-amd64/Packages | grep Version | awk '{print $2}'
Installa Kubectl
Kubectl
è lo strumento da riga di comando di Kubernetes. Ti consente di eseguire comandi nei cluster Kubernetes. Puoi utilizzare kubectl per distribuire applicazioni, gestire le risorse del cluster e visualizzare i log.
Installa kubectl v1.18.0-00 con il seguente comando:
$ sudo apt install -y kubectl=1.18.0-00 --allow-unauthenticated
Installa CRI-O
CRI-O è un'interfaccia di runtime del contenitore (CRI) conforme a OCI. Il runtime più comunemente usato è Docker. Dal rilascio di Kubernetes 1.20, lo shim dell'interfaccia di runtime del contenitore (CRI) per Docker è stato ritirato. Docker produce immagini che non sono un'immagine OCI (Open Container Initiative).
Dovremmo usare il runtime del contenitore conforme a OCI per estrarre ed eseguire immagini OCI, soprattutto se utilizzi servizi Kubernetes come GKE, EKS o AKS.
Puoi ancora usare docker, quindi installare usando sudo apt-get install docker.io
Qui userò cri-o che è un runtime conforme. Mantieni la versione cri-o corrispondente alla versione Kubernetes.
Assicurati di installare la versione supportata.
Per prima cosa, usa modprobe
comando per caricare l'overlay e br_netfilter moduli su entrambi i nodi Master e Worker:
$ sudo modprobe overlay
$ sudo modprobe br_netfilter
Quindi, crea un file di configurazione sysctl per abilitare l'inoltro IP e le impostazioni di netfilter durante i riavvii inserendo le seguenti righe in /etc/sysctl.d/99-kubernetes-cri.conf
file sul nodo Master e Worker:
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
Applicare il file di configurazione eseguendo:
$ sudo sysctl --system
Ora specifichiamo il sistema operativo Ubuntu e la versione cri-o come segue:
$ sudo -i
# export OS=xUbuntu_20.04
# export VERSION=1.18
Quindi esegui i seguenti comandi come root
utente:
# echo "deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/ /" > /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list
# echo "deb http://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable:/cri-o:/$VERSION/$OS/ /" > /etc/apt/sources.list.d/devel:kubic:libcontainers:stable:cri-o:$VERSION.list
# curl -L https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable:cri-o:$VERSION/$OS/Release.key | apt-key add -
# curl -L https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/Release.key | apt-key add -
# apt update
# apt install cri-o cri-o-runc
Al termine dell'installazione, il conmon È stata installata l'utilità (Monitoraggio del contenitore). Trova il percorso di conmon:
$ which conmon
/usr/bin/conmon
Modifica il /etc/crio/crio.conf
file come segue:
...
# Path to the conmon binary, used for monitoring the OCI runtime.
conmon = "/usr/bin/conmon" #<-- Edit this line. Around line 108
...
registries = [ #<-- Edit and add registries. Around line 351
"docker.io",
"quay.io",
]
....
Abilita il cri-o e assicurati che sia in esecuzione:
$ sudo systemctl daemon-reload
$ sudo systemctl enable crio
$ sudo systemctl start crio
$ sudo systemctl status crio
Uscita:
● crio.service - Container Runtime Interface for OCI (CRI-O)
Loaded: loaded (/usr/lib/systemd/system/crio.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2020-12-10 15:46:37 UTC; 3 days ago
Docs: https://github.com/cri-o/cri-o
...
Installa Kubelet
Kubelet è un agente in esecuzione su ogni nodo ed è responsabile della comunicazione con il server API sul nodo master e della guida del runtime del contenitore per avviare i carichi di lavoro.
Configura kubelet
per capire come interagire con cri-o inserendo la seguente riga in /etc/default/kubelet
file:
KUBELET_EXTRA_ARGS=--feature-gates="AllAlpha=false,RunAsGroup=true" --container-runtime=remote --cgroup-driver=systemd --container-runtime-endpoint='unix:///var/run/crio/crio.sock' --runtime-request-timeout=5m
Su entrambi i nodi Master e Worker, esegui il comando seguente per installare kubelet
:
$ sudo apt install -y kubelet=1.18.0-00 --allow-unauthenticated
Installa Kubernetes-cni
Per abilitare la rete di container nel cluster, dobbiamo installare kubernetes-cni
.
Esegui il seguente comando:
$ sudo apt-get install -y kubernetes-cni --allow-unauthenticated
Distribuzione del cluster Kubernetes
La distribuzione del cluster Kubernetes prevede 2 passaggi. Il primo passaggio consiste nell'inizializzazione del nodo master e il secondo passaggio consiste nell'unire il nodo di lavoro al cluster.
Inizializza il nodo principale
Per inizializzare Kubernetes su nodo principale , digita:
$ sudo kubeadm init --apiserver-advertise-address=192.168.1.11 --pod-network-cidr=10.244.0.0/16

Ci vorranno alcuni minuti per finire. Una volta completata l'inizializzazione, il terminale visualizzerà l'output come segue:

Prendi nota della riga per unirti al cluster contrassegnato sopra, la utilizzerà nel passaggio successivo per unire il nodo di lavoro al cluster.
Ora, esegui il seguente comando per creare la directory di configurazione di Kubernetes sul nodo principale:
$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config
Quindi, distribuisci una rete pod nel cluster:
$ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
Verifica che tutti i componenti del piano di controllo siano stati installati correttamente:
$ kubectl get pod --all-namespaces

Unisci il nodo di lavoro al cluster
Ora accedi al nodo di lavoro e unisci il nodo di lavoro al cluster.
Sulla macchina del nodo di lavoro, esegui il comando seguente:
$ sudo kubeadm join 192.168.1.11:6443 --token 9ii02d.nsmrmu1asascv2yg \
--discovery-token-ca-cert-hash sha256:1104bf70b03a2d030ffc0a462f9dbcbcdd9975393e9a9ac2a1f18500f1b6b74e
Al termine del processo di unione, torna al nodo principale ed esegui:
$ kubectl get node
NAME STATUS ROLES AGE VERSION
node-1 Ready master 2m37s v1.18.0
node-2 Ready none 22s v1.18.0
Per ottenere maggiori informazioni sul nodo, digita:
$ kubectl get node -owide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
node-1 Ready master 9h v1.18.0 10.2.0.4 Ubuntu 20.04.1 LTS 5.4.0-1029-gcp cri-o://1.18.4
node-2 Ready none 9h v1.18.0 10.2.0.5 Ubuntu 20.04.1 LTS 5.4.0-1029-gcp cri-o://1.18.4
Gli output mostrano i dettagli del nodo master e dei nodi che si sono uniti al cluster.
Leggi anche:Come installare Kubernetes in locale utilizzando Vagrant/Minikube
Conclusione
Poiché la containerizzazione sta diventando popolare, la necessità di gestire carichi di lavoro e servizi containerizzati rende Kubernetes così popolare. Tutti i principali provider di servizi cloud hanno iniziato a supportare Kubernetes gestito, il che semplifica la vita.
Kubernetes è completamente gratuito e può essere scaricato in qualsiasi momento dal suo repository. Spero ti sia piaciuto installare Kubernetes su Ubuntu. Puoi provare a distribuire applicazioni come MySQL o WordPress sul cluster K8.
Grazie per aver letto e per favore lascia il tuo suggerimento nella sezione commenti qui sotto.