Fork me on GitHub

Herr Knedel/Nagyszerű dolgok konténerekkel: Kubenetes fürt és NFS tárolás

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

832 Words

Ma egy új Kubenetes fürtöt telepítek, és sok a tennivaló!

Megrendeltem hozzá ezeket az alkatrészeket:

Gyerünk!

A Raspian Lite telepítése alapján létrehoztam a saját telepítési képemet. A felhasználói/nyilvános kulcsom már eleve ebben a képben van tárolva, és a “/boot/config.txt” fájl az én LED-jeimhez lett igazítva.

# 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 - Lemez csatlakoztatása

Először is, telepítek egy NFS szolgáltatást az “1. kiszolgálóra”. Ez a tároló később a konténer fürtömhöz használható. Csatlakoztattam az USB merevlemezt a “Server 1”-hez, és az alábbi utasítások segítségével formáztam EXT4-re: https://homecircuits.eu/blog/mount-sata-cubieboard-lubuntu/ Ezután létrehoztam egy csatolási pontot az USB lemezhez:

x
+
Terminal

$ sudo mkdir /media/usb-platte

Az új fájlrendszert az “/etc/fstab” fájlba a következőképpen írtam be:

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

A beállítás a “sudo mount -a” paranccsal ellenőrizhető. Most az USB-lemezt a “/media/usb-disk” címre kell csatlakoztatni.

NFS telepítése

Ez a csomag szükséges az NFS-hez:

x
+
Terminal

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

Ezenkívül egy új mappát hoztunk létre az USB lemezen.

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

Ezután az “/etc/exports” fájlt kell szerkeszteni. Az elérési útvonal, a felhasználói azonosító és a csoport azonosítója itt kerül megadásra:

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

Az alábbi módon fogadható el a beállítás.

x
+
Terminal

$ sudo exportfs -ra

Hogyan tudom csatlakoztatni az NFS-t?

A kötetet a következőképpen tudom csatlakoztatni:

x
+
Terminal

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

Vagy adja meg véglegesen az “/etc/fstab” fájlban:

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

Itt is használhatom a “sudo mount -a” parancsot.

Kubernetes telepítése

A következő parancsokat az 1-es, 2-es és 3-as kiszolgálón kell végrehajtani. Először telepítjük a Dockert, és hozzáadjuk a “PI” felhasználót a Docker csoporthoz.

x
+
Terminal

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

Ezután a swap méret beállítása minden kiszolgálón nullázódik. Ez azt jelenti, hogy szerkesztem az “/etc/dphys-swapfile” fájlt, és a “CONF_SWAPSIZE” attribútumot “0”-ra állítom.

Ezeken kívül a “/boot/cmdline.txt” fájlban a “Control-Group” beállításokat is ki kell igazítani:

cgroup_enable=cpuset cgroup_enable=memory cgroup_memory=1

Lásd:

Most minden Raspberrynek egyszer újra kell indulnia, és készen áll a Kubernetes telepítésére.

x
+
Terminal

$ sudo reboot

Az újraindítás után telepítem ezeket a csomagokat az 1-es, 2-es és 3-as szerverre:
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

# Csak az 1-es szerver

Most már inicializálható a Kubenetes master.

x
+
Terminal

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

A sikeres inicializálás után elfogadom a beállításokat. Emlékszem a megjelenített “kubeadm join” parancsra a munkás csomópontok összekapcsolásához.
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

Most sajnos valamit tenni kell a hálózatért.
x
+
Terminal

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

A “kubectl get nodes” parancsnak mostantól a “Master”-t “Ready” státuszban kell mutatnia.

Kubernetes - Csomópontok hozzáadása

Most szükségünk van a “kubeadm join” parancsra a Kubenetes inicializálásból. Ezt a parancsot a “Server 2” és a “Server 3” szervereken adom meg.

x
+
Terminal

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

Ha most újra megadom a “kubectl get nodes” parancsot az “1. kiszolgálóról”, ezek a csomópontok valószínűleg a “Not Ready” státuszban jelennek meg. Itt is fennáll az a hálózati probléma, amellyel a mester is küzdött. Újra lefuttatom az előző parancsot, de ezúttal egy “f”-et adok hozzá a force szóhoz.
x
+
Terminal

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

Ezután az összes csomópont készen áll a használatra.

Kis teszt telepítés (Server 1/Kubenetes-Master)

Írok magamnak egy kis teszt telepítést és ellenőrzöm a funkciókat. Létrehozok egy “nginx.yml” fájlt a következő tartalommal:

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

Most kezdem a deplymentet:

x
+
Terminal

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

Nagyszerű!

Létrehozok egy szolgáltatást, és meg tudom hívni a konténeremet. Egyszer 20 “replikára” méretezem fel:
x
+
Terminal

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

See:

Tiszta tesztelés

A rendrakáshoz újra törlöm a függőséget és a szolgáltatást.

x
+
Terminal

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

See: