Vandaag installeer ik een nieuw Kubenetes cluster en er is veel te doen!
Ik heb deze onderdelen ervoor besteld:
- 1x WDBU6Y0050BBK WD Elements portable 5TB: https://www.reichelt.de/wd-elements-portable-5tb-wdbu6y0050bbk-p270625.html?
- 3x ventilator, dubbel: https://www.reichelt.de/raspberry-pi-luefter-dual-rpi-fan-dual-p223618.html?
- 1x Raspberry 4 / 4GB Ram: https://www.reichelt.de/raspberry-pi-4-b-4x-1-5-ghz-4-gb-ram-wlan-bt-rasp-pi-4-b-4gb-p259920.html?
- 2x Raspberry 4 / 8GB Ram: https://www.reichelt.de/raspberry-pi-4-b-4x-1-5-ghz-8-gb-ram-wlan-bt-rasp-pi-4-b-8gb-p276923.html?
- 3x voedingseenheden: https://www.reichelt.de/raspberry-pi-netzteil-5-1-v-3-0-a-usb-type-c-eu-stecker-s-rpi-ps-15w-bk-eu-p260010.html
- 1x Rackmount: https://amzn.to/3H8vOg7
- 1x 600 stuks Dupont plug kit: https://amzn.to/3kcfYqQ
- 1x groene LED met serieweerstand: https://amzn.to/3EQgXVp
- 1x blauwe LED met serieweerstand: https://amzn.to/31ChYSO
- 10x Marquardt 203.007.013 Blanking stuk Zwart: https://www.voelkner.de/products/215024/Marquardt-203.007.013-Blindstueck-Schwarz.html
- 1x lampvoet: https://amzn.to/3H0UZkG
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:
$ sudo mkdir /media/usb-platte
/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:
$ sudo apt-get install nfs-kernel-server -y
Er werd ook een nieuwe map aangemaakt op de USB disk
$ 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.
$ sudo exportfs -ra
Hoe kan ik de NFS mounten?
Ik kan het volume als volgt mounten:
$ sudo mount -t nfs SERVER-1-IP:/media/usb-platte/nfsshare /mnt/nfs
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.
$ 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.
Na de reboot, installeer ik deze pakketten op server 1, server 2 en server 3:$ sudo reboot
$ 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.
$ sudo kubeadm init --token-ttl=0 --pod-network-cidr=10.244.0.0/16
$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config
$ 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”.
$ kubeadm join master-ip:port --token r4fddsfjdsjsdfomsfdoi --discovery-token-ca-cert-hash sha256:1adea3bfxfdfddfdfxfdfsdffsfdsdf946da811c27d1807aa
$ 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:
$ 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”:Zie:$ kubectl scale deployment my-nginx --replicas=0; kubectl scale deployment my-nginx --replicas=20
Test deplyment opruimen
Om op te ruimen, verwijder ik het deplyment en de service weer.
$ kubectl delete service example-service
$ kubectl delete deplyments my-nginx
Zie: