Sådan installeres en Kubernetes-klynge på CentOS 8


Processen med at installere en Kubernetes Cluster på CentOS 8 svarer næsten til CentOS 7 (som du kan gennemgå her), men processen her har nogle få ændringer. Disse ændringer drejer sig mest om installationen af Docker.

Fra og med CentOS 8 (og i forlængelse af RHEL 8) er docker nu indfødt erstattet af podman og buildah, som er værktøjer fra Redhat. Som en kendsgerning er dockerpakken nu fjernet fra standardpakkedepotet.

Med dette træk sigter Redhat-teamet mod at forenkle processen med at oprette og bruge containere uden behov for specielle tilladelser, samtidig med at det opretholder kompatibilitet med dockerbilleder og betjener dem uden brug af en dæmon. Podman lover at tilbyde mere fleksibilitet, når de kører i Kubernetes-miljøer, men juryen forbliver derude.

Til denne artikel kører vi processen med at installere Kubernetes på en CentOS 8-platform, der kører på Docker-CE (Community Edition). I en senere artikel løber vi også gennem en lignende installation ved hjælp af podman til vores containere.

  1. Tre servere, der kører CentOS 8 - 1 Master Node og 2 Worker Nodes.
  2. Det anbefales, at dine noder skal have mindst 2 CPU'er med 2 GB RAM eller mere pr. maskine. Dette er ikke et strengt krav, men er stort set drevet af behovene i den applikation, du har til hensigt at køre.
  3. Internetforbindelse på alle dine noder. Vi henter Kubernetes og docker-pakker fra lageret. Ligeledes skal du sørge for, at DNF-pakkehåndtering er installeret som standard og kan hente pakker eksternt.
  4. Alle dine noder skal også kunne oprette forbindelse til hinanden, enten på et privat eller offentligt netværk, alt efter hvad der er tilgængeligt.
  5. Du skal også have adgang til en konto med sudo- eller root-rettigheder. I denne vejledning bruger jeg min rodkonto.

De fleste noder kommer generelt med unikke MAC-adresser, men i nogle unikke tilfælde kan nogle virtuelle maskiner have identiske MAC-adresser. Det anbefales derfor at bekræfte, at Product_UUID og MAC-adressen ikke er identiske i nogen af noderne.

Kubernetes bruger disse værdier til entydigt at identificere knudepunkterne i klyngen. Hvis disse værdier ikke er unikke for hver node, kan installationsprocessen muligvis mislykkes.

For at kontrollere MAC-adressen på netværksgrænsefladen og sammenligne den.

# ip link

For at kontrollere product_uuid og sammenligne skal du køre følgende kommando.

# cat /sys/class/dmi/id/product_uuid 

Vores installation er designet til at have Master-Node, der styrer Worker Nodes. I slutningen af denne installation vil vores logiske arkitektur se sådan ud.

Master Node - Denne maskine fungerer generelt som kontrolplan og kører klyngedatabasen og API-serveren (som kubectl CLI kommunikerer med).

Vores 3-node Kubernetes Cluster vil se sådan ud:

Installation af Kubernetes Cluster på Master-Node

For at Kubernetes skal fungere, skal du bruge en containeriseringsmotor. Som nævnt bruger vi Docker-CE.

Følgende institutioner udføres på CentOS 8 Master-Node.

På din CentOS 8 Master-Node skal du indstille systemværtsnavnet og opdatere DNS i din/etc/hosts-fil.

# 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

Dernæst ping din arbejdsknude-1 og arbejderknudepunkt-2 for at kontrollere, om din opdaterede værtsfil fungerer korrekt ved hjælp af ping-kommandoen.

# ping 192.168.0.48
# ping 192.168.0.49

Deaktiver derefter Selinux, da dette er nødvendigt for at give containere adgang til værtsfilsystemet, hvilket er nødvendigt af pod-netværk og andre tjenester.

# setenforce 0

Indstilling af setenforce til 0 sætter SELinux effektivt til tilladende, hvilket effektivt deaktiverer SELinux indtil næste genstart. For at deaktivere det fuldstændigt skal du bruge nedenstående kommando og genstarte.

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

Kubernetes gør brug af forskellige porte til kommunikation og adgang, og disse porte skal være tilgængelige for Kubernetes og ikke begrænset af firewallen.

Konfigurer firewallreglerne på portene.

# 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

Du bliver nødt til at tilføje Docker-arkivet først, da det ikke længere er i standardpakklisten ved hjælp af følgende dnf config-manager-kommando.

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

Installer også containerd.io-pakke, der er tilgængelig som en dæmon, der administrerer hele værtens livscyklus for container, fra billedoverførsel og -lagring til containerudførelse og -overvågning til lagring på lavt niveau til netværksvedhæftninger og videre.

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

Installer nu den nyeste version af en docker-ce-pakke.

# dnf install docker-ce

Du kan nu aktivere og starte dockertjenesten.

# systemctl enable docker
# systemctl start docker

Derefter skal du tilføje Kubernetes-arkiver manuelt, da de ikke installeres som standard på 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 hjælper dig med at starte en minimal levedygtig Kubernetes-klynge, der overholder bedste praksis. Med kubeadm skal din klynge bestå Kubernetes overensstemmelsestest.

Kubeadm understøtter også andre klynges livscyklusfunktioner, såsom opgraderinger, nedgradering og administration af bootstrap-tokens. Kubeadm er også integrationsvenlig med andre orkestreringsværktøjer som Ansible og Terraform.

Med pakkeudsendelsen nu klar, kan du gå videre og installere kubeadm-pakken.

# dnf install kubeadm -y 

Når installationen er gennemført, skal du aktivere og starte tjenesten.

# systemctl enable kubelet
# systemctl start kubelet

Kubernetes-mesteren, der fungerer som kontrolplan for klyngen, kører et par vigtige tjenester, der er nødvendige for klyngen. Som sådan vil initialiseringsprocessen udføre en række forkontroller for at sikre, at maskinen er klar til at køre Kubernetes. Disse forkontroller udsætter advarsler og afslutter fejl. kubeadm init downloader og installerer derefter klyngekontrolplankomponenterne.

Nu er det tid til at initialisere Kubernetes master, men inden det skal du deaktivere swap for at køre kommandoen "kubeadm init".

# swapoff -a

Initialisering af Kubernetes master er en fuldstændig automatiseret proces, der styres af kommandoen “kubeadm init” som vist.

# kubeadm init

Kopier derefter den følgende kommando og opbevar den et eller andet sted, da vi krævede at køre denne kommando på arbejdernoderne senere.

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

Tip: Nogle gange kan ovenstående kommando muligvis kaste fejl om de argumenter, der er sendt, så for at undgå fejl skal du fjerne tegnet '\' , og din endelige kommando vil se sådan ud.

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

Når Kubernetes er initialiseret med succes, skal du aktivere din bruger at begynde at bruge klyngen. I vores scenario bruger vi rodbrugeren. Du kan også starte klyngen ved hjælp af sudo-bruger som vist.

For at bruge root skal du køre:

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

For at bruge en sudo-aktiveret bruger skal du køre:

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

Bekræft nu, at kubectl-kommandoen er aktiveret.

# kubectl get nodes

I dette øjeblik vil du se status for masternoden er 'NotReady'. Dette skyldes, at vi endnu ikke skal distribuere pod-netværket til klyngen.

Pod-netværket er overlay-netværket for klyngen, der distribueres oven på det nuværende nodenetværk. Det er designet til at muliggøre tilslutning på tværs af pod'en.

Implementering af netværksklyngen er en meget fleksibel proces afhængigt af dine behov, og der er mange muligheder tilgængelige. Da vi ønsker at holde vores installation så enkel som muligt, bruger vi Weavenet-plugin, som ikke kræver nogen konfiguration eller ekstra kode, og det giver en IP-adresse pr. Pod, hvilket er godt for os. Hvis du vil se flere muligheder, skal du tjekke her.

Disse kommandoer er vigtige for at få opsætningen af podnetværket.

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

Hvis du nu kontrollerer status for din masternode, skal den være 'Klar'.

# kubectl get nodes

Dernæst tilføjer vi arbejdsknudepunkter til klyngen.

Tilføjelse af arbejdsknudepunkter til Kubernetes-klyngen

Følgende instruktioner udføres på hver arbejdsknude, når de tilmelder sig Kubernetes-klyngen.

Indstil først værtsnavnet på din medarbejder-node-1 og arbejder-node-2, og tilføj derefter værtsposterne til/etc/hosts-filen.

# 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

Dernæst ping din masternode fra dine medarbejdernoder for at bekræfte, at din opdaterede værtsfil fungerer fint ved hjælp af ping-kommandoen.

# 192.168.0.47

Deaktiver derefter SElinux og opdater dine firewallregler.

# 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

Tilføj Docker-arkivet først ved hjælp af DNF config-manager.

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

Tilføj derefter containerd.io-pakken.

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

Når disse to pakker er installeret, skal du installere den nyeste version af docker-ce.

# dnf install docker-ce

Aktivér og start dockertjenesten.

# systemctl enable docker
# systemctl start docker

Du bliver nødt til at tilføje Kubernetes-arkiver manuelt, da de ikke kommer forudinstalleret på 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

Med pakkeudsendelsen nu klar, kan du gå videre og installere kubeadm.

# dnf install kubeadm -y 

Start og aktiver tjenesten.

# systemctl enable kubelet
# systemctl start kubelet

Vi kræver nu det token, som kubeadm init genererede, for at deltage i klyngen. Du kan kopiere og indsætte det til din node-1 og node-2, hvis du havde kopieret det et eller andet sted.

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

Som foreslået på den sidste linje, skal du gå tilbage til din masternode og kontrollere, om medarbejdernode-1 og medarbejdernode-2 har tilsluttet sig klyngen ved hjælp af følgende kommando.

# kubectl get nodes

Hvis alle trin køres med succes, skal du se node-1 og node-2 i klar status på masternoden. På dette tidspunkt har du nu med succes implementeret en Kubernetes-klynge på CentOS 8.

Anbefalet læsning: Sådan implementeres Nginx på en Kubernetes-klynge

Den klynge, vi har oprettet her, har en enkelt masternode, og som sådan, hvis masternoden mislykkes, mister din klynge muligvis data og skal muligvis genskabes fra bunden.

Af denne grund anbefaler jeg en meget tilgængelig opsætning.