Fork me on GitHub

Herr Knedel/Suurepärased asjad konteineritega: Kubenetes klastri ja NFS-salvestusruumi kasutamine

Created Sun, 20 Jun 2021 00:00:00 +0000 Modified Sat, 01 Oct 2022 10:33:45 +0000 Schwierigkeitsgrad: Sehr sportlich

760 Words

Täna paigaldan uue Kubenetes klastri ja seal on palju teha!

Olen tellinud need komponendid selle jaoks:

Lähme!

Ma olen loonud oma kujutise, mis põhineb Raspian Lite’i paigaldusel. Minu kasutaja/avalik võti on juba salvestatud sellesse kujutisesse ja fail “/boot/config.txt” on kohandatud minu LEDide jaoks.

# 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 - Ketta paigaldamine

Kõigepealt paigaldan NFS-teenuse serverile “Server 1”. Seda salvestusruumi saab hiljem kasutada minu konteinerite klastri jaoks. Ma ühendasin USB-kõvaketta “Server 1” külge ja formatisin selle EXT4-formaadiga järgmiste juhiste abil: https://homecircuits.eu/blog/mount-sata-cubieboard-lubuntu/ Seejärel lõin USB-ketta jaoks mount-punkti:

x
+
Terminal

$ sudo mkdir /media/usb-platte

Olen sisestanud uue failisüsteemi faili “/etc/fstab” järgmiselt:

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

Seadistust saab kontrollida käsuga “sudo mount -a”. Nüüd peaks USB-ketas olema paigaldatud aadressile “/media/usb-disk”.

NFS-i paigaldamine

See pakett on vajalik NFS-i jaoks:

x
+
Terminal

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

Lisaks on USB-kettale loodud uus kaust.

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

Siis tuleb muuta faili “/etc/exports”. Sinna sisestatakse tee, kasutaja ID ja grupi ID:

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

Nüüd saab seadistuse vastu võtta järgmiselt.

x
+
Terminal

$ sudo exportfs -ra

Kuidas ma saan NFS-i paigaldada?

Ma saan mahu paigaldada järgmiselt:

x
+
Terminal

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

Või sisestage püsivalt faili “/etc/fstab”:

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

Ka siin saan ma kasutada “sudo mount -a”.

Paigaldage Kubernetes

Järgmised käsud tuleb täita serverites 1, 2 ja 3. Kõigepealt paigaldame Dockeri ja lisame kasutaja “PI” Dockeri gruppi.

x
+
Terminal

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

Pärast seda nullitakse kõigis serverites swapi suurus. See tähendab, et ma muudan faili “/etc/dphys-swapfile” ja sean atribuudi “CONF_SWAPSIZE” väärtuseks “0”.

Lisaks tuleb kohandada “Control-Group” seaded failis “/boot/cmdline.txt”:

cgroup_enable=cpuset cgroup_enable=memory cgroup_memory=1

Vt:

Nüüd peaksid kõik Raspberrysid kord taaskäivituma ja on seejärel valmis Kubernetese’i paigaldamiseks.

x
+
Terminal

$ sudo reboot

Pärast taaskäivitamist paigaldan need paketid server 1, server 2 ja 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

# Ainult server 1

Nüüd saab Kubenetes master’i initsialiseerida.

x
+
Terminal

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

Pärast edukat initsialiseerimist võtan seaded vastu. Mäletan kuvatud käsku “kubeadm join” tööliste sõlmede ühendamiseks.
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

Nüüd tuleb kahjuks midagi võrgu jaoks ette võtta.
x
+
Terminal

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

Käsu “kubectl get nodes” peaks nüüd näitama “Master” olekus “Ready”.

Kubernetes - sõlmede lisamine

Nüüd vajame käsku “kubeadm join” Kubenetes’i initsialiseerimisest. Ma sisestan selle käsu “Server 2” ja “Server 3”.

x
+
Terminal

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

Kui ma nüüd uuesti sisestan käsu “kubectl get nodes” serverist “Server 1”, kuvatakse need sõlmed tõenäoliselt olekus “Not Ready”. Ka siin on tegemist võrguprobleemiga, mis oli ka kaptenil. Käivitan uuesti eelmise käsu, kuid seekord lisan “f”, mis tähistab force.
x
+
Terminal

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

Pärast seda näen kõik sõlmed kasutamisvalmis.

Väike testdeplyment (Server 1/Kubenetes-Master)

Ma kirjutan endale väikese testrakenduse ja kontrollin funktsioone. Loon faili “nginx.yml” järgmise sisuga:

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

Nüüd ma alustan deplyment:

x
+
Terminal

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

Hästi!

Loon teenuse ja saan oma konteinerit välja kutsuda. Ma skaalun üks kord 20 “replikani”:
x
+
Terminal

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

See:

Puhastada testdeplyment

Korrastamiseks kustutan deplymenti ja teenuse uuesti.

x
+
Terminal

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

See: