Zoeken op website

Hoe u een Kubernetes-cluster installeert op CentOS 8


Het proces van het installeren van een Kubernetes Cluster op CentOS 8 is vrijwel gelijk aan dat van CentOS 7 (wat u hier kunt doorlopen), maar de proces heeft hier een paar wijzigingen. Deze wijzigingen hebben vooral betrekking op de installatie van Docker.

Vanaf CentOS 8 (en bij uitbreiding RHEL 8) is docker nu standaard vervangen door podman en buildah, dit zijn tools van Redhat. In feite is het docker-pakket nu verwijderd uit de standaard pakketrepository.

Met deze stap wil het Redhat-team het proces van het maken en gebruiken van containers vereenvoudigen, zonder dat speciale machtigingen nodig zijn, terwijl tegelijkertijd de compatibiliteit met docker-images behouden blijft en deze worden gebruikt zonder dat er een daemon nodig is. Podman belooft meer flexibiliteit te bieden bij het draaien in Kubernetes-omgevingen, maar de jury blijft twijfelachtig.

Voor dit artikel doorlopen we het installatieproces van Kubernetes op een CentOS 8-platform, draaiend op Docker-CE (Community Editie). In een later artikel zullen we ook een soortgelijke installatie doorlopen, waarbij we podman gebruiken voor onze containers.

Vereisten

  1. Drie servers met CentOS 8 – 1 Master Node en 2 Worker Nodes.
  2. Het wordt aanbevolen dat uw knooppunten minimaal 2 CPU's hebben met 2 GB RAM of meer per machine. Dit is geen strikte vereiste, maar wordt grotendeels bepaald door de behoeften van de applicatie die u wilt gebruiken.
  3. Internetverbinding op al uw knooppunten. We halen Kubernetes- en docker-pakketten op uit de repository. Op dezelfde manier moet u ervoor zorgen dat de DNF-pakketbeheerder standaard is geïnstalleerd en pakketten op afstand kan ophalen.
  4. Al uw knooppunten moeten ook met elkaar verbinding kunnen maken, hetzij op een particulier of openbaar netwerk, afhankelijk van wat beschikbaar is.
  5. Je hebt ook toegang nodig tot een account met sudo- of root-rechten. In deze tutorial gebruik ik mijn root-account.

Voorzorgsmaatregel

De meeste knooppunten worden doorgaans geleverd met unieke MAC-adressen, maar in sommige unieke gevallen kunnen sommige Virtuele Machines identieke MAC-adressen hebben. Het wordt daarom aanbevolen dat u bevestigt dat het Product_UUID- en het MAC-adres in geen van de knooppunten identiek zijn.

Kubernetes gebruikt deze waarden om de knooppunten in het cluster op unieke wijze te identificeren. Als deze waarden niet uniek zijn voor elk knooppunt, mislukt het installatieproces mogelijk.

Om het MAC-adres van de netwerkinterface te controleren en te vergelijken.

ip link

Voer de volgende opdracht uit om de product_uuid te controleren en te vergelijken.

cat /sys/class/dmi/id/product_uuid 

Logische architectuur

Onze installatie is zo ontworpen dat de Master-Node de Worker Nodes bestuurt. Aan het einde van deze installatie zal onze logische architectuur er ongeveer zo uitzien.

Master Node – Deze machine fungeert over het algemeen als het besturingsvlak en voert de clusterdatabase en de API-server uit (waarmee de kubectl CLI communiceert).

Ons Kubernetes Cluster met 3 knooppunten zal er ongeveer zo uitzien:

Installatie van Kubernetes Cluster op Master-Node

Om Kubernetes te laten werken, heb je een containerisatie-engine nodig. Zoals gezegd zullen we Docker-CE gebruiken.

De volgende instellingen worden uitgevoerd op CentOS 8 Master-Node.

Stap 1: Bereid de hostnaam, firewall en SELinux voor

Stel op uw CentOS 8 Master-Node de systeemhostnaam in en update DNS in uw /etc/hosts-bestand.

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 vervolgens uw worker-node-1 en worker-node-2 om te controleren of uw bijgewerkte hostbestand correct werkt met behulp van de ping-opdracht.

ping 192.168.0.48
ping 192.168.0.49

Schakel vervolgens Selinux uit, omdat dit nodig is om containers toegang te geven tot het hostbestandssysteem, wat nodig is voor pod-netwerken en andere services.

setenforce 0

Het instellen van setenforce op 0 zet SELinux effectief op permissief, wat SELinux effectief uitschakelt tot de volgende herstart. Om het volledig uit te schakelen, gebruikt u de onderstaande opdracht en start u opnieuw op.

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

Kubernetes maakt gebruik van verschillende poorten voor communicatie en toegang en deze poorten moeten toegankelijk zijn voor Kubernetes en niet beperkt worden door de firewall.

Configureer de firewallregels op de poorten.

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

Stap 2: Installeer Docker-CE op CentOS 8

U moet eerst de Docker repository toevoegen, aangezien deze niet langer in de standaard pakketlijst staat, met behulp van de volgende dnf config-manager opdracht.

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

Installeer ook het pakket containerd.io dat beschikbaar is als een daemon die de volledige containerlevenscyclus van het hostsysteem beheert, van beeldoverdracht en opslag tot containeruitvoering en -supervisie tot opslag op laag niveau tot netwerkbijlagen en meer .

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

Installeer nu de nieuwste versie van een docker-ce pakket.

dnf install docker-ce

U kunt nu de docker-service inschakelen en starten.

systemctl enable docker
systemctl start docker

Stap 3: Installeer Kubernetes (Kubeadm) op CentOS 8

Vervolgens moet u Kubernetes-repository's handmatig toevoegen, aangezien deze niet standaard worden geïnstalleerd op 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 helpt u bij het opstarten van een minimaal levensvatbaar Kubernetes-cluster dat voldoet aan de best practices. Met kubeadm zou uw cluster de Kubernetes-conformiteitstests moeten doorstaan.

Kubeadm ondersteunt ook andere clusterlevenscyclusfuncties, zoals upgrades, downgrades en het beheren van bootstrap-tokens. Kubeadm is ook integratievriendelijk met andere orkestratietools zoals Ansible en Terraform.

Nu de pakketopslagplaats gereed is, kunt u doorgaan en het kubeadm pakket installeren.

dnf install kubeadm -y 

Wanneer de installatie succesvol is voltooid, schakelt u de service in en start u deze.

systemctl enable kubelet
systemctl start kubelet

Stap 4: Maak een besturingsvlakmaster met kubeadm

De Kubernetes-master die fungeert als besturingsvlak voor het cluster voert een aantal essentiële services uit die nodig zijn voor het cluster. Als zodanig zal het initialisatieproces een reeks prechecks uitvoeren om ervoor te zorgen dat de machine klaar is om Kubernetes uit te voeren. Deze voorafgaande controles brengen waarschuwingen aan het licht en sluiten af bij fouten. kubeadm init downloadt en installeert vervolgens de componenten van het clusterbesturingsvlak.

Nu is het tijd om Kubernetes master te initialiseren, maar daarvoor moet u swap uitschakelen om de opdracht “kubeadm init“ uit te voeren.

swapoff -a

Het initialiseren van Kubernetes master is een volledig geautomatiseerd proces dat wordt bestuurd door de opdracht “kubeadm init“, zoals weergegeven.

kubeadm init

Kopieer vervolgens de volgende opdracht en sla deze ergens op, omdat we deze opdracht later op de werkknooppunten moesten uitvoeren.

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

Tip: Soms kan het bovenstaande commando fouten opleveren over de doorgegeven argumenten. Om fouten te voorkomen, moet je het teken '\' verwijderen. en je laatste commando zal er als volgt uitzien.

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

Zodra Kubernetes succesvol is geïnitialiseerd, moet u uw gebruiker inschakelen om het cluster te gaan gebruiken. In ons scenario gebruiken we de rootgebruiker. U kunt het cluster ook starten met sudo user, zoals weergegeven.

Om root te gebruiken, voer je het volgende uit:

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

Om een sudo-compatibele gebruiker te gebruiken, voert u het volgende uit:

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

Bevestig nu dat het kubectl-commando is geactiveerd.

kubectl get nodes

Op dit moment ziet u dat de status van het masterknooppunt ‘NotReady’ is. Dit komt omdat we het pod-netwerk nog moeten implementeren in het cluster.

Het pod-netwerk is het overlay-netwerk voor het cluster, dat bovenop het huidige knooppuntnetwerk wordt geplaatst. Het is ontworpen om connectiviteit via de pod mogelijk te maken.

Stap 5: Stel uw Pod-netwerk in

Het implementeren van het netwerkcluster is een zeer flexibel proces, afhankelijk van uw behoeften, en er zijn veel opties beschikbaar. Omdat we onze installatie zo eenvoudig mogelijk willen houden, gebruiken we de Weavenet plug-in die geen configuratie of extra code vereist en die één IP-adres per pod biedt, wat geweldig voor ons is. Als je meer opties wilt zien, kijk dan hier.

Deze opdrachten zijn belangrijk om de pod-netwerkconfiguratie te krijgen.

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

Als u nu de status van uw masternode controleert, zou deze ‘Ready’ moeten zijn.

kubectl get nodes

Vervolgens voegen we de worker-nodes toe aan het cluster.

Worker-knooppunten toevoegen aan het Kubernetes-cluster

De volgende instructies worden uitgevoerd op elk workerknooppunt wanneer u lid wordt van het Kubernetes-cluster.

Stap 1: Bereid de hostnaam, firewall en SELinux voor

Stel eerst de hostnaam in op uw worker-node-1 en worker-node-2, en voeg vervolgens de hostgegevens toe aan /etc/hosts > bestand.

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 vervolgens uw masternode vanaf uw worker-nodes om te bevestigen dat uw bijgewerkte hostbestand goed werkt met behulp van de ping-opdracht.

192.168.0.47

Schakel vervolgens SElinux uit en update uw firewallregels.

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

Stap 2: Docker-CE en Kubernetes Repo instellen

Voeg eerst de Docker-repository toe met behulp van DNF config-manager.

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

Voeg vervolgens het pakket containerd.io toe.

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

Als deze twee pakketten zijn geïnstalleerd, installeert u de nieuwste versie van docker-ce.

dnf install docker-ce

Schakel de docker-service in en start deze.

systemctl enable docker
systemctl start docker

U moet Kubernetes-opslagplaatsen handmatig toevoegen, aangezien deze niet vooraf zijn geïnstalleerd op 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

Stap 3: Installeer Kubeadm op CentOS 8

Nu de pakketopslagplaats gereed is, kunt u doorgaan en kubeadm installeren.

dnf install kubeadm -y 

Start en schakel de service in.

systemctl enable kubelet
systemctl start kubelet

Stap 4: Sluit het Worker-knooppunt aan bij het Kubernetes-cluster

We hebben nu het token nodig dat kubeadm init heeft gegenereerd om lid te worden van het cluster. Je kunt het kopiëren en plakken naar je node-1 en node-2 als je het ergens had gekopieerd.

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

Zoals voorgesteld op de laatste regel, ga terug naar je master-node en verifieer of worker node-1 en worker node-2 zich bij de cluster met behulp van de volgende opdracht.

kubectl get nodes

Als alle stappen succesvol zijn uitgevoerd, zou je node-1 en node-2 in de status Gereed moeten zien op de master-node. Op dit punt heeft u nu met succes een Kubernetes-cluster geïmplementeerd op CentOS 8.

Aanbevolen literatuur: Nginx implementeren op een Kubernetes-cluster

Enkele beperkingen

Het cluster dat we hier hebben gemaakt, heeft één Master-knooppunt. Als het Master-knooppunt faalt, kan het zijn dat uw cluster gegevens kwijtraakt en mogelijk helemaal opnieuw moet worden gemaakt.

Om deze reden raad ik een configuratie met hoge beschikbaarheid aan.