Fork me on GitHub

Herr Knedel/Μεγάλα πράγματα με κοντέινερ: συστάδα Kubenetes και αποθήκευση NFS

Created Sun, 20 Jun 2021 00:00:00 +0000 Modified Tue, 29 Mar 2022 17:18:05 +0000 Schwierigkeitsgrad: Sehr sportlich

892 Words

Σήμερα εγκαθιστώ ένα νέο σύμπλεγμα Kubenetes και έχω πολλά να κάνω!

Έχω παραγγείλει αυτά τα εξαρτήματα:

Πάμε!

Έχω δημιουργήσει τη δική μου εικόνα για την εγκατάσταση με βάση την εγκατάσταση Raspian Lite. Το χρήστης/δημόσιο κλειδί μου είναι ήδη αποθηκευμένο σε αυτή την εικόνα και το αρχείο “/boot/config.txt” έχει προσαρμοστεί για τα 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

Διακομιστής 1 - Τοποθέτηση δίσκου

Πρώτον, εγκαθιστώ μια υπηρεσία NFS στον “Server 1”. Αυτός ο αποθηκευτικός χώρος μπορεί να χρησιμοποιηθεί αργότερα για τη συστάδα εμπορευματοκιβωτίων μου. Σύνδεσα τον σκληρό δίσκο USB στον “Server 1” και τον μορφοποίησα EXT4 με τη βοήθεια αυτών των οδηγιών: https://homecircuits.eu/blog/mount-sata-cubieboard-lubuntu/ Στη συνέχεια δημιούργησα ένα σημείο προσάρτησης για το δίσκο USB:

x
+
Terminal

$ sudo mkdir /media/usb-platte

Έχω εισάγει το νέο σύστημα αρχείων στο αρχείο “/etc/fstab” ως εξής:

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

Η ρύθμιση μπορεί να ελεγχθεί με την εντολή “sudo mount -a”. Τώρα ο δίσκος USB θα πρέπει να είναι προσαρτημένος στο “/media/usb-disk”.

Εγκατάσταση NFS

Αυτό το πακέτο απαιτείται για το NFS:

x
+
Terminal

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

Επιπλέον, έχει δημιουργηθεί ένας νέος φάκελος στο δίσκο 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 {} \;

Τότε πρέπει να επεξεργαστείτε το αρχείο “/etc/exports”. Εκεί εισάγονται η διαδρομή, το αναγνωριστικό χρήστη και το αναγνωριστικό ομάδας:

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

Τώρα η ρύθμιση μπορεί να υιοθετηθεί ως εξής.

x
+
Terminal

$ sudo exportfs -ra

Πώς μπορώ να προσαρτήσω το NFS;

Μπορώ να προσαρτήσω τον τόμο ως εξής:

x
+
Terminal

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

Ή εισάγετε μόνιμα στο αρχείο “/etc/fstab”:

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

Και εδώ μπορώ να χρησιμοποιήσω το “sudo mount -a”.

Εγκαταστήστε το Kubernetes

Οι ακόλουθες εντολές πρέπει να εκτελεστούν στους διακομιστές 1, 2 και 3. Πρώτα εγκαθιστούμε το Docker και προσθέτουμε τον χρήστη “PI” στην ομάδα Docker.

x
+
Terminal

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

Μετά από αυτό, η ρύθμιση μεγέθους swap μηδενίζεται σε όλους τους διακομιστές. Αυτό σημαίνει ότι επεξεργάζομαι το αρχείο “/etc/dphys-swapfile” και ορίζω το χαρακτηριστικό “CONF_SWAPSIZE” σε “0”.

Επιπλέον, πρέπει να προσαρμοστούν οι ρυθμίσεις “Control-Group” στο αρχείο “/boot/cmdline.txt”:

cgroup_enable=cpuset cgroup_enable=memory cgroup_memory=1

Βλέπε:

Τώρα όλα τα Raspberrys θα πρέπει να επανεκκινήσουν μία φορά και είναι έτοιμα για την εγκατάσταση του Kubernetes.

x
+
Terminal

$ sudo reboot

Μετά την επανεκκίνηση, εγκαθιστώ αυτά τα πακέτα στους διακομιστές 1, 2 και 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

# Μόνο ο διακομιστής 1

Τώρα ο Kubenetes master μπορεί να αρχικοποιηθεί.

x
+
Terminal

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

Μετά την επιτυχή αρχικοποίηση, αποδέχομαι τις ρυθμίσεις. Θυμάμαι την εμφανιζόμενη εντολή “kubeadm join” για τη σύνδεση των κόμβων εργασίας.
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

Τώρα, δυστυχώς, κάτι πρέπει να γίνει για το δίκτυο.
x
+
Terminal

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

Η εντολή “kubectl get nodes” θα πρέπει τώρα να εμφανίζει τον “Master” σε κατάσταση “Ready”.

Kubernetes - Προσθήκη κόμβων

Τώρα χρειαζόμαστε την εντολή “kubeadm join” από την αρχικοποίηση του Kubenetes. Εισάγω αυτή την εντολή στον “Server 2” και στον “Server 3”.

x
+
Terminal

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

Αν τώρα εισαγάγω ξανά την εντολή “kubectl get nodes” από τον “Server 1”, αυτοί οι κόμβοι εμφανίζονται πιθανώς στην κατάσταση “Not Ready”. Και εδώ, επίσης, υπάρχει το πρόβλημα του δικτύου που είχε και ο πλοίαρχος. Εκτελώ ξανά την εντολή από πριν, αλλά αυτή τη φορά προσθέτω ένα “f” για force.
x
+
Terminal

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

Μετά από αυτό, βλέπω όλους τους κόμβους έτοιμους για χρήση.

Μικρή δοκιμαστική εγκατάσταση (Διακομιστής 1/Kubenetes-Master)

Γράφω μια μικρή δοκιμαστική ανάπτυξη και ελέγχω τις λειτουργίες. Δημιουργώ ένα αρχείο “nginx.yml” με το ακόλουθο περιεχόμενο:

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

Τώρα αρχίζω την εξάρτηση:

x
+
Terminal

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

Καλά!

Δημιουργώ μια υπηρεσία και μπορώ να καλέσω το δοχείο μου. Ανεβάζω την κλίμακα μία φορά σε 20 “αντίγραφα”:
x
+
Terminal

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

Βλέπε:

Εκκαθάριση του test deplyment

Για να συμμαζέψω, διαγράφω ξανά το deplyment και την υπηρεσία.

x
+
Terminal

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

Βλέπε: