Wéi installéiere ech e Kubernetes Cluster op CentOS 8


De Prozess fir e Kubernetes Cluster op CentOS 8 z'installéieren ass bal ähnlech wéi dee vum CentOS 7 (wat Dir hei duerchgoe kënnt), awer de Prozess hei huet e puer Ännerungen. Dës Ännerungen dréien meeschtens ëm d'Installatioun vum Docker.

Vun CentOS 8 un (an duerch Verlängerung RHEL 8), Docker ass elo natiirlech duerch Podman a buildah ersat ginn, déi Tools vu Redhat sinn. Tatsächlech ass den Docker Package elo aus dem Standard Package Repository geläscht ginn.

Mat dëser Beweegung zielt d'Redhat-Team de Prozess fir d'Erstelle an d'Benotzung vu Container ze vereinfachen, ouni speziell Permissiounen ze brauchen, a gläichzäiteg d'Kompatibilitéit mat Docker-Biller erhalen an se bedreiwen ouni en Daemon ze brauchen. Podman versprécht méi Flexibilitéit ze bidden wann Dir op Kubernetes Ëmfeld leeft, awer d'Jury bleift dobaussen.

Fir dësen Artikel lafen mir duerch de Prozess fir Kubernetes op enger CentOS 8 Plattform z'installéieren, lafen op Docker-CE (Community Edition). An engem spéideren Artikel wäerte mir och duerch eng ähnlech Installatioun lafen, mat Podman fir eis Container.

  1. Dräi Server lafen CentOS 8 – 1 Master Node an 2 Worker Nodes.
  2. Et ass recommandéiert datt Är Node mindestens 2 CPUs mat 2GB RAM oder méi pro Maschinn hunn. Dëst ass net eng strikt Fuerderung, awer ass haaptsächlech vun de Bedierfnesser vun der Applikatioun gedriwwen déi Dir wëllt lafen.
  3. Internetverbindung op all Ären Noden. Mir sichen Kubernetes an Docker Packagen aus dem Repository. Gläichzäiteg musst Dir sécher sinn datt den DNF Package Manager als Standard installéiert ass a Pakete vu wäitem erofhuelen kann.
  4. All Är Node sollen och fäeg sinn mateneen ze verbannen, entweder op engem privaten oder ëffentlechen Netzwierk, wat och ëmmer verfügbar ass.
  5. Dir braucht och Zougang zu engem Kont mat sudo oder root Privilegien. An dësem Tutorial wäert ech mäi Root Kont benotzen.

Déi meescht Node kommen allgemeng mat eenzegaartege MAC Adressen, awer an e puer eenzegaartege Fäll kënnen e puer virtuell Maschinnen identesch MAC Adressen hunn. Et ass dofir recommandéiert datt Dir bestätegen datt de Product_UUID an d'MAC Adress net an engem vun den Noden identesch sinn.

Kubernetes benotzt dës Wäerter fir d'Noden am Stärekoup eenzegaarteg z'identifizéieren. Wann dës Wäerter net eenzegaarteg fir all Node sinn, kann den Installatiounsprozess versoen.

Fir d'MAC Adress vum Netz-Interface ze kontrolléieren an ze vergläichen.

# ip link

Fir de product_uuid z'iwwerpréiwen an ze vergläichen, fuert de folgende Kommando.

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

Eis Installatioun ass entwéckelt fir de Master-Node ze hunn déi d'Aarbechternoden kontrolléiert. Um Enn vun dëser Installatioun wäert eis logesch Architektur esou ausgesinn.

Master Node - Dës Maschinn wierkt allgemeng als Kontrollebene a leeft d'Cluster Datebank an den API Server (mat deem de kubectl CLI kommunizéiert).

Eis 3-Node Kubernetes Cluster wäert esou ausgesinn:

Installatioun vum Kubernetes Cluster op Master-Node

Fir Kubernetes ze schaffen, braucht Dir e Containeriséierungsmotor. Wéi scho gesot, wäerte mir Docker-CE benotzen.

Déi folgend Institutiounen ginn op CentOS 8 Master-Node ausgefouert.

Op Ärem CentOS 8 Master-Node, set de System Hostnumm an update DNS an Ärer /etc/hosts Datei.

# 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

Als nächst ping Äre Worker-Node-1 an Worker-Node-2 fir ze kontrolléieren ob Är aktualiséiert Hostdatei korrekt funktionnéiert mam Ping Kommando.

# ping 192.168.0.48
# ping 192.168.0.49

Als nächst deaktivéiert Selinux, well dëst erfuerderlech ass fir Container z'erméiglechen Zougang zum Hostdateisystem ze kréien, wat vun Pod-Netzwierker an aner Servicer gebraucht gëtt.

# setenforce 0

Setenforce op 0 setzen effektiv SELinux op permissiv setzt, wat effektiv SELinux deaktivéiert bis den nächsten Neistart. Fir et komplett auszeschalten, benotzt de Kommando hei ënnen a restart.

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

Kubernetes benotzt verschidde Ports fir Kommunikatioun an Zougang an dës Ports musse fir Kubernetes zougänglech sinn an net vun der Firewall limitéiert sinn.

Konfiguréieren d'Firewall Regelen op den Häfen.

# 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

Dir musst den Docker Repository als éischt addéieren well et net méi an der Standard Package Lëscht ass mat dem folgenden dnf config-manager Kommando.

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

Installéiert och de Containerd.io Package deen als Daemon verfügbar ass deen de komplette Containerliewenszyklus vu sengem Hostsystem geréiert, vu Bildtransfer a Lagerung bis Container Ausféierung an Iwwerwaachung bis Low-Level Storage bis Netzwierk Uschlëss an doriwwer eraus.

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

Installéiert elo déi lescht Versioun vun engem Docker-ce Package.

# dnf install docker-ce

Dir kënnt elo den Docker Service aktivéieren an starten.

# systemctl enable docker
# systemctl start docker

Als nächst musst Dir Kubernetes Repositories manuell addéieren well se net als Standard op CentOS 8 installéiert ginn.

# 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 hëlleft Iech e Minimum liewensfäeg Kubernetes Cluster ze bootstrap dee mat beschten Praktiken entsprécht. Mat kubeadm, sollt Äre Stärekoup d'Kubernetes Conformance Tester passéieren.

Kubeadm ënnerstëtzt och aner Cluster Liewenszyklus Funktiounen, wéi Upgrades, Downgrade, a Gestioun Bootstrap Tokens. Kubeadm ass och Integratiounsfrëndlech mat aneren Orchestertools wéi Ansible an Terraform.

Mam Package Repo elo prett, kënnt Dir viru goen an kubeadm Package installéieren.

# dnf install kubeadm -y 

Wann d'Installatioun erfollegräich ofgeschloss ass, aktivéiert a start de Service.

# systemctl enable kubelet
# systemctl start kubelet

De Kubernetes Master, deen als Kontrollplan fir de Cluster wierkt, leeft e puer kritesch Servicer, déi fir de Cluster néideg sinn. Als esou wäert den Initialiséierungsprozess eng Serie vu Prechecks maachen fir sécherzestellen datt d'Maschinn prett ass fir Kubernetes ze lafen. Dës Prechecks weisen Warnungen aus a ginn op Feeler eraus. kubeadm init luet dann d'Cluster Kontrollplanekomponenten erof an installéiert.

Elo ass et Zäit de Kubernetes Master z'initialiséieren, awer virdru musst Dir Swap deaktivéieren fir de Kommando kubeadm init auszeféieren.

# swapoff -a

Kubernetes Master initialiséieren ass e komplett automatiséierte Prozess dee vum Kommando \kubeadm init\ kontrolléiert gëtt wéi gewisen.

# kubeadm init

Als nächst kopéiert de folgende Kommando a späichert et iergendwou, well mir erfuerderlech hunn dëse Kommando op den Aarbechterknäppchen méi spéit auszeféieren.

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

Tipp: Heiansdo kann den uewe genannte Kommando Feeler iwwer d'Argumenter werfen, also fir Feeler ze vermeiden, musst Dir de '\' Charakter ewechhuelen an Äre leschte Kommando wäert esou ausgesinn.

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

Wann Kubernetes erfollegräich initialiséiert ass, musst Dir Äre Benotzer aktivéieren fir de Cluster ze benotzen. An eisem Szenario wäerte mir de Root Benotzer benotzen. Dir kënnt och de Cluster mam Sudo Benotzer starten wéi gewisen.

Fir root ze benotzen, lafen:

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

Fir e sudo aktivéierte Benotzer ze benotzen, lafen:

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

Elo bestätegt datt de Kommando kubectl aktivéiert ass.

# kubectl get nodes

Zu dësem Moment gesitt Dir de Status vum Master-Node ass 'NotReady'. Dëst ass well mir nach de Pod-Netzwierk an de Cluster ofsetzen.

De Pod Network ass den Iwwerlagernetz fir de Stärekoup, deen uewen um aktuellen Nodennetz ofgebaut gëtt. Et ass entwéckelt fir Konnektivitéit iwwer de Pod z'erméiglechen.

Den Netzwierkcluster z'installéieren ass en héich flexibele Prozess ofhängeg vun Äre Bedierfnesser an et gi vill Optiounen verfügbar. Well mir eis Installatioun esou einfach wéi méiglech halen wëllen, benotze mir de Weavenet Plugin deen keng Konfiguratioun oder Extra Code erfuerdert an et gëtt eng IP Adress pro Pod déi super fir eis ass. Wann Dir méi Optiounen wëllt gesinn, kuckt w.e.g. hei.

Dës Befehle wäerte wichteg sinn fir de Pod Netzwierk Setup ze kréien.

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

Elo wann Dir de Status vun Ärem Master-Node iwwerpréift, sollt et 'Ready' sinn.

# kubectl get nodes

Als nächst fügen mir d'Aarbechternoden un de Cluster.

Füügt Aarbechternoden op Kubernetes Cluster

Déi folgend Instruktioune ginn op all Aarbechter Node ausgefouert wann Dir de Kubernetes Cluster bäitrieden.

Setzt als éischt den Hostnumm op Ärem Worker-Node-1 an Worker-Node-2, a füügt dann d'Host-Entréen un d'/etc/hosts Datei.

# 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

Als nächst ping Äre Master Node vun Ären Aarbechtsknäppchen fir ze bestätegen datt Är aktualiséiert Hostdatei gutt funktionnéiert mam Ping Kommando.

# 192.168.0.47

Als nächst deaktivéiert SElinux an aktualiséiert Är Firewall Regelen.

# 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

Füügt den Docker Repository als éischt mat DNF Config-Manager.

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

Als nächst füügt de Containerd.io Package derbäi.

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

Mat dësen zwee Packagen installéiert, installéiert déi lescht Versioun vum docker-ce.

# dnf install docker-ce

Aktivéiert an start den Docker Service.

# systemctl enable docker
# systemctl start docker

Dir musst Kubernetes Repositories manuell addéieren well se net virinstalléiert op CentOS 8 kommen.

# 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

Mam Package Repo elo prett, kënnt Dir virugoen an kubeadm installéieren.

# dnf install kubeadm -y 

Start an aktivéiert de Service.

# systemctl enable kubelet
# systemctl start kubelet

Mir erfuerderen elo den Token deen de Kubeadm init generéiert huet, fir an de Cluster matzemaachen. Dir kënnt et op Ären Node-1 an Node-2 kopéieren a pechen wann Dir et iergendwou kopéiert hutt.

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

Wéi op der leschter Zeil proposéiert, gitt zréck op Äre Master-Node a kontrolléiert ob den Aarbechter Node-1 an den Aarbechter Node-2 de Cluster mat dem folgenden Kommando ugeschloss hunn.

# kubectl get nodes

Wann all d'Schrëtt erfollegräich lafen, da sollt Dir Node-1 an Node-2 am Ready Status um Master-Node gesinn. Zu dësem Zäitpunkt hutt Dir elo erfollegräich e Kubernetes Cluster op CentOS 8 ofgesat.

Recommandéiert Liesen: Wéi deploy Nginx op engem Kubernetes Cluster

De Stärekoup, dee mir hei erstallt hunn, huet en eenzege Master-Node, an als solch, wann de Master-Knuet klappt, kann Äre Stärekoup Daten verléieren a muss vläicht vun Null nei erstallt ginn.

Aus dësem Grond recommandéieren ech e Highly Available Setup.