Fork me on GitHub

Herr Knedel/Veľké veci s kontajnermi: Kubenetes cluster a ukladanie NFS

Created Sun, 20 Jun 2021 00:00:00 +0000 Modified Sat, 02 Apr 2022 16:19:18 +0000 Úroveň obtiažnosti: Veľmi športové

819 Words

Dnes inštalujem nový cluster Kubenetes a mám toho veľa na práci!

Objednal som si preň tieto komponenty:

Poďme!

Vytvoril som vlastný obraz pre inštaláciu na základe inštalácie Raspian Lite. Môj používateľský/verejný kľúč je už uložený v tomto obraze a súbor “/boot/config.txt” bol prispôsobený pre moje LED.

# 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 - pripojenie disku

Najprv nainštalujem službu NFS na server 1. Toto úložisko sa môže neskôr použiť pre môj kontajnerový klaster. Pripojil som pevný disk USB k “Serveru 1” a naformátoval ho EXT4 pomocou týchto pokynov: https://homecircuits.eu/blog/mount-sata-cubieboard-lubuntu/ Potom som vytvoril prípojný bod pre disk USB:

x
+
Terminal

$ sudo mkdir /media/usb-platte

Nový súborový systém som zadal do súboru “/etc/fstab” takto:

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

Nastavenie môžete skontrolovať pomocou príkazu “sudo mount -a”. Teraz by mal byť disk USB pripojený pod “/media/usb-disk”.

Inštalácia systému NFS

Tento balík je potrebný pre systém NFS:

x
+
Terminal

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

Okrem toho bol na disku USB vytvorený nový priečinok

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

Potom je potrebné upraviť súbor “/etc/exports”. Zadáva sa tu cesta, ID používateľa a ID skupiny:

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

Najnovšie nastavenie je možné prijať takto.

x
+
Terminal

$ sudo exportfs -ra

Ako môžem pripojiť systém NFS?

Zväzok môžem pripojiť takto:

x
+
Terminal

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

Alebo zadajte natrvalo do súboru “/etc/fstab”:

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

Aj tu môžem použiť “sudo mount -a”.

Inštalácia služby Kubernetes

Nasledujúce príkazy sa musia vykonať na serveri 1, serveri 2 a serveri 3. Najprv nainštalujeme aplikáciu Docker a pridáme používateľa “PI” do skupiny Docker.

x
+
Terminal

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

Po tomto nastavení sa veľkosť swapu na všetkých serveroch vynuluje. To znamená, že upravím súbor “/etc/dphys-swapfile” a nastavím atribút “CONF_SWAPSIZE” na “0”.

Okrem toho je potrebné upraviť nastavenia “Control-Group” v súbore “/boot/cmdline.txt”:

cgroup_enable=cpuset cgroup_enable=memory cgroup_memory=1

Pozri:

Nynie by sa mali všetky maliny raz reštartovať a potom sú pripravené na inštaláciu Kubernetes.

x
+
Terminal

$ sudo reboot

Po reštarte nainštalujem tieto balíky na server 1, server 2 a 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

# Len server 1

Teraz je možné inicializovať hlavný modul Kubenetes.

x
+
Terminal

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

Po úspešnej inicializácii akceptujem nastavenia. Pamätám si zobrazený príkaz “kubeadm join” na pripojenie pracovných uzlov.
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

Teraz je, žiaľ, potrebné niečo urobiť pre sieť.
x
+
Terminal

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

Príkaz “kubectl get nodes” by mal teraz zobraziť “Master” v stave “Ready”.

Kubernetes - Pridanie uzlov

Teraz potrebujeme príkaz “kubeadm join” z inicializácie Kubenetes. Tento príkaz zadám na “Serveri 2” a “Serveri 3”.

x
+
Terminal

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

Ak teraz opäť zadám príkaz “kubectl get nodes” zo “Servera 1”, tieto uzly sa pravdepodobne zobrazia v stave “Not Ready”. Aj tu sa vyskytuje problém siete, ktorý mal aj majster. Znova spustím príkaz z predchádzajúceho postupu, ale tentoraz pridám písmeno “f” ako force.
x
+
Terminal

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

Potom vidím všetky uzly pripravené na použitie.

Malé testovacie nasadenie (Server 1/Kubenetes-Master)

Napíšem si malé testovacie nasadenie a skontrolujem funkcie. Vytvorím súbor “nginx.yml” s nasledujúcim obsahom:

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

Teraz začínam deplyment:

x
+
Terminal

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

Skvelé!

Vytvorím službu a môžem vyvolať svoj kontajner. Raz škálujem na 20 “replik”:
x
+
Terminal

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

Pozrite si:

Vyčistiť testovacie deplyment

Ak chcete upratať, odstráňte deplyment a službu znova.

x
+
Terminal

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

Pozrite si: