Úvod
Kubernetes je open-source nástroj, ktorý je kľúčový v orchestrácii kontajnerov. Kubernetes funguje tak, že orchestruje a spravuje clustery vo veľkom rozsahu v rôznych cloudových prostrediach alebo dokonca na lokálnych serveroch. Cluster je skupina hostiteľov určená na spúšťanie kontajnerizovaných aplikácií a služieb. Cluster potrebuje na fungovanie minimálne dva uzly – jeden master uzol a worker uzol. S ohľadom na škálovateľnosť máte možnosť rozšíriť cluster o toľko worker uzlov, koľko je potrebné.
Uzol v Kubernetes označuje server. Master uzol je server, ktorý spravuje stav clustera. Worker uzly sú servery, na ktorých bežia pracovné zaťaženia – zvyčajne ide o kontajnerizované aplikácie a služby.
Tento sprievodca vás prevedie krokmi inštalácie a nasadenia Kubernetes clustera pozostávajúceho z dvoch uzlov na Ubuntu 20.04. Ako už bolo spomenuté, mať dva uzly je najzákladnejšia konfigurácia pri práci s Kubernetes. Po pochopení základov máte tiež možnosť pridať ďalšie worker uzly. Ďalej vám ukážeme, ako prepojiť tieto dva servery, aby master uzol mohol ovládať worker uzol.
Na otestovanie našej konfigurácie nasadíme do clustera Docker kontajner, v ktorom beží webový server Nginx do clustera. Toto je typické reálne využitie Kubernetes. Počas postupu sa dozviete viac o niektorých definujúcich komponentoch Kubernetes, ako sú kubectl a kubeadm . Odporúča sa tiež najprv sa oboznámiť s naším návodom na zoznámenie sa so základmi sady nástrojov Kubernetes, aby ste sa oboznámili so základmi platformy Kubernetes.
Teraz poďme na to!
Požiadavky
Budete musieť sprevádzkovať dva servery bežiace na Ubuntu 20.04. Pre najlepší výkon sú minimálne systémové požiadavky pre Kubernetes 2 GB RAM a 2 CPU. Môžete postupovať podľa krokov 1 až 4 tohto podrobného návodu, ktorý vám pomôže nastaviť váš Ubuntu server na CloudSigma. Jeden server bude master uzol, druhý bude worker uzol. Naše dva servery sme výstižne pomenovali ako kubernetes-master a kubernetes-worker. Vďaka tomu je jednoduchšie sledovať tento návod. Môžete si však slobodne vybrať hostnames, ktoré uprednostňujete.
-
Uistite sa, že na oboch uzloch pridáte používateľa s sudo privilégiami na oboch uzloch, ktoré použijeme na spúšťanie príkazov, ako je popísané v návode vyššie. Postupujte podľa tohto návodu na konfiguráciu súboru Linux sudoers, kde nájdete pokyny.
-
Sieťová konektivita – servery v clustri by mali byť schopné komunikovať. Keď nasadíte svoje VM z CloudSigma, budú predvolene pripojené k internetu s verejnou IP adresou. Ak pracujete z lokálnej siete, možno budete musieť upraviť svoj súbor /etc/hosts v každom serveri a vhodne ich prepojiť.
-
Na každom z uzlov budete musieť nainštalovať a povoliť Docker na každom z uzlov. Kubernetes sa spolieha na kontajnerové runtime prostredie na spúšťanie kontajnerov v podoch. Hoci existujú aj iné kontajnerové platformy, v tomto návode budeme používať Docker. Docker poskytne runtime prostredie potrebné pre Ubuntu. Môžete postupovať podľa krokov 1, 2 a 3 nášho návodu na inštaláciu a prevádzku Dockeru.
Krok 1: Inštalácia Kubernetes
V tomto kroku budeme inštalovať Kubernetes. Podobne ako pri Dockeri v časti požiadavky, musíte spustiť príkazy na oboch uzloch, aby ste nainštalovali Kubernetes. Použite ssh na prihlásenie do oboch uzlov a pokračujte. Začnete inštaláciou balíka apt-transport-https , ktorý umožňuje prácu s http a https v repozitároch Ubuntu. Tiež nainštalujte curl , pretože bude potrebný pre ďalšie kroky. Spustite nasledujúci príkaz:
|
1 |
sudo apt install apt-transport-https curl |
Potom pridajte Kubernetes podpisovací kľúč do oboch uzlov spustením príkazu:
|
1 |
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add |
Ďalej pridáme Kubernetes repozitár ako zdroj balíkov na oboch uzloch pomocou nasledujúceho príkazu:
|
1 2 |
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" >> ~/kubernetes.list sudo mv ~/kubernetes.list /etc/apt/sources.list.d |
Potom aktualizujte uzly:
|
1 |
sudo apt update |
- Nainštalujte nástroje Kubernetes
Po dokončení aktualizácie nainštalujeme Kubernetes. To zahŕňa inštaláciu rôznych nástrojov, ktoré tvoria Kubernetes: kubeadm, kubelet, kubectl, a kubernetes-cni. Tieto nástroje sú nainštalované na oboch uzloch. Každý nástroj definujeme nižšie:
-
kubelet – agent, ktorý beží na každom uzle a zabezpečuje komunikáciu s hlavným (master) uzlom na spustenie pracovných zaťažení v kontajnerovom prostredí. Pre inštaláciu kubelet zadajte nasledujúci príkaz:
|
1 |
sudo apt install kubelet |
-
kubeadm – súčasť projektu Kubernetes, ktorá pomáha inicializovať cluster Kubernetes. Pre inštaláciu kubeadm zadajte nasledujúci príkaz:
|
1 |
sudo apt install kubeadm |
-
kubectl – nástroj príkazového riadka pre Kubernetes, ktorý vám umožňuje spúšťať príkazy v rámci clustrov Kubernetes. Pre inštaláciu kubectl vykonajte nasledujúci príkaz:
|
1 |
sudo apt install kubectl |
-
kubernetes-cni – umožňuje sieťové prepojenie v rámci kontajnerov, čím zabezpečuje, že kontajnery môžu komunikovať a vymieňať si dáta. Pre inštaláciu vykonajte nasledujúci príkaz:
|
1 |
sudo apt-get install -y kubernetes-cni |
Voliteľne môžete nainštalovať všetky štyri jedným príkazom:
|
1 |
sudo apt-get install -y kubelet kubeadm kubectl kubernetes-cni |
Krok 2: Zakázanie swap pamäte
Kubernetes nefunguje v systéme, ktorý používa swap pamäť. Preto musí byť zakázaná na hlavnom (master) uzle aj na všetkých pracovných (worker) uzloch. Pre zakázanie swap pamäte vykonajte nasledujúci príkaz:
|
1 |
sudo swapoff -a |
Tento príkaz zakáže swap pamäť do reštartu systému. Musíme zabezpečiť, aby zostala vypnutá aj po reštarte. To sa musí vykonať na hlavnom uzle aj na všetkých pracovných uzloch. Môžeme to urobiť úpravou súboru fstab súbor a zakomentovaním riadku /swapfile pomocou #. Otvorte súbor v textovom editore nano zadaním nasledujúceho príkazu:
|
1 |
sudo nano /etc/fstab |
V súbore zakomentujte riadok swapfile tak, ako je to znázornené na snímke obrazovky nižšie:

Ak riadok swapfile nevidíte, jednoducho ho ignorujte. Po dokončení úprav súbor uložte a zatvorte. Postupujte rovnako pre oba uzly. Nastavenia swap pamäte teraz zostanú vypnuté aj po reštarte servera.
Krok 3: Nastavenie jedinečných názvov hostiteľov
Vaše uzly must have jedinečné názvy hostiteľov pre jednoduchšiu identifikáciu. Ak nasadzujete cluster s mnohými uzlami, môžete nastaviť identifikačné názvy pre vaše pracovné uzly, napríklad node-1, node-2 atď. Ako sme už spomínali, naše uzly sme pomenovali ako kubernetes-master a kubernetes-worker. Nastavili sme ich pri vytváraní servera. Ak ste tak však ešte neurobili, môžete si ich prispôsobiť alebo nastaviť z príkazového riadka. Ak chcete upraviť názov hostiteľa na hlavnom uzle, spustite nasledujúci príkaz:
|
1 |
sudo hostnamectl set-hostname kubernetes-master |
Na pracovnom uzle spustite nasledujúci príkaz:
|
1 |
sudo hostnamectl set-hostname kubernetes-worker |
Môžete zatvoriť aktuálnu reláciu terminálu a znova sa pripojiť cez ssh k serveru, aby ste videli zmeny.
Krok 4: Povolenie pre Iptables vidieť premostenú prevádzku
Aby hlavný a pracovné uzly správne videli premostenú prevádzku, mali by ste sa uistiť, že net.bridge.bridge-nf-call-iptables je vo vašej konfigurácii nastavené na 1. Najprv sa uistite, že je načítaný modul br_netfilter. Môžete to potvrdiť zadaním príkazu:
|
1 |
lsmod | grep br_netfilter |
Voliteľne ho môžete explicitne načítať príkazom:
|
1 |
sudo modprobe br_netfilter |
Teraz môžete spustiť tento príkaz na nastavenie hodnoty na 1:
|
1 |
sudo sysctl net.bridge.bridge-nf-call-iptables=1 |
Krok 5: Zmena ovládača Docker Cgroup
V predvolenom nastavení sa Docker inštaluje s “cgroupfs” ako ovládačom cgroup. Kubernetes odporúča , aby Docker bežal s “systemd” ako ovládačom. Ak tento krok vynecháte a pokúsite sa inicializovať kubeadm v nasledujúcom kroku, v termináli sa zobrazí nasledujúce varovanie:
|
1 2 |
[preflight] Spúšťanie pred-letových kontrol [VAROVANIE IsDockerSystemdCheck]: detegované "cgroupfs" ako the Docker cgroup ovládač. Odporúčaný recommended ovládač je "systemd". Postupujte podľa návodu na adrese https://kubernetes.io/docs/setup/cri/ |
Na hlavnom aj pracovnom uzle aktualizujte cgroupdriver pomocou nasledujúcich príkazov:
|
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 |
Potom vykonajte nasledujúce príkazy na reštartovanie a povolenie Dockera pri spúšťaní systému:
|
1 2 3 |
sudo systemctl enable docker sudo systemctl daemon-reload sudo systemctl restart docker |
Keď je to nastavené, môžeme prejsť k tej zábavnejšej časti, nasadeniu Kubernetes klastra!
Krok 6: Inicializácia hlavného uzla (Master Node) Kubernetes
Prvým krokom pri nasadzovaní Kubernetes klastra je spustenie hlavného uzla. V termináli vášho hlavného uzla vykonajte nasledujúci príkaz na inicializáciu kubernetes-master:
|
1 |
sudo kubeadm init --pod-network-cidr=10.244.0.0/16 |
Ak vykonáte vyššie uvedený príkaz a váš systém nespĺňa očakávané požiadavky, ako je minimálna pamäť RAM alebo CPU, ako je vysvetlené v časti Požiadavky, dostanete varovanie a klaster sa nespustí:

Snímka obrazovky nižšie ukazuje, že inicializácia bola úspešná. Pridali sme tiež príznak na špecifikáciu siete podov s IP adresou 10.244.0.0. Je to predvolená IP adresa, ktorú kube-flannel používa. Viac o sieti podov si povieme v nasledujúcom kroku.

Na výstupe môžete vidieť príkaz kubeadm join (skryli sme našu IP adresu) a jedinečný token, ktorý spustíte na pracovnom uzle a všetkých ostatných pracovných uzloch, ktoré chcete pripojiť k tomuto klastru. Potom tento príkaz skopírujte a vložte, pretože ho neskôr použijete v pracovnom uzle.
Na výstupe Kubernetes zobrazuje aj niektoré ďalšie príkazy, ktoré by ste mali spustiť ako bežný používateľ na hlavnom uzle pred spustením klastra. Spustime tieto prí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 |
Teraz sme inicializovali hlavný uzol. Pred pripojením pracovných uzlov však musíme na hlavnom uzle nastaviť aj sieť podov.
Krok 7: Nasadenie siete podov (Pod Network)
Sieť podov uľahčuje komunikáciu medzi servermi a je nevyhnutná pre správne fungovanie Kubernetes klastra. Viac o sieťovaní klastrov Kubernetes sa dočítate v oficiálnej dokumentácii. V tomto návode budeme používať sieť podov Flannel. Flannel je jednoduchá prekryvná sieť (overlay network), ktorá spĺňa požiadavky Kubernetes.
Pred nasadením siete podov musíme skontrolovať stav firewallu. Ak ste povolili firewall po vykonaní kroku 5 v návode na nastavenie servera Ubuntu, musíte najprv pridať firewallové pravidlo na vytvorenie výnimiek pre port 6443 (predvolený port pre Kubernetes). Spustite nasledujúce príkazy ufw na hlavnom (master) aj pracovnom (worker) uzle:
|
1 2 |
sudo ufw allow 6443 sudo ufw allow 6443/tcp |
Potom môžete spustiť nasledujúce dva príkazy na nasadenie siete podov na hlavnom (master) uzle:
|
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čítanie siete flannel môže trvať od niekoľkých sekúnd do minúty v závislosti od vášho prostredia. Spustením nasledujúceho príkazu potvrďte, že je všetko spustené:
|
1 |
kubectl get pods --all-namespaces |
Ak bolo všetko úspešné, výstup príkazu by mal zobrazovať stav všetkých služieb ako spustený (running):

Môžete si tiež zobraziť stav komponentov pomocou príkazu get component status:
|
1 |
kubectl get componentstatus |

Tento príkaz má skrátenú formu cs:
|
1 |
kubectl get cs |

Ak vidíte nezdravý stav (unhealthy), upravte nasledujúce súbory a vymažte riadok v (spec->containers->command) obsahujúci túto frázu - --port=0 :
|
1 |
sudo nano /etc/kubernetes/manifests/kube-scheduler.yaml |
Urobte to isté pre tento súbor:
|
1 |
sudo nano /etc/kubernetes/manifests/kube-controller-manager.yaml |
Nakoniec reštartujte službu Kubernetes:
|
1 |
sudo systemctl restart kubelet.service |
Krok 8: Pripojenie pracovných uzlov (Worker Nodes) ku Kubernetes clusteru
Keď je kubernetes-master uzol spustený a sieť podov je pripravená, môžeme k clusteru pripojiť naše pracovné uzly. V tomto návode máme iba jeden pracovný uzol, takže budeme pracovať s ním. Ak máte viac pracovných uzlov, môžete na ich pripojenie k clusteru kedykoľvek použiť rovnaké kroky, aké vysvetlíme nižšie.
Najprv sa prihláste do svojho pracovného uzla v samostatnej relácii terminálu. Použijete svoj príkaz kubeadm join, ktorý sa zobrazil vo vašom termináli, keď sme inicializovali hlavný uzol v Kroku 6. Spustite príkaz:
|
1 |
sudo kubeadm join 127.0.0.188:6443 --token u81y02.91gqwkxx6rnhnnly --discovery-token-ca-cert-hash sha256:4482ab1c66bf17992ea02c1ba580f4af9f3ad4cc37b24f189db34d6e3fe95c2d |
Po dokončení pripájania k clusteru by ste mali vidieť podobný výstup ako na snímke obrazovky nižšie:

Po dokončení procesu pripájania sa prepnite do terminálu hlavného uzla a spustením nasledujúceho príkazu potvrďte, že sa váš pracovný uzol pripojil k clusteru:
|
1 |
kubectl get nodes |
Na snímke obrazovky z výstupu vyššie uvedeného príkazu môžeme vidieť, že pracovný uzol sa pripojil k clusteru:

Krok 9: Nasadenie aplikácie do Kubernetes clustera
V tomto bode ste úspešne nastavili Kubernetes cluster. Poďme cluster spraviť užitočným nasadením služby. Nginx is a populárny webový server, ktorý sa pýši neuveriteľnou rýchlosťou aj pri tisíckach pripojení. Nasadíme webový server Nginx do clustera, aby sme dokázali, že toto nastavenie môžete použiť v reálnej aplikácii.
Spustením nasledujúceho príkazu na hlavnom uzle vytvorte Kubernetes deployment pre Nginx:
|
1 |
kubectl create deployment nginx --image=nginx |
Vytvorený deployment si môžete zobraziť pomocou príkazu describe deployment:
|
1 |
kubectl describe deployment nginx |

To make the nginx service accessible via the internet, run the following command:
|
1 |
kubectl create service nodeport nginx --tcp=80:80 |

The command above will create a public-facing service for the Nginx deployment. This being a nodeport deployment, Kubernetes assigns the service a port in the range of 32000+.
You can get the current services by issuing the command:
|
1 |
kubectl get svc |

You can see that our assigned port is 32264. Take note of the port displayed in your terminal to use in the next step.
To verify that the Nginx service deployment is successful, issue a curl call to the worker node from the master. Replace your worker node IP and the port you got from the above command:
|
1 |
curl your-kubernetes-worker-ip:32264 |
You should see the output of the default Nginx index.html:

Optionally, you can visit the worker node IP address and port combination in your browser and view the default Nginx index page:

You can delete a deployment by specifying the name of the deployment. For example, this command will delete our deployment:
|
1 |
kubectl delete deployment nginx |
We have now successfully tested our cluster!
Conclusion
In this tutorial, you have learned how to install a Kubernetes cluster on Ubuntu 20.04. You set up a cluster consisting of a master and worker node. You were able to install the Kubernetes toolset, created a pod network, and joined the worker node to the master node. We also tested our concept by doing a basic deployment of an Nginx webserver to the cluster. This should work as a foundation to working with Kubernetes clusters on Ubuntu.
While we only used one worker node, you can extend your cluster with as many nodes as you wish. If you would like to get deeper into DevOps with automation tools like Ansible, we have a tutorial that delves into provisioning Kubernetes cluster deployments with Ansible and Kubeadm, check it out. If you want to learn how to deploy a PHP application on a Kubernetes cluster check this tutorial.
Happy Computing!
Komentáre
Zatiaľ žiadne komentáre. Buďte prvý.