Želio bih podijeliti jedno osobno iskustvo učenja Kubernetesa kroz mali praktični projekat koji sam radio od nule. Ideja nije bila da napravim nešto kompleksno, već da zaista razumijem osnovne koncepte i dođem do točke gdje aplikacija stvarno radi na Kubernetes klasteru i dostupna je preko mreže.
Sve sam dokumentovao u ovom GitHub repo:
https://github.com/awsbosnia/My-Kubernetes-Adventure-From-Zero-to-a-Working-Deployment
Počeo sam sa lokalnim klasterom koristeći Minikube, čisto da imam kontrolisano okruženje za testiranje. Prvi cilj je bio jednostavan deployment nginx web servera. Napravio sam YAML fajl za Deployment sa nekoliko replica, definisanim labelama i odgovarajućim selectorima.
Već na tom koraku sam naletio na prvi problem. Deployment se nije ponašao kako sam očekivao jer selector: Labels nije bio identičan labelama na podovima. To je jedna od onih stvari koje djeluju banalno dok ne zaglaviš na njoj. Tek nakon što sam uskladio labele i selectore, podovi su počeli normalno da se kreiraju i budu pod kontrolom deploymenta.
Kada sam konačno imao podove koji rade, sljedeći korak je bio expose aplikacije. Napravio sam Service tipa NodePort kako bih mogao pristupiti nginxu iz browsera. Service se uredno kreirao, port je bio dodijeljen, ali aplikacija i dalje nije bila dostupna spolja.
Problem, naravno, nije bio u Kubernetesu nego u firewallu. UFW je blokirao NodePort range i tek nakon otvaranja odgovarajućih portova aplikacija je postala dostupna. U tom trenutku sam prvi put stvarno vidio nginx stranicu serviranu iz Kubernetes klastera, što je bio mali, ali bitan uspjeh.
Ono što sam iz ovoga izvukao je da Kubernetes ne treba posmatrati izolovano. Deployment, Service i Pod mogu biti savršeno ispravni, ali ako mreža ili firewall nisu dobro podešeni, stvari jednostavno neće raditi. Takođe, YAML fajlovi djeluju jednostavno dok ne pogriješiš u jednom polju koje Kubernetes strogo provjerava.
Ovaj projekat mi je pomogao da povežem teoriju sa praksom i da shvatim kako osnovni Kubernetes objekti zaista funkcionišu zajedno. Ako je neko tek na početku, preporučujem da radi ovakve male projekte i da sve dokumentira.
Kasnije mnogo znači kada se vratiš i vidiš kako si riješio određeni problem.
Ako nekome znači, slobodno pogledajte repozitorij i javite ako imate sugestije ili pitanja. Rado bih čuo i tuđa iskustva sa sličnim problemima.