Uvod
Kubernetes je alat otvorenog koda koji je ključan u orkestraciji kontejnera. Kubernetes radi tako što orkestrira i upravlja klasterima u velikom opsegu u različitim oblačnim okruženjima ili čak na lokalnim poslužiteljima. Klaster je skup poslužitelja namijenjenih pokretanju kontejneriziranih aplikacija i usluga. Klasteru su potrebna najmanje dva čvora za rad – jedan master čvor i worker čvor. Imajući na umu skalabilnost, imate mogućnost proširiti klaster s onoliko worker čvorova koliko je potrebno.
Čvor u Kubernetesu odnosi se na poslužitelj. Master čvor je poslužitelj koji upravlja stanjem klastera. Worker čvorovi su poslužitelji koji pokreću radna opterećenja – to su obično kontejnerizirane aplikacije i usluge.
Ovaj vodič će vas provesti kroz korake instalacije i postavljanja Kubernetes klastera koji se sastoji od dva čvora na sustavu Ubuntu 20.04. Kao što je spomenuto, posjedovanje dva čvora je najosnovnija konfiguracija pri radu s Kubernetesom. Također imate mogućnost dodavanja više worker čvorova nakon što shvatite osnove. Dalje ćemo vam pokazati kako povezati dva poslužitelja kako biste omogućili master čvoru da upravlja worker čvorom.
Kako bismo testirali našu konfiguraciju, postavit ćemo Docker kontejner koji pokreće Nginx web poslužitelj na klaster. Ovo je tipična stvarna primjena Kubernetesa. Saznat ćete više o nekim definirajućim komponentama Kubernetesa kao što su kubectl i kubeadm kako idemo dalje. Također je preporučljivo prvo se upoznati s našim vodičem o upoznavanju s osnovama Kubernetes alata kako biste se upoznali s osnovama platforme Kubernetes.
Sada, počnimo!
Preduvjeti
Morat ćete osigurati dva poslužitelja koji rade na Ubuntu 20.04. Za najbolje performanse, minimalni sistemski zahtjevi za Kubernetes su 2 GB RAM-a i 2 procesora. Možete pratiti korake od 1 do 4 ovog vodiča korak-po-korak koji će vam pomoći postaviti vaš Ubuntu poslužitelj na platformi CloudSigma. Jedan poslužitelj bit će master čvor, a drugi worker čvor. Naša dva poslužitelja prikladno smo nazvali kubernetes-master i kubernetes-worker. To olakšava praćenje vodiča. Međutim, slobodni ste odabrati hostnames koje preferirate.
-
Obavezno dodajte korisnika s sudo privilegijama na oba čvora koje ćemo koristiti za pokretanje naredbi kako je opisano u gornjem vodiču. Pratite ovaj vodič o konfiguriranju Linux sudoers datoteke za upute.
-
Mrežna povezivost – poslužitelji u klasteru trebali bi moći komunicirati. Kada postavite svoje virtualne strojeve (VM) s platforme CloudSigma, oni će prema zadanim postavkama biti povezani na internet s javnom IP adresom. Ako radite iz lokalne mreže, možda ćete morati urediti svoju /etc/hosts datoteku na svakom poslužitelju i prikladno ih povezati.
-
Morat ćete instalirati i omogućiti Docker na svakom od čvorova. Kubernetes se oslanja na runtime okruženje kontejnera za pokretanje kontejnera u podovima. Iako postoje druge platforme kontejnera koje možete izabrati, u ovom vodiču koristit ćemo Docker. Docker će osigurati runtime okruženje potrebno za Ubuntu. Možete pratiti korake 1, 2 i 3 našeg vodiča o instaliranju i upravljanju Dockerom.
Korak 1: Instalirajte Kubernetes
U ovom koraku instalirat ćemo Kubernetes. Baš kao što ste učinili s Dockerom u preduvjetima, morate pokrenuti naredbe na oba čvora kako biste instalirali Kubernetes. Koristite ssh za prijavu na oba čvora i nastavak. Započet ćete instaliranjem apt-transport-https paketa koji omogućuje rad s http i https u repozitorijima Ubuntua. Također, instalirajte curl jer će biti potreban za sljedeće korake. Izvršite sljedeću naredbu:
|
1 |
sudo apt install apt-transport-https curl |
Zatim dodajte Kubernetes potpisni ključ na oba čvora izvršavanjem naredbe:
|
1 |
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add |
Zatim dodajemo Kubernetes repozitorij kao izvor paketa na oba čvora pomoću sljedeće naredbe:
|
1 2 |
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" >> ~/kubernetes.list sudo mv ~/kubernetes.list /etc/apt/sources.list.d |
Nakon toga, ažurirajte čvorove:
|
1 |
sudo apt update |
- Instalirajte Kubernetes alate
Nakon što se ažuriranje završi, instalirat ćemo Kubernetes. To uključuje instalaciju različitih alata koji čine Kubernetes: kubeadm, kubelet, kubectl, i kubernetes-cni. Ovi alati su instalirani na oba čvora. U nastavku definiramo svaki alat:
-
kubelet – agent koji se izvodi na svakom čvoru i upravlja komunikacijom s glavnim čvorom radi pokretanja radnih opterećenja u spremničkom okruženju. Unesite sljedeću naredbu za instalaciju kubeleta:
|
1 |
sudo apt install kubelet |
-
kubeadm – dio Kubernetes projekta koji pomaže u inicijalizaciji Kubernetes klastera. Unesite sljedeću naredbu za instalaciju kubeadma:
|
1 |
sudo apt install kubeadm |
-
kubectl – Kubernetes alat naredbenog retka koji vam omogućuje pokretanje naredbi unutar Kubernetes klastera. Izvršite sljedeću naredbu za instalaciju kubectla:
|
1 |
sudo apt install kubectl |
-
kubernetes-cni – omogućuje umrežavanje unutar spremnika osiguravajući da spremnici mogu komunicirati i razmjenjivati podatke. Izvršite sljedeću naredbu za instalaciju:
|
1 |
sudo apt-get install -y kubernetes-cni |
Opcionalno, možete instalirati sva četiri u jednoj naredbi:
|
1 |
sudo apt-get install -y kubelet kubeadm kubectl kubernetes-cni |
Korak 2: Onemogućavanje swap memorije
Kubernetes ne može funkcionirati u sustavu koji koristi swap memoriju. Stoga se mora onemogućiti na glavnom čvoru i svim radnim čvorovima. Izvršite sljedeću naredbu za onemogućavanje swap memorije:
|
1 |
sudo swapoff -a |
Ova naredba onemogućuje swap memoriju dok se sustav ponovno ne pokrene. Moramo osigurati da ostane isključena čak i nakon ponovnog pokretanja. To se mora učiniti na glavnom i svim radnim čvorovima. To možemo učiniti uređivanjem fstab datoteke i komentiranjem /swapfile linije s #. Otvorite datoteku pomoću uređivača teksta nano unosom sljedeće naredbe:
|
1 |
sudo nano /etc/fstab |
Unutar datoteke komentirajte swapfile liniju kao što je prikazano na snimci zaslona u nastavku:

Ako ne vidite liniju swapfile, jednostavno je zanemarite. Spremite i zatvorite datoteku kada završite s uređivanjem. Slijedite isti postupak za oba čvora. Sada će postavke swap memorije ostati isključene, čak i nakon ponovnog pokretanja poslužitelja.
Korak 3: Postavljanje jedinstvenih naziva računala
Vaši čvorovi moraju imati jedinstvene nazive računala radi lakše identifikacije. Ako implementirate klaster s mnogo čvorova, možete postaviti nazive za identifikaciju svojih radnih čvorova kao što su node-1, node-2 itd. Kao što smo ranije spomenuli, svoje smo čvorove nazvali kubernetes-master i kubernetes-worker. Postavili smo ih u trenutku stvaranja poslužitelja. Međutim, možete prilagoditi ili postaviti svoje ako to već niste učinili iz naredbenog retka. Za prilagodbu naziva računala na glavnom čvoru, pokrenite sljedeću naredbu:
|
1 |
sudo hostnamectl set-hostname kubernetes-master |
Na radnom čvoru pokrenite sljedeću naredbu:
|
1 |
sudo hostnamectl set-hostname kubernetes-worker |
Možete zatvoriti trenutnu sesiju terminala i ponovno se ssh natrag na poslužitelj kako biste vidjeli promjene.
Korak 4: Omogućavanje da Iptables vidi premošteni promet
Kako bi glavni i radni čvorovi ispravno vidjeli premošteni promet, trebali biste osigurati da je net.bridge.bridge-nf-call-iptables postavljen na 1 u vašoj konfiguraciji. Prvo provjerite je li modul br_netfilter učitan. To možete potvrditi izdavanjem naredbe:
|
1 |
lsmod | grep br_netfilter |
Opcionalno, možete ga eksplicitno učitati naredbom:
|
1 |
sudo modprobe br_netfilter |
Sada možete pokreniti ovu naredbu kako biste postavili vrijednost na 1:
|
1 |
sudo sysctl net.bridge.bridge-nf-call-iptables=1 |
Korak 5: Promjena Docker Cgroup upravljačkog programa
Prema zadanim postavkama, Docker se instalira s “cgroupfs” kao cgroup upravljačkim programom. Kubernetes preporučuje da bi Docker trebao raditi s “systemd” kao upravljačkim programom. Ako preskočite ovaj korak i pokušate inicijalizirati kubeadm u sljedećem koraku, dobit ćete sljedeće upozorenje u svom terminalu:
|
1 2 |
[preflight] Pokretanje pre-flight provjera [UPOZORENJE IsDockerSystemdCheck]: otkriveno "cgroupfs" kao the Docker cgroup upravljački program. The Preporučeni upravljački program je "systemd". Molimo slijedite the vodič na https://kubernetes.io/docs/setup/cri/ |
I na glavnom i na radnom čvoru, ažurirajte cgroupdriver sa sljedećim naredbama:
|
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 |
Zatim izvršite sljedeće naredbe za ponovno pokretanje i omogućavanje Dockera pri pokretanju sustava:
|
1 2 3 |
sudo systemctl enable docker sudo systemctl daemon-reload sudo systemctl restart docker |
Nakon što je to postavljeno, možemo prijeći na zabavni dio, implementaciju Kubernetes klastera!
Korak 6: Inicijalizacija Kubernetes glavnog čvora
Prvi korak u implementaciji Kubernetes klastera je pokretanje glavnog čvora. Dok ste u terminalu svog glavnog čvora, izvršite sljedeću naredbu za inicijalizaciju kubernetes-glavnog čvora:
|
1 |
sudo kubeadm init --pod-network-cidr=10.244.0.0/16 |
Ako izvršite gornju naredbu, a vaš sustav ne zadovoljava očekivane zahtjeve, kao što su minimalni RAM ili CPU kako je objašnjeno u odjeljku s preduvjetima, dobit ćete upozorenje i klaster se neće pokrenuti:

Snimka zaslona u nastavku pokazuje da je inicijalizacija bila uspješna. Također smo dodali zastavicu za određivanje mreže podova s IP adresom 10.244.0.0. To je zadana IP adresa koju kube-flannel koristi. Više o mreži podova raspravljat ćemo u sljedećem koraku.

U izlazu možete vidjeti kubeadm join naredbu (sakrili smo našu IP adresu) i jedinstveni token koji ćete pokrenuti na radnom čvoru i svim ostalim radnim čvorovima koje želite pridružiti ovom klasteru. Zatim kopirajte i zalijepite ovu naredbu jer ćete je kasnije koristiti na radnom čvoru.
U izlazu Kubernetes također prikazuje neke dodatne naredbe koje biste trebali pokrenuti kao običan korisnik na glavnom čvoru prije nego što počnete koristiti klaster. Pokrenimo ove naredbe:
|
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 |
Sada smo inicijalizirali glavni čvor. Međutim, također moramo postaviti mrežu podova na glavnom čvoru prije nego što pridružimo radne čvorove.
Korak 7: Implementacija mreže podova
Mreža podova olakšava komunikaciju između poslužitelja i neophodna je za ispravno funkcioniranje Kubernetes klastera. Više o tome možete pročitati u Kubernetes umrežavanju klastera u službenoj dokumentaciji. Za ovaj vodič koristit ćemo Flannel mrežu podova. Flannel je jednostavna preklapajuća mreža koja zadovoljava zahtjeve Kubernetesa.
Prije nego što implementiramo pod mrežu, moramo provjeriti status vatrozida. Ako ste omogućili vatrozid nakon što ste slijedili korak 5 vodiča za postavljanje vašeg Ubuntu poslužitelja, morate najprije dodati vatrozidno pravilo kako biste stvorili iznimke za port 6443 (zadani port za Kubernetes). Pokrenite sljedeće ufw naredbe i na glavnom i na radnom čvoru:
|
1 2 |
sudo ufw allow 6443 sudo ufw allow 6443/tcp |
Nakon toga možete pokrenuti sljedeće dvije naredbe za implementaciju pod mreže na glavnom čvoru:
|
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 |
Ovo može potrajati od nekoliko sekundi do minute, ovisno o vašem okruženju, kako bi se učitala flannel mreža. Pokrenite sljedeću naredbu kako biste potvrdili da je sve pokrenuto:
|
1 |
kubectl get pods --all-namespaces |
Izlaz naredbe trebao bi prikazati status svih usluga kao pokrenut ako je sve bilo uspješno:

Također možete pregledati stanje komponenti pomoću naredbe get component status:
|
1 |
kubectl get componentstatus |

Ova naredba ima skraćeni oblik cs:
|
1 |
kubectl get cs |

Ako vidite status neispravnosti, izmijenite sljedeće datoteke i izbrišite redak u (spec->containers->command) koji sadrži ovaj izraz - --port=0 :
|
1 |
sudo nano /etc/kubernetes/manifests/kube-scheduler.yaml |
Učinite isto za ovu datoteku:
|
1 |
sudo nano /etc/kubernetes/manifests/kube-controller-manager.yaml |
Na kraju, ponovno pokrenite Kubernetes uslugu:
|
1 |
sudo systemctl restart kubelet.service |
Korak 8: Pridruživanje radnih čvorova Kubernetes klasteru
S kubernetes-glavnim čvorom koji je pokrenut i spremnom pod mrežom, možemo pridružiti naše radne čvorove klasteru. U ovom vodiču imamo samo jedan radni čvor, pa ćemo raditi s njim. Ako imate više radnih čvorova, uvijek možete slijediti iste korake koje ćemo objasniti u nastavku kako biste se pridružili klasteru.
Najprije se prijavite na svoj radni čvor u zasebnoj terminalskoj sesiji. Koristit ćete svoju kubeadm join naredbu koja je prikazana u vašem terminalu kada smo inicijalizirali glavni čvor u Koraku 6. Izvršite naredbu:
|
1 |
sudo kubeadm join 127.0.0.188:6443 --token u81y02.91gqwkxx6rnhnnly --discovery-token-ca-cert-hash sha256:4482ab1c66bf17992ea02c1ba580f4af9f3ad4cc37b24f189db34d6e3fe95c2d |
Trebali biste vidjeti sličan izlaz kao na snimci zaslona u nastavku kada se dovrši pridruživanje klasteru:

Nakon što se proces pridruživanja završi, prebacite se na terminal glavnog čvora i izvršite sljedeću naredbu kako biste potvrdili da se vaš radni čvor pridružio klasteru:
|
1 |
kubectl get nodes |
Na snimci zaslona izlaza gornje naredbe možemo vidjeti da se radni čvor pridružio klasteru:

Korak 9: Implementacija aplikacije u Kubernetes klaster
U ovom ste trenutku uspješno postavili Kubernetes klaster. Učinimo klaster upotrebljivim implementacijom usluge na njega. Nginx je popularan web poslužitelj koji se ponosi nevjerojatnim brzinama čak i s tisućama veza. Implementirat ćemo Nginx web poslužitelj u klaster kako bismo dokazali da ovu konfiguraciju možete koristiti u stvarnoj primjeni.
Izvršite sljedeću naredbu na glavnom čvoru kako biste stvorili Kubernetes implementaciju za Nginx:
|
1 |
kubectl create deployment nginx --image=nginx |
Možete pregledati stvorenu implementaciju pomoću describe deployment naredbe:
|
1 |
kubectl describe deployment nginx |

Kako biste nginx servis učinili dostupnim putem interneta, pokrenite sljedeću naredbu:
|
1 |
kubectl create service nodeport nginx --tcp=80:80 |

Gornja naredba stvorit će javno dostupan servis za Nginx deployment. Budući da je ovo nodeport deployment, Kubernetes dodjeljuje servisu port u rasponu od 32000+.
Trenutne servise možete dohvatiti izdavanjem naredbe:
|
1 |
kubectl get svc |

Možete vidjeti da je naš dodijeljeni port 32264. Zabilježite port prikazan u vašem terminalu kako biste ga koristili u sljedećem koraku.
Kako biste provjerili je li deployment Nginx servisa uspješan, pošaljite curl poziv worker čvoru s master čvora. Zamijenite IP adresu vašeg worker čvora i port koji ste dobili iz gornje naredbe:
|
1 |
curl your-kubernetes-worker-ip:32264 |
Trebali biste vidjeti izlaz zadane Nginx index.html:

Opcionalno, možete posjetiti kombinaciju IP adrese i porta worker čvora u svom pregledniku i pregledati zadanu Nginx index stranicu:

Možete izbrisati deployment navođenjem naziva deploymenta. Na primjer, ova naredba će izbrisati naš deployment:
|
1 |
kubectl delete deployment nginx |
Sada smo uspješno testirali naš klaster!
Zaključak
U ovom ste vodiču naučili kako instalirati Kubernetes klaster na Ubuntu 20.04. Postavili ste klaster koji se sastoji od master i worker čvora. Uspjeli ste instalirati Kubernetes skup alata, stvorili ste pod mrežu i pridružili worker čvor master čvoru. Također smo testirali naš koncept izradom osnovnog deploymenta Nginx web poslužitelja na klasteru. Ovo bi trebalo poslužiti kao temelj za rad s Kubernetes klasterima na Ubuntuu.
Iako smo koristili samo jedan worker čvor, svoj klaster možete proširiti s onoliko čvorova koliko želite. Ako želite ući dublje u DevOps s alatima za automatizaciju kao što je Ansible, imamo vodič koji se bavi pripremom deploymenta Kubernetes klastera pomoću Ansiblea i Kubeadma, pogledajte ga. Ako želite naučiti kako implementirati PHP aplikaciju na Kubernetes klaster, pogledajte ovaj vodič.
Ugodan rad!
Komentari
Još nema komentara. Budite prvi.