Kubernetes – 2. Nody, pody a služby

V predošlom diele sme Kubernetes predstavili z hľadiska histórie a architektúry. Tiež sme nainštalovali malý Kubernetes (minikube), aby mohol Kubernetes skúšať ktokoľvek na bežne dostupnom počítači.

V tomto diele si ukážeme inštaláciu veľkého Kubernetes (1x master + 2x workers), pričom správcu (master) umiestnime na samostatný virtuálny server. A každý z uzlov (worker 1 a 2) pôjdu tak isto na samostatné virtuálne servery.

Chcete si vytvoriť vlastný Kubernetes (K8s) klaster? Vyskúšajte si ho vo Virtuálnom dátovom centre od Websupportu.

Tento návod funguje na linuxovom operačnom systéme Ubuntu vo verzii 20.04 LTS (Focal Fossa). Ide o verziu LTS (Long Term Support = dlhodobá podpora), ktorá bola zverejnená 23. 04. 2020 a je oficiálne podporovaná softvérovou spoločnosťou Canonical 5 rokov od vydania, čiže do apríla 2025. Vývojári sa v LTS vo zvýšenej miere zameriavajú na bezpečnosť a hardvérovú kompatibilitu, aby bolo možné nasadenie na enterprise úrovni.

Inštalujeme Kubernetes Cluster

Príkazmi nižšie zabezpečíme aktuálnosť všetkých balíkov systému, poupratujeme v existujúcich balíkoch a doinštalujeme potrebný softvér na VPS s hostname master (tu IP adresa 10.1.1.25), worker-1 (tu IP adresa 10.1.1.9) a worker-2 (tu IP adresa 10.1.1.11):

sudo apt update && sudo apt upgrade -y
sudo apt clean && sudo apt autoremove
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common

Okrem vyššie zadaného softvéru je potrebné doinštalovať, nastaviť a reštartovať kontajnerizačné prostredie containerd na VPS master a tiež na oba VPS worker-1 a worker-2:

cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter
cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf
net.bridge.bridge-nf-call-iptables  = 1
net.ipv4.ip_forward                 = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF
sudo sysctl --system
sudo apt-get update && sudo apt-get install -y containerd
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
sudo systemctl restart containerd

Do všetkých troch VPS pridáme podpisové kľúče a samotný repozitár, z ktorého budeme inštalovať Kubernetes:

curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl

Zakazujeme pamäť swap

V prípade ak je na OS Ubuntu zapnuté používanie pamäte swap, Kubernetes nebude fungovať. Aby sme teda mohli pokračovať, je potrebné vypnúť používanie pamäte swap na všetkých troch VPS (prvý riadok). Aby pamäť swap ostala vypnutá aj po reštarte, musíme ešte riadok s obsahom /swapfile v súbore /etc/fstab odkomentovať mriežkou na začiatku riadka (druhý riadok), takže obsah riadka zmeníme na #/swapfile. Zmeny uložíme pomocou klávesovej skratky Ctrl + X a následne stlačením klávesa y a potvrdením klávesom Enter.

sudo swapoff -a
sudo nano /etc/fstab

Odteraz sa súbor /swapfile nebude používať a môžeme pokračovať v nastavovaní vhodného prostredia na inštaláciu Kubernetes Clustera.

Nastavujeme jedinečné hostiteľské názvy

Aby sme zabezpečili správnu funkčnosť Kubernetes, je potrebné nastaviť unikátne hostiteľské názvy (hostnames) na každom z troch VPS. Správcovi nastavíme názov master (prvý riadok), prvému pracovníkovi worker-1 (druhý riadok) a druhému pracovníkovi worker-2 (tretí riadok):

sudo hostnamectl set-hostname master
sudo hostnamectl set-hostname worker-1
sudo hostnamectl set-hostname worker-2

Zmena hostiteľského názvu sa prejaví až po otvorení nového príkazového riadku. V tom aktuálnom príkazovom riadku teda bude stále uvedený starý hostiteľský názov. Môžeme pokračovať v nastavovaní vhodného prostredia na inštaláciu Kubernetes Clustera.

Overujem správne nastavenie dátumu a času

Aby sme predišli problému s neplatnými TLS certifikátmi, skontrolujeme na všetkých troch VPS, či máme jednotne nastavený dátum a čas, resp. či sa dátum a čas synchronizujú automaticky (System clock synchronized: yes) a či sú všetky tri VPS v rovnakej časovej zóne (Time zone). Postačí nám na to jediný príkaz:

timedatectl

Ak je automatická synchronizácia dátumu a času vypnutá (System clock synchronized: no), zapneme ju a počkáme, dokým sa dátum a čas automaticky nastavia:

sudo timedatectl set-ntp on

Ak sa dátum a čas automaticky synchronizovali, môžeme pokračovať v nastavovaní vhodného prostredia na inštaláciu Kubernetes Clustera.

Spúšťame Kubernetes master server

Na VPS s hostiteľským názvom master spustíme príkaz:

sudo kubeadm init --pod-network-cidr=10.244.0.0/16

Vypíše sa verzia Kubernetes, skontrolujú sa závislosti, nastavia sa bezpečnostné certifikáty, zapíšu sa nastavenia, spustia sa nevyhnutné rozšírenia ako CoreDNS a kube-proxy a nakoniec sa vygeneruje príkaz s tokenon (kubeadm join ...), pomocou ktorého môžeme ku Kubernetes master serveru pripojiť (join) uzly (nodes).

Okrem iného nám nástroj kubeadm pri spustení odporučil vykonať niekoľko nastavení. Tieto tri príkazy spustíme na VPS s hostiteľským názvom master:

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

Vytvoríme tak skrytý priečinok .kube v priečinku aktuálneho používateľa a skopírujeme doň súbor s nastaveniami (config), ktorému nastavíme patričné vlastnícke oprávnenia (chown).

Nasadzujeme sieť podov

V prvom diele tohto seriálu sme si zadefinovali, že najjednoduchší a zároveň najdôležitejší objekt celého Kubernetes Clustra je pod (skupinka), pretože obsahuje kontajneri, ktoré Kubernetes orchestruje. Pody prepojíme nástrojom Flannel za pomoci týchto dvoch príkazov, ktoré spustíme na VPS s hostiteľským názvom master:

kubectl apply -f https://raw.githubusercontent.com/tiborepcek/flannel/main/Documentation/kube-flannel.yml
kubectl apply -f https://raw.githubusercontent.com/tiborepcek/flannel/main/Documentation/k8s-manifests/kube-flannel-rbac.yml

Či sa nasadenie podov podarilo, zistíme príkazom, ktorý spustíme na VPS master:

kubectl get pods --all-namespaces

Ak v stĺpci STATUS bude v každom riadku vypísaný stav Running, všetko je v poriadku a nasadenie siete podov prebehlo bez problémov.

Pripájame pracovníkov

Príkaz s tokenom kubeadm join ... použijeme teraz na pripojenie VPS s hostiteľskými názvami worker-1 a worker-2. K serveru teda pracovníkov pripojíme tak, že na jednom aj druhom VPS spustíme rovnaký príkaz. Príkaz na pripojenie získame na VPS master takto:

sudo kubeadm token create --print-join-command

Skopírujeme vypísaný príkaz a vložíme ho do VPS worker-1 a worker-2, pričom na začiatok pridáme sudo.

Vrátime sa späť do VPS master a spustíme príkaz na vypísanie zoznamu pripojených uzlov (nodov):

kubectl get nodes

Ak sa v zozname nachádzajú master, worker-1 a worker-2, pričom v stĺpci STATUS je vo všetkých prípadoch uvedené Ready, pripojenie prebehlo správne.

Nasadzujeme službu

Pomocou kontajnerizačného riešenia containerd cez Kubernetes vytvoríme službu, ktorú Kubernetes automaticky nasadí na všetky pripojené uzly (prvý riadok) a zverejní externú IP adresu (druhý riadok):

kubectl apply -f https://k8s.io/examples/application/deployment.yaml
kubectl expose deployment nginx-deployment --type=LoadBalancer --name=nginx-service

Takto zistíme IP adresu klastra (CLUSTER-IP) alebo (ak je k dispozícii) externú IP adresu (EXTERNAL-IP):

kubectl get service nginx-service

Zistenú IP adresu (vaša IP adresa sa môže líšiť) oslovíme cez nástroj curl (z VPS master, worker-1 aj worker-2), aby sme overili, či nasadený webový server Nginx funguje:

curl 10.110.95.151

V prípade výpisu HTML súboru, ktorý informuje o spustenom webovom serveri Nginx, nasadenie služby prebehlo správne a webový server funguje.

Hľadáte manažovaný Kubernetes? Využite služby našich skúsených profesionálov na cloud native – radi vám pripravíme riešnie na mieru.

Zhrnutie

V druhom diele sme ukázali, ako nainštalovať Kubernetes Cluster, ako spustiť Kubernetes Master Server a ako naň nasadiť sieť podov. Následne sme pripojili uzly k spustenému serveru, na ktoré sme nasadili službu – konkrétne webový server Nginx.

Aktualizované 14. júna 2022

Bol pre vás tento návod nápomocný?

Mohlo by vás tiež zaujímať:

Spýtajte sa nás, radi poradíme
Po - Ne 8:00-22:00
Kontaktovať podporu