Vyhledávání na webu

Jak nainstalovat Kubernetes Cluster na CentOS 8


Proces instalace Kubernetes Cluster na CentOS 8 je téměř podobný procesu CentOS 7 (který si můžete projít zde), ale proces zde má několik změn. Tyto změny se většinou točí kolem instalace Docker.

Počínaje CentOS 8 (a rozšířením RHEL 8) byl docker nyní nativně nahrazen systémy podman a buildah, což jsou nástroje od Redhat. Ve skutečnosti byl nyní balíček docker odstraněn z výchozího úložiště balíčků.

Tímto krokem si tým Redhat klade za cíl zjednodušit proces vytváření a používání kontejnerů, aniž by potřeboval speciální oprávnění, a zároveň zachovat kompatibilitu s obrazy dockerů a provozovat je bez potřeby démona. Podman slibuje, že nabídne větší flexibilitu při běhu v prostředích Kubernetes, ale porota zůstává mimo.

V tomto článku si projdeme proces instalace Kubernetes na platformu CentOS 8 běžící na Docker-CE (Community Edice). V pozdějším článku si také projdeme podobnou instalaci pomocí podmana pro naše kontejnery.

Předpoklady

  1. Tři servery se systémem CentOS 8 – 1 hlavní uzel a 2 pracovní uzly.
  2. Doporučuje se, aby vaše uzly měly alespoň 2 CPU s 2 GB RAM nebo více na počítač. Toto není striktní požadavek, ale je do značné míry řízen potřebami aplikace, kterou hodláte spustit.
  3. Připojení k internetu na všech vašich uzlech. Budeme načítat balíčky Kubernetes a docker z úložiště. Stejně tak se budete muset ujistit, že správce balíčků DNF je standardně nainstalován a může načítat balíčky vzdáleně.
  4. Všechny vaše uzly by také měly být schopny se vzájemně propojit, ať už v privátní nebo veřejné síti, podle toho, která je dostupná.
  5. Budete také potřebovat přístup k účtu s právy sudo nebo root. V tomto tutoriálu budu používat svůj root účet.

Opatření

Většina uzlů obecně přichází s jedinečnými MAC adresami, avšak v některých jedinečných případech mohou mít některé virtuální počítače stejné adresy MAC. Proto se doporučuje potvrdit, že Product_UUID a MAC adresa nejsou v žádném z uzlů totožné.

Kubernetes používá tyto hodnoty k jedinečné identifikaci uzlů v clusteru. Pokud tyto hodnoty nejsou jedinečné pro každý uzel, může se stát, že proces instalace selže.

Chcete-li zkontrolovat MAC adresu síťového rozhraní a porovnat ji.

ip link

Chcete-li zkontrolovat product_uuid a porovnat, spusťte následující příkaz.

cat /sys/class/dmi/id/product_uuid 

Logická architektura

Naše instalace je navržena tak, aby Master-Node ovládala Worker Nodes. Na konci této instalace bude naše logická architektura vypadat nějak takto.

Hlavní uzel – Tento počítač obecně funguje jako řídicí rovina a provozuje databázi clusteru a server API (se kterým komunikuje rozhraní CLI kubectl).

Náš 3uzlový klastr Kubernetes bude vypadat nějak takto:

Instalace Kubernetes Cluster na Master-Node

Aby Kubernetes fungovalo, budete potřebovat kontejnerizační modul. Jak již bylo zmíněno, budeme používat Docker-CE.

Následující instituce budou prováděny na CentOS 8 Master-Node.

Krok 1: Připravte název hostitele, bránu firewall a SELinux

V CentOS 8 Master-Node nastavte název hostitele systému a aktualizujte DNS v souboru /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

Poté odešlete příkaz ping na svůj pracovní-uzel-1 a pracovní-uzel-2 a zkontrolujte, zda váš aktualizovaný soubor hostitele funguje správně pomocí příkazu ping.

ping 192.168.0.48
ping 192.168.0.49

Dále deaktivujte Selinux, protože to je vyžadováno pro umožnění přístupu kontejnerů k hostitelskému souborovému systému, který potřebují pod sítě a další služby.

setenforce 0

Nastavení setenforce na 0 účinně nastaví SELinux na permisivní, což účinně deaktivuje SELinux až do příštího restartu. Chcete-li jej úplně zakázat, použijte níže uvedený příkaz a restartujte počítač.

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

Kubernetes využívá různé porty pro komunikaci a přístup a tyto porty musí být pro Kubernetes přístupné a neomezené firewallem.

Nakonfigurujte pravidla brány firewall na portech.

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

Krok 2: Nainstalujte Docker-CE na CentOS 8

Nejprve budete muset přidat úložiště Docker, protože již není ve výchozím seznamu balíčků pomocí následujícího příkazu dnf config-manager.

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

Nainstalujte také balíček containerd.io, který je k dispozici jako démon, který spravuje kompletní životní cyklus kontejneru svého hostitelského systému, od přenosu obrazu a ukládání přes spouštění a dohled kontejneru až po nízkoúrovňové úložiště až po síťové přílohy a další .

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

Nyní nainstalujte nejnovější verzi balíčku docker-ce.

dnf install docker-ce

Nyní můžete povolit a spustit službu docker.

systemctl enable docker
systemctl start docker

Krok 3: Nainstalujte Kubernetes (Kubeadm) na CentOS 8

Dále budete muset repozitáře Kubernetes přidat ručně, protože se ve výchozím nastavení na CentOS 8 nenainstalují.

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 vám pomůže zavést minimální životaschopný cluster Kubernetes, který je v souladu s osvědčenými postupy. S kubeadm by měl váš cluster projít testy shody Kubernetes.

Kubeadm také podporuje další funkce životního cyklu clusteru, jako jsou upgrady, downgrade a správa bootstrap tokenů. Kubeadm je také vhodný pro integraci s dalšími nástroji pro orchestraci, jako jsou Ansible a Terraform.

Když je nyní repozitář balíčků připraven, můžete pokračovat a nainstalovat balíček kubeadm.

dnf install kubeadm -y 

Po úspěšném dokončení instalace povolte a spusťte službu.

systemctl enable kubelet
systemctl start kubelet

Krok 4: Vytvořte Master-plane Master pomocí kubeadm

Hlavní server Kubernetes, který funguje jako řídicí rovina pro cluster, spouští několik důležitých služeb nezbytných pro cluster. Proces inicializace jako takový provede řadu předběžných kontrol, aby bylo zajištěno, že je počítač připraven ke spuštění Kubernetes. Tyto předběžné kontroly odhalují varování a ukončují chyby. kubeadm init poté stáhne a nainstaluje součásti řídicí roviny clusteru.

Nyní je čas inicializovat Kubernetes master, ale předtím musíte zakázat swap, abyste mohli spustit příkaz „kubeadm init“.

swapoff -a

Inicializace Kubernetes master je zcela automatizovaný proces, který je řízen příkazem „kubeadm init“, jak je znázorněno na obrázku.

kubeadm init

Dále zkopírujte následující příkaz a někde ho uložte, protože jsme požadovali, abychom tento příkaz spustili na pracovních uzlech později.

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

Tip: Někdy může výše uvedený příkaz způsobit chyby týkající se předávaných argumentů, takže abyste předešli chybám, musíte odstranit znak '\' a váš konečný příkaz bude vypadat takto.

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

Jakmile se Kubernetes úspěšně inicializuje, musíte svému uživateli povolit, aby mohl začít používat cluster. V našem scénáři budeme používat uživatele root. Cluster můžete také spustit pomocí uživatele sudo, jak je znázorněno.

Chcete-li použít root, spusťte:

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

Chcete-li použít uživatele s povoleným sudo, spusťte:

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

Nyní potvrďte, že je aktivován příkaz kubectl.

kubectl get nodes

V tuto chvíli uvidíte stav hlavního uzlu „NotReady“. Je to proto, že ještě musíme nasadit síť pod do clusteru.

Síť pod je překryvná síť pro klastr, která je nasazena nad aktuální sítí uzlu. Je navržen tak, aby umožňoval připojení přes modul.

Krok 5: Nastavte síť podu

Nasazení síťového clusteru je vysoce flexibilní proces v závislosti na vašich potřebách a k dispozici je mnoho možností. Protože chceme, aby byla naše instalace co nejjednodušší, použijeme plugin Weavenet, který nevyžaduje žádnou konfiguraci ani extra kód a poskytuje jednu IP adresu na pod, což je pro nás skvělé. Pokud chcete vidět více možností, podívejte se sem.

Tyto příkazy budou důležité pro nastavení sítě pod.

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

Pokud nyní zkontrolujete stav svého hlavního uzlu, měl by být „Připraven“.

kubectl get nodes

Dále do clusteru přidáme pracovní uzly.

Přidání pracovních uzlů do clusteru Kubernetes

Následující pokyny budou provedeny na každém pracovním uzlu při připojení ke clusteru Kubernetes.

Krok 1: Připravte název hostitele, bránu firewall a SELinux

Nejprve nastavte název hostitele na worker-node-1 a worker-node-2 a poté přidejte položky hostitele do /etc/hosts soubor.

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

Poté odešlete příkaz ping na svůj hlavní uzel ze svých pracovních uzlů a pomocí příkazu ping potvrďte, že váš aktualizovaný soubor hostitele funguje správně.

192.168.0.47

Dále vypněte SElinux a aktualizujte pravidla brány firewall.

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

Krok 2: Nastavte Docker-CE a Kubernetes Repo

Nejprve přidejte úložiště Docker pomocí správce konfigurací DNF.

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

Dále přidejte balíček 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 těmito dvěma nainstalovanými balíčky nainstalujte nejnovější verzi docker-ce.

dnf install docker-ce

Povolte a spusťte službu docker.

systemctl enable docker
systemctl start docker

Úložiště Kubernetes budete muset přidat ručně, protože nejsou předinstalovaná 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

Krok 3: Nainstalujte Kubeadm na CentOS 8

S úložištěm balíčků je nyní připraveno, můžete pokračovat a nainstalovat kubeadm.

dnf install kubeadm -y 

Spusťte a povolte službu.

systemctl enable kubelet
systemctl start kubelet

Krok 4: Připojte pracovní uzel ke clusteru Kubernetes

Pro připojení ke clusteru nyní potřebujeme token, který kubeadm init vygeneroval. Pokud jste jej někde zkopírovali, můžete jej zkopírovat a vložit do svého uzlu-1 a uzlu-2.

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

Jak je navrženo na posledním řádku, vraťte se do svého master-node a ověřte, zda se pracovní uzel-1 a pracovní uzel-2 připojili k cluster pomocí následujícího příkazu.

kubectl get nodes

Pokud všechny kroky proběhnou úspěšně, měli byste vidět node-1 a node-2 ve stavu připravenosti na master-node. V tomto okamžiku jste nyní úspěšně nasadili cluster Kubernetes na CentOS 8.

Doporučená četba: Jak nasadit Nginx na clusteru Kubernetes

Některá omezení

Cluster, který jsme zde vytvořili, má jeden Hlavní uzel, a jako takový, pokud selže Hlavní uzel, může váš cluster ztratit data a může být nutné jej znovu vytvořit od začátku.

Z tohoto důvodu doporučuji nastavení Highly Available.