Fork me on GitHub

Herr Knedel/Lucruri grozave cu containere: cluster Kubenetes și stocare NFS

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

873 Words

Astăzi instalez un nou cluster Kubenetes și sunt multe de făcut!

Am comandat aceste componente pentru el:

Să mergem!

Mi-am creat propria imagine pentru instalare pe baza instalației Raspian Lite. Cheia mea de utilizator/public este deja stocată în această imagine, iar fișierul “/boot/config.txt” a fost adaptat pentru LED-urile mele.

# 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 - Montați discul

În primul rând, instalez un serviciu NFS pe “Server 1”. Acest spațiu de stocare poate fi utilizat ulterior pentru clusterul meu de containere. Am conectat hard disk-ul USB la “Server 1” și l-am formatat EXT4 cu ajutorul acestor instrucțiuni: https://homecircuits.eu/blog/mount-sata-cubieboard-lubuntu/ Apoi am creat un punct de montare pentru discul USB:

x
+
Terminal

$ sudo mkdir /media/usb-platte

Am introdus noul sistem de fișiere în fișierul “/etc/fstab” după cum urmează:

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

Setarea poate fi verificată cu “sudo mount -a”. Acum, discul USB ar trebui să fie montat sub “/media/usb-disk”.

Instalați NFS

Acest pachet este necesar pentru NFS:

x
+
Terminal

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

În plus, a fost creat un nou dosar pe discul USB

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

Apoi trebuie editat fișierul “/etc/exports”. Aici se introduc calea, ID-ul utilizatorului și ID-ul grupului:

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

Acum setarea poate fi adoptată după cum urmează.

x
+
Terminal

$ sudo exportfs -ra

Cum pot monta NFS?

Pot monta volumul după cum urmează:

x
+
Terminal

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

Sau introduceți permanent în fișierul “/etc/fstab”:

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

Și aici pot folosi “sudo mount -a”.

Instalați Kubernetes

Următoarele comenzi trebuie să fie executate pe serverul 1, serverul 2 și serverul 3. În primul rând, instalăm Docker și adăugăm utilizatorul “PI” la grupul Docker.

x
+
Terminal

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

După aceasta, setarea dimensiunii swap este zero pe toate serverele. Aceasta înseamnă că editez fișierul “/etc/dphys-swapfile” și setez atributul “CONF_SWAPSIZE” la “0”.

În plus, setările “Control-Group” din fișierul “/boot/cmdline.txt” trebuie ajustate:

cgroup_enable=cpuset cgroup_enable=memory cgroup_memory=1

A se vedea:

Acum, toate camerele Raspberry ar trebui să repornească o dată și sunt gata pentru instalarea Kubernetes.

x
+
Terminal

$ sudo reboot

După repornire, instalez aceste pachete pe serverul 1, serverul 2 și serverul 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

# Numai serverul 1

Acum masterul Kubenetes poate fi inițializat.

x
+
Terminal

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

După ce inițializarea a fost efectuată cu succes, accept setările. Îmi amintesc comanda afișată “kubeadm join” pentru conectarea nodurilor de lucru.
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

Acum, din păcate, trebuie să se facă ceva pentru rețea.
x
+
Terminal

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

Comanda “kubectl get nodes” ar trebui să arate acum “Master” în starea “Ready”.

Kubernetes - Adăugați noduri

Acum avem nevoie de comanda “kubeadm join” din inițializarea Kubenetes. Introduc această comandă pe “Server 2” și “Server 3”.

x
+
Terminal

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

Dacă acum introduc din nou comanda “kubectl get nodes” de pe “Server 1”, aceste noduri sunt probabil afișate în starea “Not Ready”. Și aici există problema rețelei pe care a avut-o și maestrul. Rulez din nou comanda de mai înainte, dar de data aceasta adaug un “f” pentru forță.
x
+
Terminal

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

După aceasta, văd toate nodurile gata de utilizare.

Depozit mic de testare (Server 1/Kubenetes-Master)

Scriu eu însumi un mic test de implementare și verific funcțiile. Creez un fișier “nginx.yml” cu următorul conținut:

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

Acum încep depunerea:

x
+
Terminal

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

Grav!

Creez un serviciu și pot apela containerul meu. Am crescut o dată la 20 de “replici”:
x
+
Terminal

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

Vezi:

Curățați departamentul de testare

Pentru a face ordine, șterg din nou depozitul și serviciul.

x
+
Terminal

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

Vezi: