Fork me on GitHub

Herr Knedel/Hienoja asioita konttien kanssa: Kubenetes-klusteri ja NFS-tallennustila

Created Sun, 20 Jun 2021 00:00:00 +0000 Modified Sat, 02 Apr 2022 14:55:53 +0000 Schwierigkeitsgrad: Sehr sportlich

729 Words

Tänään olen asentamassa uutta Kubenetes-klusteria ja tekemistä riittää!

Olen tilannut näitä komponentteja sitä varten:

Mennään!

Olen luonut oman kuvan asennusta varten Raspian Lite -asennuksen pohjalta. Käyttäjä/julkinen avaimeni on jo tallennettu tähän kuvaan, ja tiedosto “/boot/config.txt” on mukautettu LEDejäni varten.

# 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

Palvelin 1 - Kiinnitä levyke

Asennan ensin NFS-palvelun palvelimelle 1. Tätä tallennustilaa voidaan käyttää myöhemmin konttiklusterissani. Liitin USB-kiintolevyn “Server 1” -asemaan ja alustin sen EXT4-formaattiin seuraavien ohjeiden avulla: https://homecircuits.eu/blog/mount-sata-cubieboard-lubuntu/ Sitten loin USB-levylle liitäntäpisteen:

x
+
Terminal

$ sudo mkdir /media/usb-platte

Olen syöttänyt uuden tiedostojärjestelmän tiedostoon “/etc/fstab” seuraavasti:

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

Asetukset voidaan tarkistaa komennolla “sudo mount -a”. Nyt USB-levyn pitäisi olla asennettuna osoitteeseen “/media/usb-disk”.

Asenna NFS

Tämä paketti tarvitaan NFS:ää varten:

x
+
Terminal

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

Lisäksi USB-levylle luotiin uusi kansio.

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 {} \;

Tällöin tiedostoa “/etc/exports” on muokattava. Polku, käyttäjätunnus ja ryhmätunnus syötetään sinne:

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

Nyt asetus voidaan tehdä seuraavasti.

x
+
Terminal

$ sudo exportfs -ra

Miten voin asentaa NFS:n?

Voin asentaa aseman seuraavasti:

x
+
Terminal

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

Tai kirjoita pysyvästi tiedostoon “/etc/fstab”:

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

Tässäkin tapauksessa voin käyttää komentoa “sudo mount -a”.

Asenna Kubernetes

Seuraavat komennot on suoritettava palvelimilla 1, 2 ja 3. Asennetaan ensin Docker ja lisätään käyttäjä “PI” Docker-ryhmään.

x
+
Terminal

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

Tämän jälkeen swap-kokoasetus nollataan kaikilla palvelimilla. Tämä tarkoittaa, että muokkaan tiedostoa “/etc/dphys-swapfile” ja asetan attribuutin “CONF_SWAPSIZE” arvoksi “0”.

Lisäksi “/boot/cmdline.txt”-tiedostossa olevia “Control-Group”-asetuksia on muutettava:

cgroup_enable=cpuset cgroup_enable=memory cgroup_memory=1

Katso:

Nyt kaikkien Raspberrys-levyjen pitäisi käynnistyä uudelleen kerran, ja ne ovat valmiita Kubernetes-asennukseen.

x
+
Terminal

$ sudo reboot

Uudelleenkäynnistyksen jälkeen asennan nämä paketit palvelimelle 1, palvelimelle 2 ja palvelimelle 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

# Vain palvelin 1

Nyt Kubenetes master voidaan alustaa.

x
+
Terminal

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

Hyväksyn asetukset onnistuneen alustuksen jälkeen. Muistan näytetyn “kubeadm join” -komennon työläissolmujen yhdistämiseksi.
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

Valitettavasti verkolle on nyt tehtävä jotain.
x
+
Terminal

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

Komennon “kubectl get nodes” pitäisi nyt näyttää “Master” tilassa “Ready”.

Kubernetes - Lisää solmuja

Nyt tarvitsemme “kubeadm join” -komennon Kubenetesin alustuksesta. Syötän tämän komennon palvelimille “Server 2” ja “Server 3”.

x
+
Terminal

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

Jos annan nyt komennon “kubectl get nodes” palvelimelta 1 uudelleen, nämä solmut näkyvät todennäköisesti tilassa “Not Ready”. Tässäkin tapauksessa on kyse verkko-ongelmasta, joka myös isännällä oli. Suoritan edellisen komennon uudelleen, mutta tällä kertaa lisään “f”-merkin force.
x
+
Terminal

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

Tämän jälkeen kaikki solmut ovat valmiina käyttöön.

Pieni testikanta (Palvelin 1/Kubenetes-Master)

Kirjoitan itselleni pienen testikäytön ja tarkistan toiminnot. Luon tiedoston “nginx.yml”, jonka sisältö on seuraava:

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

Nyt minä aloitan varusmiespalvelun:

x
+
Terminal

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

Hienoa!

Luon palvelun ja voin kutsua konttiani. Laajennan kerran 20 “replikaatioon”:
x
+
Terminal

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

Katso:

Siivoa testivarasto

Siivotakseni tilanteen poistan varoituksen ja palvelun uudelleen.

x
+
Terminal

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

Katso: