Πώς να εγκαταστήσετε ένα σύμπλεγμα Kubernetes στο CentOS 8


Η διαδικασία εγκατάστασης ενός Cluster Kubernetes στο CentOS 8 είναι σχεδόν παρόμοια με αυτή του CentOS 7 (το οποίο μπορείτε να δείτε εδώ), αλλά η διαδικασία εδώ έχει μερικές αλλαγές. Αυτές οι αλλαγές περιστρέφονται κυρίως γύρω από την εγκατάσταση του Docker.

Ξεκινώντας από το CentOS 8 (και κατ' επέκταση RHEL 8), το docker έχει πλέον αντικατασταθεί εγγενώς από podman και buildah που είναι εργαλεία από το Redhat. Στην πραγματικότητα, το πακέτο docker έχει πλέον αφαιρεθεί από τον προεπιλεγμένο χώρο αποθήκευσης πακέτων.

Με αυτή την κίνηση, η ομάδα Redhat στοχεύει να απλοποιήσει τη διαδικασία δημιουργίας και χρήσης κοντέινερ, χωρίς να χρειάζονται ειδικές άδειες, ενώ ταυτόχρονα διατηρεί συμβατότητα με εικόνες docker και λειτουργεί χωρίς να χρειάζεται δαίμονας. Το Podman υπόσχεται να προσφέρει μεγαλύτερη ευελιξία όταν τρέχει σε περιβάλλοντα Kubernetes, αλλά η κριτική επιτροπή παραμένει εκεί έξω.

Για αυτό το άρθρο, θα εκτελέσουμε τη διαδικασία εγκατάστασης του Kubernetes σε μια πλατφόρμα CentOS 8, που εκτελείται σε Docker-CE (Κοινότητα Έκδοση). Σε επόμενο άρθρο, θα εκτελέσουμε επίσης μια παρόμοια εγκατάσταση, χρησιμοποιώντας το podman για τα κοντέινερ μας.

Προαπαιτούμενα

  1. Τρεις διακομιστές που εκτελούν CentOS 8 – 1 κύριος κόμβος και 2 κόμβοι εργασίας.
  2. Συνιστάται οι κόμβοι σας να έχουν τουλάχιστον 2 CPU με 2 GB RAM ή περισσότερο ανά μηχάνημα. Αυτό δεν είναι αυστηρή απαίτηση, αλλά οφείλεται σε μεγάλο βαθμό στις ανάγκες της εφαρμογής που σκοπεύετε να εκτελέσετε.
  3. Συνδεσιμότητα στο Διαδίκτυο σε όλους τους κόμβους σας. Θα λάβουμε πακέτα Kubernetes και docker από το αποθετήριο. Ομοίως, θα πρέπει να βεβαιωθείτε ότι ο διαχειριστής πακέτων DNF είναι εγκατεστημένος από προεπιλογή και ότι μπορεί να ανακτήσει πακέτα από απόσταση.
  4. Όλοι οι κόμβοι σας θα πρέπει επίσης να μπορούν να συνδέονται μεταξύ τους, είτε σε ιδιωτικό είτε σε δημόσιο δίκτυο, όποιο από τα δύο είναι διαθέσιμο.
  5. Θα χρειαστείτε επίσης πρόσβαση σε έναν λογαριασμό με δικαιώματα sudo ή root. Σε αυτό το σεμινάριο, θα χρησιμοποιήσω τον root λογαριασμό μου.

Προφύλαξη

Οι περισσότεροι κόμβοι έρχονται γενικά με μοναδικές διευθύνσεις MAC, ωστόσο, σε ορισμένες μοναδικές περιπτώσεις, ορισμένες Εικονικές μηχανές μπορεί να έχουν πανομοιότυπες διευθύνσεις MAC. Επομένως, συνιστάται να επιβεβαιώσετε ότι η διεύθυνση Product_UUID και η διεύθυνση MAC δεν είναι πανομοιότυπες σε κανέναν από τους κόμβους.

Το Kubernetes χρησιμοποιεί αυτές τις τιμές για να προσδιορίσει μοναδικά τους κόμβους στο σύμπλεγμα. Εάν αυτές οι τιμές δεν είναι μοναδικές για κάθε κόμβο, η διαδικασία εγκατάστασης μπορεί να αποτύχει.

Για να ελέγξετε τη διεύθυνση MAC της διεπαφής δικτύου και να τη συγκρίνετε.

ip link

Για να ελέγξετε το product_uuid και να συγκρίνετε, εκτελέστε την ακόλουθη εντολή.

cat /sys/class/dmi/id/product_uuid 

Λογική Αρχιτεκτονική

Η εγκατάστασή μας έχει σχεδιαστεί έτσι ώστε ο Master-Node να ελέγχει τους Worker Nodes. Στο τέλος αυτής της εγκατάστασης, η λογική αρχιτεκτονική μας θα μοιάζει κάπως έτσι.

Κύριος κόμβος – Αυτό το μηχάνημα γενικά λειτουργεί ως το επίπεδο ελέγχου και εκτελεί τη βάση δεδομένων συμπλέγματος και τον διακομιστή API (με τον οποίο επικοινωνεί το kubectl CLI).

Το Cluster Kubernetes με 3 κόμβους θα μοιάζει κάπως έτσι:

Εγκατάσταση του συμπλέγματος Kubernetes στο Master-Node

Για να λειτουργήσει το Kubernetes, θα χρειαστείτε έναν κινητήρα κοντέινερ. Όπως αναφέρθηκε, θα χρησιμοποιήσουμε το Docker-CE.

Τα ακόλουθα ιδρύματα θα εκτελεστούν στο CentOS 8 Master-Node.

Βήμα 1: Προετοιμάστε το όνομα κεντρικού υπολογιστή, το τείχος προστασίας και το SELinux

Στον CentOS 8 Master-Node σας, ορίστε το όνομα κεντρικού υπολογιστή συστήματος και ενημερώστε το DNS στο αρχείο σας /etc/hosts.

hostnamectl set-hostname master-node
cat <<EOF>> /etc/hosts
192.168.0.47 master-node
192.168.0.48 node-1 worker-node-1
192.168.0.49 node-2 worker-node-2
EOF

Στη συνέχεια, πραγματοποιήστε ping στο worker-node-1 και στο worker-node-2 για να ελέγξετε εάν το ενημερωμένο αρχείο κεντρικού υπολογιστή σας λειτουργεί σωστά χρησιμοποιώντας την εντολή ping.

ping 192.168.0.48
ping 192.168.0.49

Στη συνέχεια, απενεργοποιήστε το Selinux, καθώς αυτό απαιτείται για να επιτρέπεται στα κοντέινερ να έχουν πρόσβαση στο σύστημα αρχείων του κεντρικού υπολογιστή, το οποίο απαιτείται από δίκτυα pod και άλλες υπηρεσίες.

setenforce 0

Η ρύθμιση του setenforce σε 0 ουσιαστικά ορίζει το SELinux σε επιτρεπτό, το οποίο ουσιαστικά απενεργοποιεί το SELinux μέχρι την επόμενη επανεκκίνηση. Για να το απενεργοποιήσετε εντελώς, χρησιμοποιήστε την παρακάτω εντολή και επανεκκινήστε.

sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
reboot

Το Kubernetes χρησιμοποιεί διάφορες θύρες για επικοινωνία και πρόσβαση και αυτές οι θύρες πρέπει να είναι προσβάσιμες στο Kubernetes και να μην περιορίζονται από το τείχος προστασίας.

Διαμορφώστε τους κανόνες του τείχους προστασίας στις θύρες.

firewall-cmd --permanent --add-port=6443/tcp
firewall-cmd --permanent --add-port=2379-2380/tcp
firewall-cmd --permanent --add-port=10250/tcp
firewall-cmd --permanent --add-port=10251/tcp
firewall-cmd --permanent --add-port=10252/tcp
firewall-cmd --permanent --add-port=10255/tcp
firewall-cmd --reload
modprobe br_netfilter
echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables

Βήμα 2: Εγκαταστήστε το Docker-CE στο CentOS 8

Θα χρειαστεί να προσθέσετε πρώτα το αποθετήριο Docker καθώς δεν βρίσκεται πλέον στη λίστα προεπιλεγμένων πακέτων χρησιμοποιώντας την ακόλουθη εντολή dnf config-manager.

dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo

Εγκαταστήστε επίσης το πακέτο containerd.io το οποίο είναι διαθέσιμο ως δαίμονας που διαχειρίζεται τον πλήρη κύκλο ζωής του κοντέινερ του συστήματος κεντρικού υπολογιστή του, από μεταφορά και αποθήκευση εικόνας έως εκτέλεση και επίβλεψη κοντέινερ έως αποθήκευση χαμηλού επιπέδου έως συνημμένα δικτύου και άλλα .

dnf install https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm

Τώρα εγκαταστήστε την πιο πρόσφατη έκδοση ενός πακέτου docker-ce.

dnf install docker-ce

Τώρα μπορείτε να ενεργοποιήσετε και να ξεκινήσετε την υπηρεσία docker.

systemctl enable docker
systemctl start docker

Βήμα 3: Εγκαταστήστε το Kubernetes (Kubeadm) στο CentOS 8

Στη συνέχεια, θα χρειαστεί να προσθέσετε χειροκίνητα αποθετήρια Kubernetes καθώς δεν είναι εγκατεστημένα από προεπιλογή στο CentOS 8.

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF

Το Kubeadm σάς βοηθά να εκκινήσετε ένα ελάχιστο βιώσιμο σύμπλεγμα Kubernetes που συμμορφώνεται με τις βέλτιστες πρακτικές. Με το kubeadm, το σύμπλεγμα σας θα πρέπει να περάσει τις δοκιμές συμμόρφωσης Kubernetes.

Το Kubeadm υποστηρίζει επίσης άλλες λειτουργίες κύκλου ζωής συμπλέγματος, όπως αναβαθμίσεις, υποβάθμιση και διαχείριση κουπονιών εκκίνησης. Το Kubeadm είναι επίσης φιλικό προς την ενσωμάτωση με άλλα εργαλεία ενορχήστρωσης όπως το Ansible και το Terraform.

Με το αποθετήριο πακέτων τώρα έτοιμο, μπορείτε να προχωρήσετε και να εγκαταστήσετε το πακέτο kubeadm.

dnf install kubeadm -y 

Όταν η εγκατάσταση ολοκληρωθεί με επιτυχία, ενεργοποιήστε και ξεκινήστε την υπηρεσία.

systemctl enable kubelet
systemctl start kubelet

Βήμα 4: Δημιουργήστε ένα Master Plane Control με το kubeadm

Το κύριο Kubernetes που λειτουργεί ως επίπεδο ελέγχου για το σύμπλεγμα εκτελεί μερικές κρίσιμες υπηρεσίες που είναι απαραίτητες για το σύμπλεγμα. Ως εκ τούτου, η διαδικασία προετοιμασίας θα κάνει μια σειρά προελέγχων για να διασφαλίσει ότι το μηχάνημα είναι έτοιμο να εκτελέσει το Kubernetes. Αυτοί οι προέλεγχοι εκθέτουν προειδοποιήσεις και εξέρχονται από σφάλματα. Το kubeadm init κατεβάζει και εγκαθιστά τα στοιχεία του επιπέδου ελέγχου συμπλέγματος.

Τώρα είναι ώρα να αρχικοποιήσετε το κύριο Kubernetes, αλλά πριν από αυτό, πρέπει να απενεργοποιήσετε την εναλλαγή για να εκτελέσετε την εντολή "kubeadm init".

swapoff -a

Η εκκίνηση του Kubernetes master είναι μια πλήρως αυτοματοποιημένη διαδικασία που ελέγχεται από την εντολή "kubeadm init", όπως φαίνεται.

kubeadm init

Στη συνέχεια, αντιγράψτε την ακόλουθη εντολή και αποθηκεύστε την κάπου, καθώς έπρεπε να εκτελέσουμε αυτήν την εντολή στους κόμβους εργαζομένων αργότερα.

kubeadm join 192.168.0.47:6443 --token nu06lu.xrsux0ss0ixtnms5  \ --discovery-token-ca-cert-hash ha256:f996ea35r4353d342fdea2997a1cf8caeddafd6d4360d606dbc82314683478hjmf7

Συμβουλή: Μερικές φορές η παραπάνω εντολή μπορεί να προκαλέσει σφάλματα σχετικά με τα ορίσματα που έχουν περάσει, επομένως για να αποφύγετε σφάλματα, πρέπει να αφαιρέσετε τον χαρακτήρα '\' και η τελική εντολή σας θα μοιάζει με αυτό.

kubeadm join 192.168.0.47:6443 --token nu06lu.xrsux0ss0ixtnms5 –discovery token-ca-cert-hash sha256:f996ea35r4353d342fdea2997a1cf8caeddafd6d4360d606dbc82314683478hjmf7

Μόλις αρχικοποιηθεί με επιτυχία το Kubernetes, πρέπει να επιτρέψετε στον χρήστη σας να αρχίσει να χρησιμοποιεί το σύμπλεγμα. Στο σενάριό μας, θα χρησιμοποιήσουμε τον χρήστη root. Μπορείτε επίσης να ξεκινήσετε το σύμπλεγμα χρησιμοποιώντας sudo user όπως φαίνεται.

Για να χρησιμοποιήσετε το root, εκτελέστε:

mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

Για να χρησιμοποιήσετε έναν χρήστη με δυνατότητα sudo, εκτελέστε:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

Τώρα επιβεβαιώστε ότι η εντολή kubectl είναι ενεργοποιημένη.

kubectl get nodes

Αυτή τη στιγμή, θα δείτε ότι η κατάσταση του κύριου κόμβου είναι "NotReady". Αυτό συμβαίνει επειδή δεν έχουμε ακόμη αναπτύξει το δίκτυο pod στο σύμπλεγμα.

Το δίκτυο pod είναι το δίκτυο επικάλυψης για το σύμπλεγμα, το οποίο αναπτύσσεται πάνω από το τρέχον δίκτυο κόμβων. Έχει σχεδιαστεί για να επιτρέπει τη συνδεσιμότητα σε όλο το pod.

Βήμα 5: Ρυθμίστε το δίκτυο pod σας

Η ανάπτυξη του συμπλέγματος δικτύου είναι μια εξαιρετικά ευέλικτη διαδικασία ανάλογα με τις ανάγκες σας και υπάρχουν πολλές διαθέσιμες επιλογές. Εφόσον θέλουμε να διατηρήσουμε την εγκατάστασή μας όσο το δυνατόν πιο απλή, θα χρησιμοποιήσουμε την προσθήκη Weavenet η οποία δεν απαιτεί καμία ρύθμιση παραμέτρων ή επιπλέον κώδικα και παρέχει μία διεύθυνση IP ανά ομάδα, η οποία είναι εξαιρετική για εμάς. Εάν θέλετε να δείτε περισσότερες επιλογές, ελέγξτε εδώ.

Αυτές οι εντολές θα είναι σημαντικές για τη ρύθμιση του δικτύου pod.

export kubever=$(kubectl version | base64 | tr -d '\n')
kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$kubever"

Τώρα, εάν ελέγξετε την κατάσταση του κύριου κόμβου σας, θα πρέπει να είναι "Έτοιμος".

kubectl get nodes

Στη συνέχεια, προσθέτουμε τους κόμβους εργασίας στο σύμπλεγμα.

Προσθήκη κόμβων εργαζομένων στο σύμπλεγμα Kubernetes

Οι παρακάτω οδηγίες θα εκτελεστούν σε κάθε κόμβο εργασίας κατά την ένταξη στο σύμπλεγμα Kubernetes.

Βήμα 1: Προετοιμάστε το όνομα κεντρικού υπολογιστή, το τείχος προστασίας και το SELinux

Πρώτα ορίστε το όνομα κεντρικού υπολογιστή στο worker-node-1 και στο worker-node-2 και, στη συνέχεια, προσθέστε τις καταχωρήσεις κεντρικού υπολογιστή στο /etc/hosts αρχείο.

hostnamectl set-hostname 'node-1'
cat <<EOF>> /etc/hosts
192.168.0.47 master-node
192.168.0.48 node-1 worker-node-1
192.168.0.49 node-2 worker-node-2
EOF

Στη συνέχεια, πραγματοποιήστε ping στον κύριο κόμβο από τους εργαζόμενους κόμβους για να επιβεβαιώσετε ότι το ενημερωμένο αρχείο κεντρικού υπολογιστή σας λειτουργεί σωστά χρησιμοποιώντας την εντολή ping.

192.168.0.47

Στη συνέχεια, απενεργοποιήστε το SElinux και ενημερώστε τους κανόνες του τείχους προστασίας σας.

setenforce 0
sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
firewall-cmd --permanent --add-port=6783/tcp
firewall-cmd --permanent --add-port=10250/tcp
firewall-cmd --permanent --add-port=10255/tcp
firewall-cmd --permanent --add-port=30000-32767/tcp
firewall-cmd --reload
echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables

Βήμα 2: Ρυθμίστε το Docker-CE και το Kubernetes Repo

Προσθέστε πρώτα το αποθετήριο Docker χρησιμοποιώντας το DNF config-manager.

dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo

Στη συνέχεια, προσθέστε το πακέτο containerd.io.

dnf install https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm

Με αυτά τα δύο πακέτα εγκατεστημένα, εγκαταστήστε την πιο πρόσφατη έκδοση του docker-ce.

dnf install docker-ce

Ενεργοποιήστε και ξεκινήστε την υπηρεσία docker.

systemctl enable docker
systemctl start docker

Θα χρειαστεί να προσθέσετε τα αποθετήρια Kubernetes με μη αυτόματο τρόπο, καθώς δεν είναι προεγκατεστημένα στο CentOS 8.

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF

Βήμα 3: Εγκαταστήστε το Kubeadm στο CentOS 8

Με το αποθετήριο πακέτων τώρα έτοιμο, μπορείτε να προχωρήσετε και να εγκαταστήσετε το kubeadm.

dnf install kubeadm -y 

Ξεκινήστε και ενεργοποιήστε την υπηρεσία.

systemctl enable kubelet
systemctl start kubelet

Βήμα 4: Συνδέστε τον Κόμβο Εργαζόμενου στο σύμπλεγμα Kubernetes

Τώρα απαιτούμε το διακριτικό που δημιούργησε το kubeadm init για να ενταχθεί στο σύμπλεγμα. Μπορείτε να το αντιγράψετε και να το επικολλήσετε στον node-1 και τον node-2, αν τον είχατε αντιγράψει κάπου.

kubeadm join 192.168.0.47:6443 --token nu06lu.xrsux0ss0ixtnms5  --discovery-token-ca-cert-hash sha256:f996ea35r4353d342fdea2997a1cf8caeddafd6d4360d606dbc82314683478hjmf78

Όπως προτείνεται στην τελευταία γραμμή, επιστρέψτε στον κύριο κόμβο και επαληθεύστε εάν ο εργαζόμενος node-1 και ο worker node-2 έχουν ενταχθεί στο σύμπλεγμα χρησιμοποιώντας την ακόλουθη εντολή.

kubectl get nodes

Εάν όλα τα βήματα εκτελούνται με επιτυχία, τότε, θα πρέπει να δείτε τα node-1 και node-2 σε κατάσταση ετοιμότητας στον master-node. Σε αυτό το σημείο, έχετε πλέον αναπτύξει με επιτυχία ένα σύμπλεγμα Kubernetes στο CentOS 8.

Συνιστώμενη ανάγνωση: Πώς να αναπτύξετε το Nginx σε ένα σύμπλεγμα Kubernetes

Μερικοί Περιορισμοί

Το σύμπλεγμα που δημιουργήσαμε εδώ έχει έναν μόνο Κύριο κόμβο και ως εκ τούτου, εάν ο Κύριος κόμβος αποτύχει, το σύμπλεγμα ενδέχεται να χάσει δεδομένα και να χρειαστεί να δημιουργηθεί εκ νέου από την αρχή.

Για αυτόν τον λόγο, προτείνω μια ρύθμιση με υψηλή διαθεσιμότητα.