Úvod
Kubernetes je open-source nástroj, který je klíčový pro orchestraci kontejnerů. Kubernetes funguje tak, že orchestruje a spravuje clustery ve velkém měřítku v různých cloudových prostředích nebo dokonce na lokálních serverech. Cluster je sada hostitelů určených pro spouštění kontejnerizovaných aplikací a služeb. Cluster potřebuje ke svému fungování minimálně dva uzly – jeden master uzel a worker uzel. S ohledem na škálovatelnost máte možnost rozšířit cluster o tolik pracovních uzlů, kolik je potřeba.
Uzel v Kubernetes označuje server. Master uzel je server, který spravuje stav clusteru. Worker uzly jsou servery, na kterých běží pracovní zátěž – obvykle se jedná o kontejnerizované aplikace a služby.
Tento průvodce vás provede kroky instalace a nasazení Kubernetes clusteru skládajícího se ze dvou uzlů na Ubuntu 20.04. Jak již bylo zmíněno, mít dva uzly je nejzákladnější konfigurace při práci s Kubernetes. Jakmile pochopíte základy, máte také možnost přidat další worker uzly. Dále vám ukážeme, jak oba servery propojit, aby mohl master uzel ovládat worker uzel.
Chcete-li otestovat naši konfiguraci, nasadíme do clusteru Docker kontejner běžící na webovém serveru Nginx do clusteru. Jedná se o typické reálné využití Kubernetes. Postupně se dozvíte více o některých definujících součástech Kubernetes, jako jsou kubectl a kubeadm v průběhu práce. Doporučujeme také se nejprve seznámit s naším návodem na seznámení se se základy sady nástrojů Kubernetes, abyste se seznámili se základy platformy Kubernetes.
Nyní můžeme začít!
Požadavky
Budete muset zprovoznit dva servery běžící na Ubuntu 20.04. Pro nejlepší výkon jsou minimální systémové požadavky pro Kubernetes 2 GB RAM a 2 CPU. Můžete postupovat podle kroků 1 až 4 tohoto podrobného návodu, který vám pomůže nastavit váš server Ubuntu na CloudSigma. Jeden server bude master uzel, druhý bude worker uzel. Naše dva servery jsme výstižně pojmenovali jako kubernetes-master a kubernetes-worker. To usnadňuje sledování návodu. Můžete si však libovolně zvolit hostnames, které preferujete.
-
Ujistěte se, že na obou uzlech přidáte uživatele s oprávněními sudo, kterého použijeme ke spouštění příkazů, jak je popsáno v návodu výše. Postupujte podle tohoto návodu na konfiguraci souboru Linux sudoers, kde najdete pokyny.
-
Síťová konektivita – servery v clusteru by měly být schopny komunikovat. Když nasadíte své VM z CloudSigma, budou ve výchozím nastavení připojeny k internetu s veřejnou IP adresou. Pokud pracujete z lokální sítě, možná budete muset upravit soubor /etc/hosts v každém serveru a správně je propojit.
-
Na každém z uzlů budete muset nainstalovat a povolit Docker na každém z uzlů. Kubernetes spoléhá na kontejnerové běhové prostředí (runtime) pro spouštění kontejnerů v podech. I když existují jiné kontejnerové platformy, v tomto návodu budeme používat Docker. Docker poskytne běhové prostředí potřebné pro Ubuntu. Můžete postupovat podle kroků 1, 2 a 3 našeho návodu na instalaci a provozování Dockeru.
Krok 1: Instalace Kubernetes
V tomto kroku budeme instalovat Kubernetes. Stejně jako u Dockeru v požadavcích, musíte spustit příkazy na obou uzlech, abyste nainstalovali Kubernetes. Použijte ssh pro přihlášení k oběma uzlům a pokračujte. Začnete instalací balíčku apt-transport-https, který umožňuje práci s http a https v repozitářích Ubuntu. Dále nainstalujte curl, protože bude nezbytný pro další kroky. Spusťte následující příkaz:
|
1 |
sudo apt install apt-transport-https curl |
Poté přidejte Kubernetes podpisový klíč k oběma uzlům spuštěním příkazu:
|
1 |
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add |
Dále přidáme Kubernetes repozitář jako zdroj balíčků na obou uzlech pomocí následujícího příkazu:
|
1 2 |
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" >> ~/kubernetes.list sudo mv ~/kubernetes.list /etc/apt/sources.list.d |
Poté aktualizujte uzly:
|
1 |
sudo apt update |
- Instalace nástrojů Kubernetes
Jakmile se aktualizace dokončí, nainstalujeme Kubernetes. To zahrnuje instalaci různých nástrojů, které tvoří Kubernetes: kubeadm, kubelet, kubectl, a kubernetes-cni. Tyto nástroje se instalují na oba uzly. Níže definujeme jednotlivé nástroje:
-
kubelet – agent, který běží na každém uzlu a zajišťuje komunikaci s hlavním uzlem (master) za účelem spouštění úloh v kontejnerovém prostředí. Pro instalaci kubeletu zadejte následující příkaz:
|
1 |
sudo apt install kubelet |
-
kubeadm – součást projektu Kubernetes, která pomáhá inicializovat cluster Kubernetes. Pro instalaci kubeadm zadejte následující příkaz:
|
1 |
sudo apt install kubeadm |
-
kubectl – nástroj příkazové řádky pro Kubernetes, který umožňuje spouštět příkazy uvnitř clusterů Kubernetes. Pro instalaci kubectl spusťte následující příkaz:
|
1 |
sudo apt install kubectl |
-
kubernetes-cni – umožňuje síťové propojení uvnitř kontejnerů a zajišťuje, že kontejnery mohou komunikovat a vyměňovat si data. Pro instalaci spusťte následující příkaz:
|
1 |
sudo apt-get install -y kubernetes-cni |
Volitelně můžete nainstalovat všechny čtyři jedním příkazem:
|
1 |
sudo apt-get install -y kubelet kubeadm kubectl kubernetes-cni |
Krok 2: Deaktivace odkládací paměti (Swap)
Kubernetes nefunguje v systému, který používá swap paměť. Proto musí být zakázána na hlavním uzlu i na všech pracovních uzlech. Pro deaktivaci swapu spusťte následující příkaz:
|
1 |
sudo swapoff -a |
Tento příkaz zakáže swapovou paměť do restartu systému. Musíme zajistit, aby zůstala vypnutá i po restartu. To je nutné provést na hlavním uzlu i na všech pracovních uzlech. Můžeme to udělat úpravou souboru fstab souboru a zakomentováním řádku /swapfile pomocí #. Otevřete soubor v textovém editoru nano zadáním následujícího příkazu:
|
1 |
sudo nano /etc/fstab |
Uvnitř souboru zakomentujte řádek swapfile tak, jak je znázorněno na snímku obrazovky níže:

Pokud řádek swapfile nevidíte, jednoduše jej ignorujte. Po dokončení úprav soubor uložte a zavřete. Stejný postup opakujte pro oba uzly. Nyní zůstane nastavení swapové paměti vypnuté i po restartu serveru.
Krok 3: Nastavení jedinečných názvů hostitelů (Hostnames)
Vaše uzly musí mít jedinečné názvy hostitelů pro snazší identifikaci. Pokud nasazujete cluster s mnoha uzly, můžete nastavit identifikační názvy pro své pracovní uzly, například node-1, node-2 atd. Jak jsme již zmínili dříve, naše uzly jsme pojmenovali jako kubernetes-master a kubernetes-worker. Nastavili jsme je při vytváření serveru. Pokud jste tak však ještě neučinili, můžete své názvy upravit nebo nastavit z příkazové řádky. Chcete-li upravit název hostitele na hlavním uzlu, spusťte následující příkaz:
|
1 |
sudo hostnamectl set-hostname kubernetes-master |
Na pracovním uzlu spusťte následující příkaz:
|
1 |
sudo hostnamectl set-hostname kubernetes-worker |
Můžete zavřít aktuální relaci terminálu a ssh se znovu připojit k serveru, abyste viděli změny.
Krok 4: Povolení zobrazení přemostěného provozu pro Iptables
Aby hlavní a pracovní uzly správně viděly přemostěný provoz, měli byste se ujistit, že net.bridge.bridge-nf-call-iptables je ve vaší konfiguraci nastaveno na 1. Nejprve se ujistěte, že je načten modul br_netfilter module is loaded. You can confirm this by issuing the command:
|
1 |
lsmod | grep br_netfilter |
Volitelně jej můžete explicitně načíst příkazem:
|
1 |
sudo modprobe br_netfilter |
Nyní můžete spustit tento příkaz pro nastavení hodnoty na 1:
|
1 |
sudo sysctl net.bridge.bridge-nf-call-iptables=1 |
Krok 5: Změna Docker Cgroup Driveru
Ve výchozím nastavení se Docker instaluje s “cgroupfs” jako cgroup driverem. Kubernetes doporučuje , aby Docker běžel s “systemd” jako driverem. Pokud tento krok přeskočíte a pokusíte se inicializovat kubeadm v dalším kroku, zobrazí se v terminálu následující varování:
|
1 2 |
[preflight] Spouštění pre-flight kontrol [VAROVÁNÍ IsDockerSystemdCheck]: detekováno "cgroupfs" jako the Docker cgroup driver. The doporučený driver je "systemd". Prosím postupujte podle the příručky na https://kubernetes.io/docs/setup/cri/ |
Na hlavním (master) i pracovním (worker) uzlu aktualizujte cgroupdriver pomocí následujících příkazů:
|
1 2 3 4 5 6 7 8 9 |
sudo mkdir /etc/docker cat <<EOF | sudo tee /etc/docker/daemon.json { "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "storage-driver": "overlay2" } EOF |
Poté spusťte následující příkazy pro restartování a povolení Dockeru při spuštění systému:
|
1 2 3 |
sudo systemctl enable docker sudo systemctl daemon-reload sudo systemctl restart docker |
Jakmile je to nastaveno, můžeme přejít k té zábavnější části, nasazení Kubernetes clusteru!
Krok 6: Inicializace hlavního uzlu (Master Node) Kubernetes
Prvním krokem při nasazení Kubernetes clusteru je spuštění hlavního uzlu. V terminálu vašeho hlavního uzlu spusťte následující příkaz pro inicializaci kubernetes-master:
|
1 |
sudo kubeadm init --pod-network-cidr=10.244.0.0/16 |
Pokud spustíte výše uvedený příkaz a váš systém nesplňuje očekávané požadavky, jako je minimální velikost paměti RAM nebo počet CPU, jak je vysvětleno v sekci Požadavky, zobrazí se varování a cluster se nespustí:

Snímek obrazovky níže ukazuje, že inicializace byla úspěšná. Přidali jsme také příznak pro specifikaci sítě podů s IP adresou 10.244.0.0. Je to výchozí IP adresa, kterou kube-flannel používá. Více o síti podů si povíme v dalším kroku.

Na výstupu můžete vidět příkaz kubeadm join (skryli jsme naši IP adresu) a jedinečný token, který spustíte na pracovním uzlu a všech ostatních pracovních uzlech, které chcete k tomuto clusteru připojit. Dále tento příkaz zkopírujte a vložte, protože jej později použijete na pracovním uzlu.
Na výstupu Kubernetes také zobrazuje některé další příkazy, které byste měli spustit jako běžný uživatel na hlavním uzlu předtím, než začnete cluster používat. Spusťme tyto příkazy:
|
1 2 3 |
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config |
Nyní jsme inicializovali hlavní uzel. Před připojením pracovních uzlů však musíme na hlavním uzlu nastavit také síť podů.
Step 7: Deploying a Pod Network
Síť podů usnadňuje komunikaci mezi servery a je nezbytná pro správné fungování Kubernetes clusteru. Více o síťování Kubernetes clusteru se dozvíte v oficiální dokumentaci. V tomto návodu budeme používat síť podů Flannel. Flannel je jednoduchá překryvná síť (overlay network), která splňuje požadavky Kubernetes.
Před nasazením sítě podů musíme zkontrolovat stav firewallu. Pokud jste povolili firewall po provedení kroku 5 návodu na nastavení serveru Ubuntu, musíte nejprve přidat firewallové pravidlo pro vytvoření výjimek pro port 6443 (výchozí port pro Kubernetes). Spusťte následující ufw příkazy na master i worker uzlech:
|
1 2 |
sudo ufw allow 6443 sudo ufw allow 6443/tcp |
Poté můžete spustit následující dva příkazy pro nasazení sítě podů na master uzlu:
|
1 2 |
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/k8s-manifests/kube-flannel-rbac.yml |
Načtení sítě flannel může v závislosti na vašem prostředí trvat od několika sekund do minuty. Spuštěním následujícího příkazu potvrďte, že je vše spuštěno:
|
1 |
kubectl get pods --all-namespaces |
Pokud vše proběhlo úspěšně, výstup příkazu by měl ukazovat stav všech služeb jako běžící (running):

Můžete také zobrazit stav komponent pomocí příkazu get component status:
|
1 |
kubectl get componentstatus |

Tento příkaz má zkrácenou formu cs:
|
1 |
kubectl get cs |

Pokud uvidíte stav unhealthy (nezdravý), upravte následující soubory a odstraňte řádek v (spec->containers->command) obsahující tuto frázi - --port=0 :
|
1 |
sudo nano /etc/kubernetes/manifests/kube-scheduler.yaml |
Udělejte totéž pro tento soubor:
|
1 |
sudo nano /etc/kubernetes/manifests/kube-controller-manager.yaml |
Nakonec restartujte službu Kubernetes:
|
1 |
sudo systemctl restart kubelet.service |
Krok 8: Připojení pracovních uzlů (worker nodes) ke clusteru Kubernetes
S kubernetes-master uzlem v provozu a připravenou sítí podů můžeme k našemu clusteru připojit pracovní uzly. V tomto návodu máme pouze jeden pracovní uzel, takže budeme pracovat s ním. Pokud máte více pracovních uzlů, můžete pro připojení ke clusteru vždy postupovat podle stejných kroků, které vysvětlíme níže.
Nejprve se přihlaste ke svému pracovnímu uzlu v samostatné relaci terminálu. Použijete svůj příkaz kubeadm join, který se zobrazil ve vašem terminálu, když jsme inicializovali master uzel v Kroku 6. Spusťte příkaz:
|
1 |
sudo kubeadm join 127.0.0.188:6443 --token u81y02.91gqwkxx6rnhnnly --discovery-token-ca-cert-hash sha256:4482ab1c66bf17992ea02c1ba580f4af9f3ad4cc37b24f189db34d6e3fe95c2d |
Po dokončení připojení ke clusteru byste měli vidět podobný výstup jako na snímku obrazovky níže:

Jakmile je proces připojení dokončen, přepněte se do terminálu master uzlu a spuštěním následujícího příkazu potvrďte, že se váš pracovní uzel připojil ke clusteru:
|
1 |
kubectl get nodes |
Na snímku obrazovky z výstupu výše uvedeného příkazu vidíme, že se pracovní uzel připojil ke clusteru:

Krok 9: Nasazení aplikace do clusteru Kubernetes
V tomto okamžiku jste úspěšně nastavili cluster Kubernetes. Pojďme cluster zprovoznit nasazením služby. Nginx je populární webový server, který se pyšní neuvěřitelnou rychlostí i při tisících připojení. Nasadíme webový server Nginx do clusteru, abychom dokázali, že toto nastavení můžete použít v reálné aplikaci.
Spuštěním následujícího příkazu na master uzlu vytvořte Kubernetes deployment pro Nginx:
|
1 |
kubectl create deployment nginx --image=nginx |
Vytvořený deployment můžete zobrazit pomocí příkazu describe deployment:
|
1 |
kubectl describe deployment nginx |

Aby byla nginx služba přístupná přes internet, spusťte následující příkaz:
|
1 |
kubectl create service nodeport nginx --tcp=80:80 |

Výše uvedený příkaz vytvoří veřejně přístupnou službu pro deployment Nginx. Vzhledem k tomu, že se jedná o nodeport deployment, Kubernetes přiřadí službě port v rozsahu 32000+.
Aktuální služby můžete získat spuštěním příkazu:
|
1 |
kubectl get svc |

Můžete vidět, že náš přiřazený port je 32264. Poznamenejte si port zobrazený v terminálu, abyste jej mohli použít v dalším kroku.
Chcete-li ověřit, že nasazení služby Nginx bylo úspěšné, proveďte volání curl na worker uzel z master uzlu. Nahraďte IP adresu vašeho worker uzlu a port, který jste získali z výše uvedeného příkazu:
|
1 |
curl your-kubernetes-worker-ip:32264 |
Měli byste vidět výstup výchozího Nginx index.html:

Volitelně můžete v prohlížeči navštívit kombinaci IP adresy a portu worker uzlu a zobrazit výchozí indexovou stránku Nginx:

Můžete smazat deployment zadáním jeho názvu. Tento příkaz například smaže náš deployment:
|
1 |
kubectl delete deployment nginx |
Nyní jsme úspěšně otestovali náš cluster!
Závěr
V tomto návodu jste se naučili, jak nainstalovat Kubernetes cluster na Ubuntu 20.04. Nastavili jste cluster skládající se z master a worker uzlu. Podařilo se vám nainstalovat sadu nástrojů Kubernetes, vytvořit síť podů a připojit worker uzel k master uzlu. Náš koncept jsme také otestovali provedením základního nasazení webového serveru Nginx do clusteru. To by mělo sloužit jako základ pro práci s Kubernetes clustery na Ubuntu.
Ačkoli jsme použili pouze jeden worker uzel, můžete svůj cluster rozšířit o libovolný počet uzlů. Pokud byste chtěli proniknout hlouběji do DevOps s automatizačními nástroji jako Ansible, máme pro vás návod, který se zabývá přípravou nasazení Kubernetes clusterů pomocí nástrojů Ansible a Kubeadm, podívejte se na něj. Pokud se chcete naučit jak nasadit PHP aplikaci na Kubernetes cluster, podívejte se na tento návod.
Ať se daří!
Komentáře
Zatím žádné komentáře. Buďte první.