Kako namestiti grozd Kubernetes na CentOS 8


Postopek namestitve Kubernetes Clusterja na CentOS 8 je skoraj podoben postopku CentOS 7 (ki ga lahko preberete tukaj), vendar ima postopek tukaj nekaj sprememb. Te spremembe se večinoma vrtijo okoli namestitve Dockerja.

Od CentOS 8 (in s podaljškom RHEL 8) je docker zdaj prvotno nadomeščen s podman in buildah, ki sta orodji podjetja Redhat. Pravzaprav je paket docker zdaj odstranjen iz privzetega repozitorija paketov.

S to potezo si ekipa Redhat želi poenostaviti postopek ustvarjanja in uporabe vsebnikov, ne da bi potrebovala posebna dovoljenja, hkrati pa ohranja združljivost s slikami dockerjev in upravlja z njimi, ne da bi potreboval demon. Podman obljublja, da bo ponudil večjo prilagodljivost pri delovanju v okoljih Kubernetes, vendar žirija ostaja zunaj.

V tem članku bomo izvedli postopek namestitve Kubernetes na platformo CentOS 8, ki se izvaja na Docker-CE (izdaja skupnosti). V naslednjem članku bomo izvedli tudi podobno namestitev, pri čemer bomo uporabili podman za naše vsebnike.

  1. Trije strežniki s CentOS 8 - 1 glavnim vozliščem in dvema delovnima vozliščema.
  2. Priporočljivo je, da imajo vaša vozlišča vsaj 2 CPU z 2 GB RAM-a ali več na stroj. To ni stroga zahteva, vendar je v veliki meri odvisna od potreb aplikacije, ki jo nameravate zagnati.
  3. Internetna povezava na vseh vozliščih. Iz skladišča bomo prevzeli pakete Kubernetes in docker. Prav tako boste morali zagotoviti, da je upravitelj paketov DNF privzeto nameščen in lahko pakete pridobiva na daljavo.
  4. Vsa vaša vozlišča bi morala imeti tudi možnost medsebojnega povezovanja v zasebnem ali javnem omrežju, kar koli je na voljo.
  5. Potrebovali boste tudi dostop do računa s pravicami sudo ali root. V tej vadnici bom uporabljal svoj korenski račun.

Večina vozlišč ima navadno enolične naslove MAC, vendar imajo lahko nekateri navidezni stroji v nekaterih edinstvenih primerih enake naslove MAC. Zato je priporočljivo, da potrdite, da Product_UUID in naslov MAC v nobenem od vozlišč nista enaka.

Kubernetes uporablja te vrednosti za enolično identifikacijo vozlišč v gruči. Če te vrednosti niso enolične za vsako vozlišče, lahko postopek namestitve ne uspe.

Če želite preveriti naslov MAC omrežnega vmesnika in ga primerjati.

# ip link

Če želite preveriti product_uuid in ga primerjati, zaženite naslednji ukaz.

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

Naša namestitev je zasnovana tako, da ima glavno vozlišče nadzor nad delovnimi vozlišči. Na koncu te namestitve bo naša logična arhitektura videti nekako takole.

Glavno vozlišče - Ta naprava običajno deluje kot nadzorna ravnina in zažene bazo podatkov gruče in strežnik API (s katerim komunicira kubectl CLI).

Naš grozd Kubernetes s 3 vozlišči bo videti nekako takole:

Namestitev grozda Kubernetes na glavnem vozlišču

Da bo Kubernetes deloval, boste potrebovali mehanizem za kontejneriranje. Kot smo že omenili, bomo uporabljali Docker-CE.

Naslednje institucije bodo izvedene na CentOS 8 Master-Node.

Na glavnem vozlišču CentOS 8 nastavite sistemsko ime gostitelja in posodobite DNS v datoteki/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

Nato s pomočjo ukaza ping preverite, ali vaša posodobljena gostiteljska datoteka deluje pravilno, s pingom poiščite vaš worker-node-1 in worker-node-2.

# ping 192.168.0.48
# ping 192.168.0.49

Nato onemogočite Selinux, ker je to potrebno, da vsebniki lahko dostopajo do gostiteljskega datotečnega sistema, kar potrebujejo omrežja pod in druge storitve.

# setenforce 0

Če nastavite setenforce na 0 , SELinux učinkovito nastavi na permisivno, kar učinkovito onemogoči SELinux do naslednjega ponovnega zagona. Če ga želite popolnoma onemogočiti, uporabite spodnji ukaz in znova zaženite.

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

Kubernetes uporablja različna vrata za komunikacijo in dostop, ki morajo biti dostopna Kubernetesu in ne omejena s požarnim zidom.

Konfigurirajte pravila požarnega zidu na vratih.

# 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

Najprej boste morali dodati skladišče Docker, ker ga ni več na privzetem seznamu paketov z naslednjim ukazom dnf config-manager.

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

Namestite tudi paket containerd.io, ki je na voljo kot demon, ki upravlja celoten življenjski cikel vsebnika gostiteljskega sistema, od prenosa in shranjevanja slik do izvedbe in nadzora vsebnika do nizkega nivoja do omrežnih prilog in še več.

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

Zdaj namestite najnovejšo različico paketa docker-ce.

# dnf install docker-ce

Zdaj lahko omogočite in zaženete storitev priklopne postaje.

# systemctl enable docker
# systemctl start docker

Nato boste morali shrambe Kubernetes dodati ročno, saj v CentOS 8 niso privzeto nameščeni.

# 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 vam pomaga zagnati minimalno sposobno grozde Kubernetes, ki ustreza najboljšim praksam. S kubeadm mora grozd prestati preizkuse skladnosti Kubernetes.

Kubeadm podpira tudi druge funkcije življenjskega cikla grozda, kot so nadgradnje, znižanje in upravljanje žetonov bootstrap. Kubeadm je tudi prijazen do integracije z drugimi orodji za orkestracijo, kot sta Ansible in Terraform.

Ko je repo paketov zdaj pripravljen, lahko nadaljujete in namestite paket kubeadm.

# dnf install kubeadm -y 

Ko se namestitev uspešno zaključi, omogočite in zaženite storitev.

# systemctl enable kubelet
# systemctl start kubelet

Nadzornik Kubernetes, ki deluje kot krmilna ravnina za gručo, izvaja nekaj kritičnih storitev, potrebnih za grozd. Kot tak bo postopek inicializacije izvedel vrsto predhodnih preverjanj, s katerimi bo zagotovil, da je naprava pripravljena za zagon Kubernetesa. Ti predpoverki razkrijejo opozorila in izstopijo ob napakah. kubeadm init nato prenese in namesti komponente nadzorne ravnine gruče.

Zdaj je čas, da inicializirate Kubernetes master, vendar pred tem morate onemogočiti swap, da zaženete ukaz\"kubeadm init \".

# swapoff -a

Inicializacija mojstra Kubernetes je popolnoma avtomatiziran postopek, ki ga nadzoruje ukaz\"kubeadm init \", kot je prikazano.

# kubeadm init

Nato kopirajte naslednji ukaz in ga nekje shranite, saj smo pozneje morali ta ukaz zagnati na delovnih vozliščih.

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

Nasvet: Včasih lahko zgornji ukaz vrže napake glede predanih argumentov, zato morate, da se izognete napakam, odstraniti znak ‘\’ in vaš končni ukaz bo videti tako.

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

Ko se Kubernetes uspešno inicializira, morate uporabniku omogočiti, da začne uporabljati gručo. V našem primeru bomo uporabljali korenskega uporabnika. Grozd lahko zaženete tudi z uporabnikom sudo, kot je prikazano.

Če želite uporabiti root, zaženite:

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

Če želite uporabiti uporabnika s sudo, zaženite:

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

Zdaj potrdite, da je ukaz kubectl aktiviran.

# kubectl get nodes

V tem trenutku boste videli, da je glavno vozlišče »NotReady«. To je zato, ker še nismo uvedli omrežja pods v gručo.

Pod Network je prekrivno omrežje za gručo, ki je razporejeno na vrhu trenutnega omrežja vozlišč. Zasnovan je tako, da omogoča povezljivost med strokom.

Uvajanje omrežne gruče je zelo prilagodljiv postopek, odvisno od vaših potreb, na voljo pa je veliko možnosti. Ker želimo našo namestitev čim bolj poenostaviti, bomo uporabili vtičnik Weavenet, ki ne zahteva nobene konfiguracije ali dodatne kode in vsebuje en naslov IP na pod, kar je za nas super. Če želite videti več možnosti, preverite tukaj.

Ti ukazi bodo pomembni za nastavitev omrežja pod.

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

Zdaj, če preverite stanje glavnega vozlišča, bi moralo biti »Pripravljeno«.

# kubectl get nodes

Nato v gručo dodamo delovna vozlišča.

Dodajanje vozlišč delavcev v gručo Kubernetes

Naslednja navodila bodo izvedena na vsakem delovnem vozlišču, ko se pridružijo gruči Kubernetes.

Najprej nastavite ime gostitelja na vašem worker-node-1 in worker-node-2, nato pa v datoteko/etc/hosts dodajte vnose gostitelja.

# 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

Nato pingajte glavno vozlišče iz delovnih vozlišč, da z ukazom ping potrdite, da posodobljena gostiteljska datoteka deluje dobro.

# 192.168.0.47

Nato onemogočite SElinux in posodobite pravila požarnega zidu.

# 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

Najprej dodajte repozitorij Docker z uporabo DNF config-manager.

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

Nato 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

Z nameščenima paketoma namestite najnovejšo različico docker-ce.

# dnf install docker-ce

Omogočite in zaženite storitev priklopne postaje.

# systemctl enable docker
# systemctl start docker

Skladišča Kubernetes boste morali dodati ročno, saj v CentOS 8 niso vnaprej nameščena.

# 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

Ko je repo paketov zdaj pripravljen, lahko nadaljujete in namestite kubeadm.

# dnf install kubeadm -y 

Zaženite in omogočite storitev.

# systemctl enable kubelet
# systemctl start kubelet

Zdaj zahtevamo žeton, ki ga je ustvaril kubeadm, da se pridruži gruči. Lahko ga kopirate in prilepite na svoje vozlišče-1 in vozlišče-2, če ste ga nekje kopirali.

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

Kot je predlagano v zadnji vrstici, se vrnite na glavno vozlišče in z naslednjim ukazom preverite, ali sta se delovno vozlišče-1 in delovno vozlišče-2 pridružili gruči.

# kubectl get nodes

Če se vsi koraki uspešno izvajajo, bi morali na glavnem vozlišču videti vozlišče-1 in vozlišče-2 v stanju pripravljenosti. Na tej točki ste zdaj uspešno namestili gručo Kubernetes na CentOS 8.

Priporočeno branje: Kako razmestiti Nginx v grozdu Kubernetes

Grozd, ki smo ga tukaj ustvarili, ima eno glavno vozlišče in če glavno vozlišče ne uspe, lahko grozd izgubi podatke in ga bo morda treba ustvariti iz nič.

Zato priporočam visoko razpoložljivo namestitev.