Zpět na blog

Jak nainstalovat a používat Kubernetes na Ubuntu 20.04

Jak nainstalovat a používat Kubernetes na Ubuntu 20.04

Ú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:

Poté přidejte Kubernetes podpisový klíč k oběma uzlům spuštěním příkazu:

Dále přidáme Kubernetes repozitář jako zdroj balíčků na obou uzlech pomocí následujícího příkazu:

Poté aktualizujte uzly:

  • 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:

  • kubeadm – součást projektu Kubernetes, která pomáhá inicializovat cluster Kubernetes. Pro instalaci kubeadm zadejte následující příkaz:

  • 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:

  • 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:

Volitelně můžete nainstalovat všechny čtyři jedním příkazem:

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:

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:

Uvnitř souboru zakomentujte řádek swapfile tak, jak je znázorněno na snímku obrazovky níže:

install Kubernetes fstab swap disable

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:

Na pracovním uzlu spusťte následující příkaz:

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:

Volitelně jej můžete explicitně načíst příkazem:

Nyní můžete spustit tento příkaz pro nastavení hodnoty na 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í:

Na hlavním (master) i pracovním (worker) uzlu aktualizujte cgroupdriver pomocí následujících příkazů:

Poté spusťte následující příkazy pro restartování a povolení Dockeru při spuštění systému:

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:

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í:

install Kubernetes InitError

Poznámka: Pokud stavíte produkční prostředí, je dobré vždy splnit minimální požadavky, aby Kubernetes běžel hladce. Pokud však tento návod procházíte pouze pro účely učení, můžete k příkazu kubeadm init přidat následující příznak, který varování o chybách ignoruje:
sudo kubeadm init --ignore-preflight-errors=NumCPU,Mem --pod-network-cidr=10.244.0.0/16

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.

install Kubernetes Kubeadm Init

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:

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:

Poté můžete spustit následující dva příkazy pro nasazení sítě podů na master uzlu:

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:

Pokud vše proběhlo úspěšně, výstup příkazu by měl ukazovat stav všech služeb jako běžící (running):

install Kubernetes Pod Status

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

install Kubernetes Component Status

Tento příkaz má zkrácenou formu cs:

Component Status Short

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 :

Udělejte totéž pro tento soubor:

Nakonec restartujte službu Kubernetes:

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:

Po dokončení připojení ke clusteru byste měli vidět podobný výstup jako na snímku obrazovky níže:

Worker Join

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:

Na snímku obrazovky z výstupu výše uvedeného příkazu vidíme, že se pracovní uzel připojil ke clusteru:

install Kubernetes K8S Node Status

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:

Vytvořený deployment můžete zobrazit pomocí příkazu describe deployment:

Nginx Deployment

Aby byla nginx služba přístupná přes internet, spusťte následující příkaz:

NodePort Svc Create

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:

NodePort Svc Status

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:

Měli byste vidět výstup výchozího Nginx index.html:

Curl Nginx Svc

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:

install Kubernetes Nginx Webpage

Můžete smazat deployment zadáním jeho názvu. Tento příkaz například smaže náš deployment:

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ří!

author

Pranay Kapgate

Autor · CloudSigma

Preslav Dobrev je kreativní designér ve společnosti CloudSigma, který se zaměřuje na konzistentní firemní identitu prostřednictvím tradičních i inovativních marketingových kanálů. Je zdatný v propojování umělecké vize se strategickým marketingem za účelem vytváření působivých příběhů značky.

Komentáře

Zatím žádné komentáře. Buďte první.