Fork me on GitHub

Herr Knedel/Geweldige dingen met containers: Kubenetes cluster en NFS opslag

Created Sun, 20 Jun 2021 00:00:00 +0000 Modified Sat, 02 Apr 2022 15:29:26 +0000 Schwierigkeitsgrad: Sehr sportlich

895 Words

Vandaag installeer ik een nieuw Kubenetes cluster en er is veel te doen!

Ik heb deze onderdelen ervoor besteld:

Laten we gaan!

Ik heb mijn eigen image gemaakt voor de installatie, gebaseerd op de Raspian Lite installatie. Mijn gebruikers/publieke sleutel is al opgeslagen in dit image en het “/boot/config.txt” bestand is aangepast voor mijn leds.

# meine Server brauchen kein HDMI, WLAN und Bluetooth
dtoverlay=disable-bt
dtoverlay=disable-wifi
disable_splash=1
hdmi_blanking=1
hdmi_ignore_hotplug=1
hdmi_ignore_composite=1
 
 
# Status-LEDs an GPIO weiterleiten
dtoverlay=act-led,gpio=21
dtparam=act_led_trigger=cpu0

Server 1 - Monteer schijf

Eerst installeer ik een NFS service op “Server 1”. Deze opslag kan later gebruikt worden voor mijn container cluster. Ik sloot de USB harde schijf aan op “Server 1” en formatteerde hem EXT4 met behulp van deze instructies: https://homecircuits.eu/blog/mount-sata-cubieboard-lubuntu/ Daarna heb ik een koppelpunt gemaakt voor de USB schijf:

x
+
Terminal

$ sudo mkdir /media/usb-platte

Ik heb het nieuwe bestandssysteem als volgt in het bestand “/etc/fstab” ingevoerd:

/dev/sda1 /media/usb-platte ext4 defaults 0 2

De instelling kan worden gecontroleerd met “sudo mount -a”. Nu zou de USB schijf aangekoppeld moeten zijn onder “/media/usb-disk”.

Installeer NFS

Dit pakket is nodig voor NFS:

x
+
Terminal

$ sudo apt-get install nfs-kernel-server -y

Er werd ook een nieuwe map aangemaakt op de USB disk

x
+
Terminal

$ sudo mkdir /media/usb-platte/nfsshare
$ sudo chown -R pi:pi /media/usb-platte/nfsshare/
$ sudo find /media/usb-platte/nfsshare/ -type d -exec chmod 755 {} \;
$ sudo find /media/usb-platte/nfsshare/ -type f -exec chmod 644 {} \;

Dan moet het “/etc/exports” bestand worden bewerkt. Het pad, de gebruikers-ID en de groeps-ID worden daar ingevoerd:

/media/usb-platte/nfsshare *(rw,all_squash,insecure,async,no_subtree_check,anonuid=1000,anongid=1000)

Nu kan de instelling als volgt worden overgenomen.

x
+
Terminal

$ sudo exportfs -ra

Hoe kan ik de NFS mounten?

Ik kan het volume als volgt mounten:

x
+
Terminal

$ sudo mount -t nfs SERVER-1-IP:/media/usb-platte/nfsshare /mnt/nfs

Of voer het permanent in “/etc/fstab” bestand in:

SERVER-1-IP:/media/usb-platte/nfsshare /mnt/nfs/ nfs defaults 0 0

Ook hier kan ik “sudo mount -a” gebruiken.

Installeer Kubernetes

De volgende commando’s moeten worden uitgevoerd op server 1, server 2 en server 3. Eerst installeren we Docker en voegen de gebruiker “PI” toe aan de Docker groep.

x
+
Terminal

$ curl -sSL get.docker.com | sh
$ sudo usermod pi -aG docker

Daarna wordt de swap grootte op alle servers op nul gezet. Dit betekent dat ik het bestand “/etc/dphys-swapfile” bewerk en het attribuut “CONF_SWAPSIZE” op “0” zet.

Daarnaast moeten de “Control-Group” instellingen in het “/boot/cmdline.txt” bestand worden aangepast:

cgroup_enable=cpuset cgroup_enable=memory cgroup_memory=1

Zie:

Nu zouden alle Raspberrys eenmalig moeten herstarten en zijn dan klaar voor de Kubernetes installatie.

x
+
Terminal

$ sudo reboot

Na de reboot, installeer ik deze pakketten op server 1, server 2 en server 3:
x
+
Terminal

$ curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - && \
$ echo "deb http://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list && \
$ sudo apt-get update -q && sudo apt-get install -qy kubeadm

# Alleen server 1

Nu kan de Kubenetes master geïnitialiseerd worden.

x
+
Terminal

$ sudo kubeadm init --token-ttl=0 --pod-network-cidr=10.244.0.0/16

Na de succesvolle initialisatie, accepteer ik de instellingen. Ik herinner me het getoonde “kubeadm join” commando om de werkknooppunten te verbinden.
x
+
Terminal

$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config

Nu, helaas, moet er iets gedaan worden voor het netwerk.
x
+
Terminal

$ kubectl apply https://raw.githubusercontent.com/coreos/flannel/2140ac876ef134e0ed5af15c65e414cf26827915/Documentation/kube-flannel.yml
$ sudo systemctl daemon-reload
$ systemctl restart kubelet

Het commando “kubectl get nodes” zou nu de “Master” in “Ready” status moeten laten zien.

Kubernetes - Knooppunten toevoegen

Nu hebben we het “kubeadm join” commando nodig van de Kubenetes initialisatie. Ik voer dit commando in op “Server 2” en “Server 3”.

x
+
Terminal

$ kubeadm join master-ip:port --token r4fddsfjdsjsdfomsfdoi --discovery-token-ca-cert-hash sha256:1adea3bfxfdfddfdfxfdfsdffsfdsdf946da811c27d1807aa

Als ik nu het commando “kubectl get nodes” van “Server 1” opnieuw ingeef, worden deze nodes waarschijnlijk weergegeven in de status “Not Ready”. Ook hier is er het netwerkprobleem dat de meester ook had. Ik voer het commando opnieuw uit, maar deze keer voeg ik een “f” toe voor force.
x
+
Terminal

$ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/2140ac876ef134e0ed5af15c65e414cf26827915/Documentation/kube-flannel.yml

Daarna, zie ik alle nodes klaar voor gebruik.

Klein testdepot (Server 1/Kubenetes-Master)

Ik schrijf zelf een kleine testomgeving en controleer de functies. Ik maak een “nginx.yml” bestand met de volgende inhoud:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-nginx
spec:
 selector:
   matchLabels:
     run: my-nginx
 replicas: 2
 template:
   metadata:
     labels:
       run: my-nginx
   spec:
     containers:
     - name: my-nginx
       image: nginx
       ports:
       - containerPort: 80

Nu begin ik met de deplyment:

x
+
Terminal

$ kubectl apply -f nginx.yml
$ kubectl rollout status deployment/my-nginx
$ kubectl get deplyments

Geweldig.

Ik maak een service en kan mijn container oproepen. Ik schaal een keer op naar 20 “replica’s”:
x
+
Terminal

$ kubectl scale deployment my-nginx --replicas=0; kubectl scale deployment my-nginx --replicas=20

Zie:

Test deplyment opruimen

Om op te ruimen, verwijder ik het deplyment en de service weer.

x
+
Terminal

$ kubectl delete service example-service
$ kubectl delete deplyments my-nginx

Zie: