Kako instalirati Kubernetes klaster na CentOS 8


Proces instaliranja Kubernetes klastera na CentOS 8 gotovo je sličan onom za CentOS 7 (koji možete proći ovdje), ali proces ovdje ima nekoliko promjena. Ove promjene uglavnom se odnose na instalaciju Dockera.

Počevši od CentOS 8 (i ekstenzijom RHEL 8), docker sada je izvorno zamijenjen podmanom i buildah koji su alati tvrtke Redhat. Zapravo, docker paket je sada uklonjen iz zadanog repozitorija paketa.

Ovim potezom Redhat tim ima za cilj pojednostaviti proces stvaranja i korištenja spremnika, bez potrebe za posebnim dopuštenjima, dok u isto vrijeme održava kompatibilnost s docker slikama i njima upravlja bez potrebe za demonom. Podman obećava da će ponuditi više fleksibilnosti pri radu u Kubernetes okruženjima, ali žiri ostaje tu.

Za ovaj članak proći ćemo kroz postupak instaliranja Kubernetesa na platformu CentOS 8 koja radi na Docker-CE (Zajednica izdanje). U kasnijem članku također ćemo proći kroz sličnu instalaciju, koristeći podman za naše spremnike.

Preduvjeti

  1. Tri poslužitelja koji pokreću CentOS 8 – 1 glavni čvor i 2 radna čvora.
  2. Preporuča se da vaši čvorovi imaju najmanje 2 CPU-a s 2 GB RAM-a ili više po stroju. Ovo nije strogi zahtjev, ali je u velikoj mjeri vođen potrebama aplikacije koju namjeravate pokrenuti.
  3. Internetska povezanost na svim vašim čvorovima. Dohvaćat ćemo Kubernetes i docker pakete iz repozitorija. Jednako tako, morat ćete se uvjeriti da je DNF upravitelj paketa instaliran prema zadanim postavkama i da može dohvaćati pakete na daljinu.
  4. Svi vaši čvorovi također bi se trebali moći povezati jedan s drugim, bilo na privatnoj ili javnoj mreži, ovisno o tome koja je dostupna.
  5. Također ćete trebati pristup računu sa sudo ili root privilegijama. U ovom vodiču koristit ću svoj root račun.

Mjera opreza

Većina čvorova općenito dolazi s jedinstvenim MAC adresama, međutim, u nekim jedinstvenim slučajevima, neka Virtualna računala mogu imati identične MAC adrese. Stoga se preporučuje da potvrdite da Product_UUID i MAC adresa nisu identične ni u jednom od čvorova.

Kubernetes koristi ove vrijednosti za jedinstvenu identifikaciju čvorova u klasteru. Ako te vrijednosti nisu jedinstvene za svaki čvor, proces instalacije možda neće uspjeti.

Za provjeru MAC adrese mrežnog sučelja i usporedbu.

ip link

Da provjerite product_uuid i usporedite, pokrenite sljedeću naredbu.

cat /sys/class/dmi/id/product_uuid 

Logička arhitektura

Naša instalacija je dizajnirana tako da Master-Node kontrolira Worker Node. Na kraju ove instalacije, naša logična arhitektura će izgledati otprilike ovako.

Glavni čvor – Ovaj stroj općenito djeluje kao kontrolna ravnina i pokreće bazu podataka klastera i API poslužitelj (s kojim kubectl CLI komunicira).

Naš Kubernetes klaster od 3 čvora izgledat će otprilike ovako:

Instalacija Kubernetes klastera na glavnom čvoru

Da bi Kubernetes radio, trebat će vam mehanizam za kontejnerizaciju. Kao što je spomenuto, koristit ćemo Docker-CE.

Sljedeće institucije bit će izvedene na CentOS 8 Master-Node.

Korak 1: Pripremite ime glavnog računala, vatrozid i SELinux

Na vašem CentOS 8 Master-Node-u postavite ime glavnog računala sustava i ažurirajte DNS u datoteci /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

Zatim pingajte svoj worker-node-1 i worker-node-2 da provjerite radi li vaša ažurirana host datoteka ispravno pomoću naredbe ping.

ping 192.168.0.48
ping 192.168.0.49

Zatim onemogućite Selinux jer je to potrebno kako bi se spremnicima omogućio pristup datotečnom sustavu hosta, što je potrebno pod mrežama i drugim uslugama.

setenforce 0

Postavljanje setenforce na 0 učinkovito postavlja SELinux na permisivan, što učinkovito onemogućuje SELinux do sljedećeg ponovnog pokretanja. Da biste ga potpuno onemogućili, upotrijebite donju naredbu i ponovno pokrenite sustav.

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

Kubernetes koristi razne priključke za komunikaciju i pristup i ti priključci moraju biti dostupni Kubernetesu i ne moraju biti ograničeni vatrozidom.

Konfigurirajte pravila vatrozida na portovima.

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

Korak 2: Instalirajte Docker-CE na CentOS 8

Prvo ćete morati dodati Docker repozitorij jer više nije na zadanom popisu paketa pomoću sljedeće naredbe dnf config-manager.

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

Također instalirajte paket containerd.io koji je dostupan kao demon koji upravlja cijelim životnim ciklusom spremnika svog glavnog sustava, od prijenosa slike i pohrane do izvršavanja spremnika i nadzora do pohrane niske razine do mrežnih privitaka i dalje .

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

Sada instalirajte najnoviju verziju paketa docker-ce.

dnf install docker-ce

Sada možete omogućiti i pokrenuti docker uslugu.

systemctl enable docker
systemctl start docker

Korak 3: Instalirajte Kubernetes (Kubeadm) na CentOS 8

Zatim ćete morati ručno dodati Kubernetes repozitorije jer se ne instaliraju prema zadanim postavkama na 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 pomaže vam da pokrenete minimalno održivi Kubernetes klaster koji je u skladu s najboljim praksama. Uz kubeadm, vaš bi klaster trebao proći Kubernetes testove sukladnosti.

Kubeadm također podržava druge funkcije životnog ciklusa klastera, kao što su nadogradnje, vraćanje na stariju verziju i upravljanje bootstrap tokenima. Kubeadm je također pogodan za integraciju s drugim alatima za orkestraciju kao što su Ansible i Terraform.

Kad je repo paketa sada spreman, možete nastaviti i instalirati paket kubeadm.

dnf install kubeadm -y 

Kada instalacija uspješno završi, omogućite i pokrenite uslugu.

systemctl enable kubelet
systemctl start kubelet

Korak 4: Stvorite master kontrolne ravnine s kubeadmom

Kubernetes master koji djeluje kao kontrolna ravnina za klaster pokreće nekoliko kritičnih usluga potrebnih za klaster. Kao takav, proces inicijalizacije izvršit će niz predprovjera kako bi se osiguralo da je stroj spreman za pokretanje Kubernetesa. Ove predprovjere otkrivaju upozorenja i izlaze u slučaju pogrešaka. kubeadm init zatim preuzima i instalira komponente kontrolne ravnine klastera.

Sada je vrijeme da inicijalizirate Kubernetes master, ali prije toga morate onemogućiti swap kako biste pokrenuli naredbu “kubeadm init“.

swapoff -a

Inicijalizacija Kubernetes mastera potpuno je automatiziran proces koji se kontrolira pomoću naredbe “kubeadm init“ kao što je prikazano.

kubeadm init

Zatim kopirajte sljedeću naredbu i pohranite je negdje jer smo kasnije zahtijevali pokretanje ove naredbe na radnim čvorovima.

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

Savjet: Ponekad gornja naredba može izazvati pogreške u vezi s proslijeđenim argumentima, pa da biste izbjegli pogreške, morate ukloniti znak '\' a vaša konačna naredba će izgledati ovako.

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

Nakon što se Kubernetes uspješno inicijalizira, morate omogućiti svom korisniku da počne koristiti klaster. U našem scenariju koristit ćemo root korisnika. Također možete pokrenuti klaster koristeći sudo korisnika kao što je prikazano.

Da biste koristili root, pokrenite:

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

Za korištenje sudo omogućenog korisnika, pokrenite:

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

Sada potvrdite da je kubectl naredba aktivirana.

kubectl get nodes

U ovom trenutku vidjet ćete da je status glavnog čvora 'Nije spreman'. To je zato što tek trebamo implementirati pod mrežu u klaster.

Pod mreža je preklapajuća mreža za klaster, koja je raspoređena na vrhu postojeće mreže čvora. Dizajniran je da omogući povezivanje preko modula.

Korak 5: Postavite svoju Pod mrežu

Postavljanje mrežnog klastera vrlo je fleksibilan proces koji ovisi o vašim potrebama i postoje mnoge dostupne opcije. Budući da želimo održati našu instalaciju što je moguće jednostavnijom, koristit ćemo Weavenet dodatak koji ne zahtijeva nikakvu konfiguraciju ili dodatni kod i pruža jednu IP adresu po modulu što je za nas odlično. Ako želite vidjeti više opcija, provjerite ovdje.

Ove će naredbe biti važne za postavljanje mreže modula.

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

Ako sada provjerite status svog glavnog čvora, on bi trebao biti 'Spreman'.

kubectl get nodes

Zatim dodajemo radničke čvorove u klaster.

Dodavanje radnih čvorova u Kubernetes klaster

Sljedeće upute izvršit će se na svakom radnom čvoru prilikom pridruživanja Kubernetes klasteru.

Korak 1: Pripremite ime glavnog računala, vatrozid i SELinux

Najprije postavite naziv hosta na svoj worker-node-1 i worker-node-2, a zatim dodajte unose hosta u /etc/hosts > datoteka.

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

Zatim pingajte svoj glavni čvor s vaših radnih čvorova kako biste potvrdili da vaša ažurirana host datoteka dobro radi pomoću naredbe ping.

192.168.0.47

Zatim onemogućite SElinux i ažurirajte pravila vatrozida.

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

Korak 2: Postavite Docker-CE i Kubernetes Repo

Prvo dodajte Docker repozitorij koristeći DNF config-manager.

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

Zatim dodajte paket 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

S ova dva instalirana paketa instalirajte najnoviju verziju docker-ce.

dnf install docker-ce

Omogućite i pokrenite docker uslugu.

systemctl enable docker
systemctl start docker

Morat ćete ručno dodati Kubernetes spremišta jer ne dolaze unaprijed instalirana na 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

Korak 3: Instalirajte Kubeadm na CentOS 8

Kad je repo paketa sada spreman, možete nastaviti i instalirati kubeadm.

dnf install kubeadm -y 

Pokrenite i omogućite uslugu.

systemctl enable kubelet
systemctl start kubelet

Korak 4: pridružite radni čvor Kubernetes klasteru

Sada nam je potreban token koji je kubeadm init generirao za pridruživanje klasteru. Možete ga kopirati i zalijepiti na svoj čvor-1 i čvor-2 ako ste ga negdje kopirali.

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

Kao što je predloženo u zadnjem retku, vratite se na svoj glavni čvor i provjerite jesu li se radni čvor-1 i radni čvor-2 pridružili klaster pomoću sljedeće naredbe.

kubectl get nodes

Ako su svi koraci uspješno izvedeni, trebali biste vidjeti čvor-1 i čvor-2 u statusu spremni na glavnom čvoru. Sada ste uspješno implementirali Kubernetes klaster na CentOS 8.

Preporučeno za čitanje: Kako implementirati Nginx na Kubernetes klaster

Neka ograničenja

Klaster koji smo ovdje stvorili ima jedan Glavni čvor, i kao takav, ako Glavni čvor zakaže, vaš klaster može izgubiti podatke i možda će ga trebati ponovno stvoriti ispočetka.

Iz tog razloga preporučujem postavku visoke dostupnosti.