Introductie
Kubernetes is een open-source tool die cruciaal is bij containerorkestratie. Kubernetes werkt door clusters op schaal te orkestreren en te beheren over verschillende cloudomgevingen of zelfs on-premise servers. Een cluster is een verzameling hosts die bedoeld is voor het draaien van gecontaineriseerde applicaties en services. Een cluster heeft minimaal twee nodes nodig om te werken – één master node en een worker node. Met het oog op schaalbaarheid heb je de mogelijkheid om het cluster uit te breiden met zoveel worker-nodes als nodig is.
Een node in Kubernetes verwijst naar een server. A master-node is een server die de status van het cluster beheert. Worker-nodes zijn servers die de workloads uitvoeren – dit zijn doorgaans gecontaineriseerde applicaties en services.
Deze handleiding loodst je door de stappen voor het installeren en implementeren van een Kubernetes-cluster bestaande uit twee nodes op Ubuntu 20.04. Zoals vermeld is het hebben van twee nodes de meest basisconfiguratie bij het werken met Kubernetes. Je hebt ook de mogelijkheid om meer worker-nodes toe te voegen zodra je de basisbeginselen begrijpt. We zullen je verder laten zien hoe je de twee servers aan elkaar koppelt, zodat de master-node de worker-node kan aansturen.
Om onze configuratie te testen, zullen we een Docker container die de Nginx-webserver draait, implementeren op het cluster. Dit is een typische praktijktoepassing van Kubernetes. Je zult meer leren over enkele bepalende componenten van Kubernetes, zoals kubectl en kubeadm naarmate we vorderen. Het is ook raadzaam om eerst kennis te maken met onze handleiding over het leren kennen van de basisprincipes van de Kubernetes-toolkit om jezelf vertrouwd te maken met de basis van het Kubernetes-platform.
Laten we nu beginnen!
Vereisten
Je moet twee servers inrichten die draaien op Ubuntu 20.04. Voor de beste prestaties zijn de minimale systeemvereisten voor Kubernetes 2 GB RAM en 2 CPU's. Je kunt stappen 1 tot en met 4 van deze stapsgewijze handleiding volgen om je te helpen bij het instellen van je Ubuntu-server op CloudSigma. De ene server wordt de master-node, de andere de worker-node. We hebben onze twee servers toepasselijk kubernetes-master en kubernetes-worker genoemd. Dit maakt het gemakkelijker om de handleiding te volgen. Het staat je echter vrij om de hostnames te kiezen die je verkiest.
-
Zorg ervoor dat je op beide nodes een gebruiker toevoegt met sudo-rechten die we zullen gebruiken om de commando's uit te voeren zoals beschreven in de bovenstaande handleiding. Volg deze handleiding over het configureren van het Linux sudoers-bestand voor instructies.
-
Netwerkverbinding – de servers in het cluster moeten met elkaar kunnen communiceren. Wanneer je je VM's implementeert vanaf CloudSigma, zijn ze standaard verbonden met het internet met een openbaar IP-adres. Als je vanuit een lokaal netwerk werkt, moet je mogelijk je edit your /etc/hosts op elke server en ze op de juiste manier koppelen.
-
Je moet Docker installeren en inschakelen op elk van de nodes. Kubernetes is afhankelijk van een container-runtime om containers in pods uit te voeren. Hoewel er andere containerplatforms zijn om uit te kiezen, gebruiken we in deze handleiding Docker. Docker biedt de runtime-omgeving die Ubuntu nodig heeft. Je kunt stappen 1, 2 en 3 van onze handleiding over het installeren en bedienen van Docker.
Stap 1: Installeer Kubernetes
In deze stap gaan we Kubernetes installeren. Net zoals je met Docker hebt gedaan in de vereisten, moet je de commando's op beide nodes uitvoeren om Kubernetes te installeren. Gebruik ssh om in te loggen op beide nodes en door te gaan. Je begint met het installeren van het apt-transport-https-pakket, waarmee je kunt werken met http en https in de repositories van Ubuntu. Installeer ook curl omdat dit nodig is voor de volgende stappen. Voer het volgende commando uit:
|
1 |
sudo apt install apt-transport-https curl |
Voeg vervolgens de Kubernetes-ondertekeningssleutel toe aan beide nodes door het commando uit te voeren:
|
1 |
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add |
Vervolgens voegen we de Kubernetes-repository toe als pakketbron op beide nodes met behulp van het volgende commando:
|
1 2 |
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" >> ~/kubernetes.list sudo mv ~/kubernetes.list /etc/apt/sources.list.d |
Werk daarna de nodes bij:
|
1 |
sudo apt update |
- Kubernetes-tools installeren
Zodra de update is voltooid, installeren we Kubernetes. Dit houdt in dat we de verschillende tools installeren waaruit Kubernetes bestaat: kubeadm, kubelet, kubectl, en kubernetes-cni. Deze tools worden op beide nodes geïnstalleerd. We definiëren elke tool hieronder:
-
kubelet – een agent die op elke node draait en de communicatie met de master-node afhandelt om workloads in de container-runtime te starten. Voer de volgende opdracht uit om kubelet te installeren:
|
1 |
sudo apt install kubelet |
-
kubeadm – maakt deel uit van het Kubernetes-project en helpt bij het initialiseren van een Kubernetes-cluster. Voer de volgende opdracht uit om kubeadm te installeren:
|
1 |
sudo apt install kubeadm |
-
kubectl – de Kubernetes-opdrachtregeltool waarmee u opdrachten kunt uitvoeren binnen de Kubernetes-clusters. Voer de volgende opdracht uit om kubectl te installeren:
|
1 |
sudo apt install kubectl |
-
kubernetes-cni – maakt netwerken binnen de containers mogelijk, zodat containers kunnen communiceren en gegevens kunnen uitwisselen. Voer de volgende opdracht uit om te installeren:
|
1 |
sudo apt-get install -y kubernetes-cni |
Optioneel kunt u ze alle vier met één enkele opdracht installeren:
|
1 |
sudo apt-get install -y kubelet kubeadm kubectl kubernetes-cni |
Stap 2: Swap-geheugen uitschakelen
Kubernetes functioneert niet in een systeem dat gebruikmaakt van swap geheugen. Daarom moet het worden uitgeschakeld op de master-node en alle worker-nodes. Voer de volgende opdracht uit om het swap-geheugen uit te schakelen:
|
1 |
sudo swapoff -a |
Deze opdracht schakelt het swap-geheugen uit totdat het systeem opnieuw wordt opgestart. We moeten ervoor zorgen dat het ook na een herstart uitgeschakeld blijft. Dit moet worden gedaan op de master- en alle worker-nodes. We kunnen dit doen door het fstab bestand te bewerken en de /swapfile-regel met een #. Open het bestand met de nano-teksteditor door de volgende opdracht in te voeren:
|
1 |
sudo nano /etc/fstab |
Zet in het bestand een commentaarteken voor de swapfile-regel, zoals getoond in de onderstaande schermafbeelding:

Als u de swapfile-regel niet ziet, kunt u deze gewoon negeren. Sla het bestand op en sluit het wanneer u klaar bent met bewerken. Volg hetzelfde proces voor beide nodes. Nu blijven de instellingen voor het swap-geheugen uitgeschakeld, zelfs nadat uw server opnieuw is opgestart.
Stap 3: Unieke hostnamen instellen
Uw nodes moeten unieke hostnamen hebben voor eenvoudigere identificatie. Als u een cluster met veel nodes implementeert, kunt u identificatienamen instellen voor uw worker-nodes, zoals node-1, node-2, enz. Zoals we eerder al vermeldden, hebben we onze nodes kubernetes-master en kubernetes-worker genoemd. We hebben deze ingesteld bij het maken van de server. U kunt de uwe echter aanpassen of instellen vanaf de opdrachtregel als u dat nog niet had gedaan. Om de hostnaam op de master-node aan te passen, voert u de volgende opdracht uit:
|
1 |
sudo hostnamectl set-hostname kubernetes-master |
Voer op de worker-node de volgende opdracht uit:
|
1 |
sudo hostnamectl set-hostname kubernetes-worker |
U kunt de huidige terminalsessie sluiten en opnieuw via ssh inloggen op de server om de wijzigingen te zien.
Stap 4: Iptables bridged verkeer laten zien
Om ervoor zorgen dat de master- en worker-nodes bridged verkeer correct zien, moet u ervoor zorgen dat net.bridge.bridge-nf-call-iptables op 1 is ingesteld in uw configuratie. Zorg er eerst voor dat de br_netfilter-module is geladen. U kunt dit bevestigen door de volgende opdracht uit te voeren:
|
1 |
lsmod | grep br_netfilter |
Optioneel kunt u deze expliciet laden met de opdracht:
|
1 |
sudo modprobe br_netfilter |
Nu kunt u deze opdracht uitvoeren om de waarde op 1 in te stellen:
|
1 |
sudo sysctl net.bridge.bridge-nf-call-iptables=1 |
Stap 5: Docker Cgroup Driver wijzigen
Standaard wordt Docker geïnstalleerd met “cgroupfs” als de cgroup-driver. Kubernetes raadt aan dat Docker moet draaien met “systemd” als driver. Als u deze stap overslaat en in de volgende stap probeert de kubeadm te initialiseren, krijgt u de volgende waarschuwing in uw terminal:
|
1 2 |
[preflight] Uitvoeren van pre-flight-controles [WAARSCHUWING IsDockerSystemdCheck]: gedetecteerd "cgroupfs" als de Docker cgroup driver. De aanbevolen driver is "systemd". Gelieve te volgen de handleiding op https://kubernetes.io/docs/setup/cri/ |
Werk op zowel de master- als de worker-nodes de cgroupdriver bij met de volgende opdrachten:
|
1 2 3 4 5 6 7 8 9 |
sudo mkdir /etc/docker cat <<EOF | sudo tee /etc/docker/daemon.json { "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "storage-driver": "overlay2" } EOF |
Voer vervolgens de volgende opdrachten uit om Docker te herstarten en te activeren bij het opstarten van het systeem:
|
1 2 3 |
sudo systemctl enable docker sudo systemctl daemon-reload sudo systemctl restart docker |
Zodra dat is ingesteld, kunnen we overgaan tot het leuke werk: het implementeren van het Kubernetes-cluster!
Stap 6: De Kubernetes Master Node initialiseren
De eerste stap bij het implementeren van een Kubernetes-cluster is het opstarten van de master-node. Voer in de terminal van uw master-node de volgende opdracht uit om de kubernetes-master:
|
1 |
sudo kubeadm init --pod-network-cidr=10.244.0.0/16 |
Als u de bovenstaande opdracht uitvoert en uw systeem niet voldoet aan de verwachte vereisten, zoals het minimale RAM-geheugen of de CPU zoals uitgelegd in de sectie Vereisten, krijgt u een waarschuwing en start het cluster niet:

De onderstaande schermafbeelding laat zien dat de initialisatie succesvol was. We hebben ook een vlag toegevoegd om het pod-netwerk te specificeren met het IP-adres 10.244.0.0. Dit is het standaard IP-adres dat kube-flannel gebruikt. In de volgende stap zullen we het pod-netwerk verder bespreken.

In de uitvoer ziet u de kubeadm join -opdracht (we hebben ons IP-adres verborgen) en een uniek token dat u uitvoert op de worker-node en alle andere worker-nodes die u aan dit cluster wilt toevoegen. Kopieer en plak deze opdracht vervolgens, want u hebt deze later nodig op de worker-node.
In de uitvoer toont Kubernetes ook enkele aanvullende opdrachten die u als gewone gebruiker op de master-node moet uitvoeren voordat u het cluster kunt gaan gebruiken. Laten we deze opdrachten uitvoeren:
|
1 2 3 |
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config |
We hebben nu de master-node geïnitialiseerd. We moeten echter ook het pod-netwerk op de master-node instellen voordat we de worker-nodes toevoegen.
Stap 7: Een pod-netwerk implementeren
Een pod-netwerk vergemakkelijkt de communicatie tussen servers en is noodzakelijk voor de goede werking van het Kubernetes-cluster. U kunt meer lezen over Kubernetes-clusternetwerken in de officiële documentatie. We gebruiken het Flannel pod-netwerk voor deze handleiding. Flannel is een eenvoudig overlay-netwerk dat voldoet aan de Kubernetes-vereisten.
Voordat we het pod-netwerk implementeren, moeten we de status van de firewall controleren. Als u de firewall hebt ingeschakeld na het volgen van stap 5 van de handleiding voor het instellen van uw Ubuntu-server, moet u eerst een firewall-regel toevoegen om uitzonderingen te maken voor poort 6443 (de standaardpoort voor Kubernetes). Voer de volgende ufw-commando's uit op zowel de master- als de worker-nodes:
|
1 2 |
sudo ufw allow 6443 sudo ufw allow 6443/tcp |
Daarna kunt u de volgende twee commando's uitvoeren om het pod-netwerk op de master-node te implementeren:
|
1 2 |
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/k8s-manifests/kube-flannel-rbac.yml |
Dit kan een paar seconden tot een minuut duren, afhankelijk van uw omgeving, om het flannel-netwerk te laden. Voer het volgende commando uit om te controleren of alles is opgestart:
|
1 |
kubectl get pods --all-namespaces |
De uitvoer van het commando zou de status van alle services als 'running' moeten tonen als alles succesvol was:

U kunt ook de gezondheid van de componenten bekijken met het get component status-commando:
|
1 |
kubectl get componentstatus |

Dit commando heeft een korte vorm cs:
|
1 |
kubectl get cs |

Als u de status 'unhealthy' ziet, pas dan de volgende bestanden aan en verwijder de regel bij (spec->containers->command) die deze term bevat - --port=0 :
|
1 |
sudo nano /etc/kubernetes/manifests/kube-scheduler.yaml |
Doe het zelfde voor dit bestand:
|
1 |
sudo nano /etc/kubernetes/manifests/kube-controller-manager.yaml |
Finally, restart the Kubernetes service:
|
1 |
sudo systemctl restart kubelet.service |
Stap 8: Worker-nodes toevoegen aan het Kubernetes-cluster
Nu de kubernetes-master-node actief is en het pod-netwerk gereed is, kunnen we onze worker-nodes toevoegen aan het cluster. In deze handleiding hebben we slechts één worker-node, dus daar zullen we mee werken. Als u meer worker-nodes heeft, kunt u altijd dezelfde stappen volgen als we hieronder zullen uitleggen om lid te worden van het cluster.
Log eerst in op uw worker-node in een aparte terminal-sessie. U gebruikt uw kubeadm join-commando dat in uw terminal werd getoond toen we de master-node initialiseerden in Stap 6. Voer het commando uit:
|
1 |
sudo kubeadm join 127.0.0.188:6443 --token u81y02.91gqwkxx6rnhnnly --discovery-token-ca-cert-hash sha256:4482ab1c66bf17992ea02c1ba580f4af9f3ad4cc37b24f189db34d6e3fe95c2d |
U zou een vergelijkbare uitvoer moeten zien als in de onderstaande schermafbeelding wanneer het toevoegen aan het cluster is voltooid:

Zodra het toevoegingsproces is voltooid, schakelt u over naar de terminal van de master-node en voert u het volgende commando uit om te bevestigen dat uw worker-node is toegevoegd aan het cluster:
|
1 |
kubectl get nodes |
In de schermafbeelding van de uitvoer van het bovenstaande commando kunnen we zien dat de worker-node is toegevoegd aan het cluster:

Stap 9: Een applicatie implementeren op het Kubernetes-cluster
Op dit punt heeft u met succes een Kubernetes-cluster opgezet. Laten we het cluster bruikbaar maken door er een service op te implementeren. Nginx is een populaire webserver die ongelooflijke snelheden biedt, zelfs met duizenden verbindingen. We zullen de Nginx-webserver op het cluster implementeren om te bewijzen dat u deze opzet in een echte toepassing kunt gebruiken.
Voer het volgende commando uit op de master-node om een Kubernetes-deployment te maken voor Nginx:
|
1 |
kubectl create deployment nginx --image=nginx |
U kunt de gemaakte deployment bekijken met het describe deployment-commando:
|
1 |
kubectl describe deployment nginx |

Om de nginx service toegankelijk te maken via internet, voer je de volgende opdracht uit:
|
1 |
kubectl create service nodeport nginx --tcp=80:80 |

De bovenstaande opdracht maakt een openbare service aan voor de Nginx-deployment. Omdat dit een nodeport deployment is, wijst Kubernetes de service een poort toe in het bereik van 32000+.
Je kunt de huidige services ophalen door de volgende opdracht uit te voeren:
|
1 |
kubectl get svc |

Je kunt zien dat onze toegewezen poort 32264 is. Noteer de poort die in je terminal wordt weergegeven om in de volgende stap te gebruiken.
Om te controleren of de Nginx-service-deployment succesvol is, voer je een curl aanroep uit naar de worker-node vanaf de master. Vervang het IP-adres van je worker-node en de poort die je uit de bovenstaande opdracht hebt verkregen:
|
1 |
curl your-kubernetes-worker-ip:32264 |
Je zou de uitvoer van de standaard Nginx index.html:

Optioneel kun je de combinatie van het IP-adres en de poort van de worker-node in je browser bezoeken en de standaard Nginx-indexpagina bekijken:

Je kunt een deployment delete door de naam van de deployment op te geven. Deze opdracht verwijdert bijvoorbeeld onze deployment:
|
1 |
kubectl delete deployment nginx |
We hebben nu met succes ons cluster getest!
Conclusie
In deze handleiding heb je geleerd hoe je een Kubernetes-cluster installeert op Ubuntu 20.04. Je hebt een cluster opgezet dat bestaat uit een master- en een worker-node. Je hebt de Kubernetes-toolset kunnen installeren, een pod-netwerk gemaakt en de worker-node aan de master-node gekoppeld. We hebben ons concept ook getest door een basisimplementatie van een Nginx-webserver op het cluster uit te voeren. Dit zou moeten dienen als basis voor het werken met Kubernetes-clusters op Ubuntu.
Hoewel we slechts één worker-node hebben gebruikt, kun je je cluster uitbreiden met zoveel nodes als je wilt. Als je je verder wilt verdiepen in DevOps met automatiseringstools zoals Ansible, hebben we een handleiding die dieper ingaat op het inrichten van Kubernetes-clusterdeployments met Ansible en Kubeadm, bekijk deze dan zeker. Als je wilt leren hoe je een PHP-applicatie implementeert op een Kubernetes-cluster, bekijk dan deze handleiding.
Veel computerplezier!
Reacties
Nog geen reacties. Wees de eerste.