Fork me on GitHub

Herr Knedel/Velike stvari z zabojniki: Kubenetesova gruča in shranjevanje NFS

Created Sun, 20 Jun 2021 00:00:00 +0000 Modified Sat, 02 Apr 2022 16:26:07 +0000 Stopnja težavnosti: Zelo športno

822 Words

Danes nameščam novo gručo Kubenetes in veliko je treba postoriti!

Naročil sem te komponente zanj:

Gremo!

Ustvaril sem lastno sliko za namestitev, ki temelji na namestitvi Raspian Lite. Moj uporabniški/javni ključ je že shranjen v tej sliki, datoteka “/boot/config.txt” pa je bila prilagojena za moje diode 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

Strežnik 1 - Namestitev diska

Najprej v strežnik 1 namestim storitev NFS. To skladišče lahko pozneje uporabim za svojo gručo vsebnikov. Trdi disk USB sem priključil na “strežnik 1” in ga formatiral EXT4 s pomočjo teh navodil: https://homecircuits.eu/blog/mount-sata-cubieboard-lubuntu/ Nato sem ustvaril priključno točko za disk USB:

x
+
Terminal

$ sudo mkdir /media/usb-platte

V datoteko “/etc/fstab” sem vnesel nov datotečni sistem, kot sledi:

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

Nastavitev lahko preverite s “sudo mount -a”. Sedaj mora biti disk USB nameščen pod “/media/usb-disk”.

Namestitev sistema NFS

Ta paket je potreben za sistem NFS:

x
+
Terminal

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

Poleg tega je bila na disku USB ustvarjena nova mapa

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

Potem je treba urediti datoteko “/etc/exports”. Vnesite pot, ID uporabnika in ID skupine:

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

Nadal lahko nastavitev sprejmete na naslednji način.

x
+
Terminal

$ sudo exportfs -ra

Kako lahko namestim sistem NFS?

Zvezek lahko namestim na naslednji način:

x
+
Terminal

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

Ali vnesite trajno v datoteko “/etc/fstab”:

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

Tudi tu lahko uporabim “sudo mount -a”.

Namestitev sistema Kubernetes

Naslednje ukaze je treba izvesti v strežniku 1, strežniku 2 in strežniku 3. Najprej namestimo Docker in uporabnika PI dodamo v skupino Docker.

x
+
Terminal

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

Po tem se nastavitev velikosti izmenjevalnika v vseh strežnikih izniči. To pomeni, da uredim datoteko “/etc/dphys-swapfile” in nastavim atribut “CONF_SWAPSIZE” na “0”.

Poleg tega je treba prilagoditi nastavitve “Control-Group” v datoteki “/boot/cmdline.txt”:

cgroup_enable=cpuset cgroup_enable=memory cgroup_memory=1

Oglejte si:

Tudi se morajo vse maline enkrat znova zagnati in so pripravljene za namestitev Kubernetesa.

x
+
Terminal

$ sudo reboot

Po ponovnem zagonu namestim te pakete v strežnik 1, strežnik 2 in strežnik 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

# Samo strežnik 1

Zdaj lahko inicializirate glavni strežnik Kubenetes.

x
+
Terminal

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

Po uspešni inicializaciji sprejmem nastavitve. Spomnim se prikazanega ukaza “kubeadm join” za povezovanje delovnih vozlišč.
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

Žal je zdaj treba nekaj storiti za omrežje.
x
+
Terminal

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

Ukaz “kubectl get nodes” mora zdaj prikazati “Master” v stanju “Ready”.

Kubernetes - Dodajanje vozlišč

Zdaj potrebujemo ukaz “kubeadm join” iz inicializacije Kubenetesa. Ta ukaz vnesem v strežnik 2 in strežnik 3.

x
+
Terminal

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

Če zdaj ponovno vnesem ukaz “kubectl get nodes” iz strežnika 1, se ta vozlišča verjetno prikažejo v stanju “Not Ready”. Tudi tu se pojavi težava z omrežjem, ki jo je imel tudi mojster. Ponovno zaženem prejšnji ukaz, vendar tokrat dodam črko “f” za force.
x
+
Terminal

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

Po tem so vsa vozlišča pripravljena za uporabo.

Majhen testni del (strežnik 1/Kubenetes-Master)

Sam napišem majhno testno namestitev in preverim funkcije. Ustvarim datoteko “nginx.yml” z naslednjo vsebino:

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

Sedaj začnem z depiliranjem:

x
+
Terminal

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

Veliko!

Ustvarim storitev in lahko prikličem svoj vsebnik. Enkrat povečam na 20 “replik”:
x
+
Terminal

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

Glejte:

Očistite testno deplimentacijo

Za pospravljanje znova izbrišem nadomestilo in storitev.

x
+
Terminal

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

Glejte: