
Na internetu ima mnogo referentne literature, ali ponekad su najvredniji najjednostavniji saveti. Tim je preveo , koje je autor članka sakupio nakon godine rada s Kubernetesom. Saveti nisu sortirani po važnosti, ali mislimo da će svako pronaći nešto korisno za sebe.
Najjednostavnija komanda u radu s Kubernetesom
Za početak, verovatno najjednostavnija i najkorisnija radnja u radu s Kubernetesom. Sledeća komanda uključuje automatsko dovršavanje komandi kubectl u bash ljusci:
echo "source > ~/ .bashrc
Automatsko dovršavanje kubectl će biti upisano u .bashrc datoteku i automatski će se aktivirati svaki put kada se pokrene ljuska. To ubrzava unos dugih komandi i parametara, kao što je all-namespaces. Više informacija u .
Podrazumevana ograničenja na memoriju i CPU u imenskom prostoru
Ako je aplikacija pogrešno napisana, na primer, svake sekunde otvara novu vezu s bazom podataka, ali nikada je ne zatvara, dolazi do curenja memorije u klasteru. A ako za aplikaciju prilikom postavljanja nije postavljeno ograničenje na memoriju, to može dovesti do pada čvora.
Da bi se to sprečilo, Kubernetes omogućava postavljanje podrazumevanih ograničenja za svaki imenski prostor. Ona se definišu u yaml datoteci za određeni imenski prostor. Evo primera takve datoteke:
apiVersion: v1
kind: LimitRange
metadata:
name: mem-limit-range
spec:
limits:
- default:
memory: 512Mi
defaultRequest:
memory: 256Mi
type: Container
Kreirajte takvu yaml datoteku i primenite je na bilo koji imenski prostor. Na primer, na imenski prostor limit-example. Sada će za svaki kontejner razmešten u ovom imenskom prostoru važiti limit od 512Mi, osim ako nije postavljeno drugo individualno ograničenje za taj kontejner.
Čišćenje otpada u starijim verzijama Kubernetesa
Kubelet podrazumevano počinje čišćenje otpada kada var/lib/docker zauzima 90 % dostupnog prostora na disku. To je divno, međutim, do verzije Kubernetesa 1.7 nije postojao limit po defaultu na broj korišćenih indeksnih deskriptora inoda (inode), koji odgovaraju broju datoteka u datotečnom sistemu.
Potencijalno vaš kontejner var/lib/docker može koristiti samo 50 % prostora na disku, ali inodi mogu nestati, što može izazvati probleme u radu radnika.
U starijim verzijama kubeleta od 1.4 do 1.6 moraćete dodati takvu zastavicu:
--eviction-hard
=memory.available<100Mi,nodefs.available<10%,nodefs.inodesFree<5%
U verzijama 1.7 i novijim, ova zastavica se po defaultu postavlja. Međutim, prethodne verzije ne prate granicu inoda.
Minikube… mali, ali moćni lokalni Kubernetes
Minikube je najlakši način za pokretanje lokalnog Kubernetes klastera. Pokreće se jednostavnom komandom:
minikube start
Kao rezultat izvršavanja ove komande, pravi Kubernetes klaster radi na vašem računaru.

Clue je u tome kako sastaviti aplikaciju i pokrenuti je lokalno u ovom klasteru. Ako ne navedete posebne upute, Docker slika će se sastaviti na vašem računaru, a ne u klasteru.
Da biste natjerali Docker da pošalje sliku u lokalni Kubernetes klaster, treba dati sljedeću komandu:
eval $(minikube docker-env)
Sada možemo sastavljati aplikacije na lokalnom Kubernetes klasteru.
Nemojte davati pristup kubectl svima bez razmišljanja
To se čini očiglednim, ali ako nekoliko timova koristi jedan klaster za svoje aplikacije (zbog čega je Kubernetes i stvoren), ne treba samo tako svima davati pristup. kubectlBolje je razdvojiti timove, dodijeljujući svakom od njih svoj prostor imena i ograničavajući pristup RBAC politikama.
Možete se potruditi, definišući prava pristupa za svaku pod jedinicu, uključujući čitanje, kreiranje, brisanje i druge operacije. Ali najbitnije je ograničiti pristup tajnama, dopuštajući ga samo administratorima. Tako razdvajamo one koji mogu administrirati klaster od onih koji se u njemu mogu jednostavno postaviti.
Upravljajte budžetima podova
Kako osigurati da aplikacija u klasteru Kubernetes ne doživi neplanirane zastoje? PodDisruptionBudget, i još jednom PodDisruptionBudget.
Klasteri se povremeno ažuriraju, a čvorovi se isprazne. Ništa ne stoji mirno, to je stvarnost. Svaki deploy s više od jedne instance obavezno treba uključiti PDB (PodDisruptionBudget). On se stvara u jednostavnom yaml datoteci koja se primjenjuje na klaster. Obuhvat određenog PDB-a određuje selektor oznaka.
Napomena: Budžet PDB se uzima u obzir samo pri obrnuti poremećaju budžeta (). U situacijama poput hardverskih kvarova, PDB neće aktivirati.
Primjer PDB:
apiVersion: policy/v1beta1
kind: PodDisruptionBudget
metadata:
name: app-a-pdb
spec:
minAvailable: 2
selector:
matchLabels:
app: app-a
Dva osnovna parametra su matchLabels i minAvailable. U prvom parametru navodimo za koje aplikacije se primenjuje budžet. Na primer, ako imam deploye sa oznakama app: app-a i app: app-b, tada će se ovaj PDB primenjivati samo na prvom.
Parametar minAvailable uzima se u obzir prilikom pražnjenja (čišćenja) čvora. Na primer, u našem primeru tokom pražnjenja se istiskuju sve instance app: app-a, osim dve.
To omogućava kontrolu koliko instanci aplikacije treba biti pokrenuto u svakom trenutku.
Nadzor ispravnosti aplikacije
Takav nadzor moguće je obaviti na dva načina: pomoću Readiness ili Liveness probe.
Prva proba (readiness) određuje spremnost kontejnera za prihvat saobraćaja.
Druga (liveness) pokazuje da li je kontejner ispravan ili ga je potrebno ponovo pokrenuti.
Odgovarajuće konfiguracije se jednostavno dodaju u yaml za razmestanje. Tamo se mogu navesti vremenski ograničenja, vreme kašnjenja i broj ponovljenih proba. Detaljnije o njima možete pročitati .
Oznake svuda
Oznake su jedan od osnovnih pojmova u Kubernetesu. Omogućavaju objektima da se slobodno povežu jedni s drugima, kao i da kreiraju upite na osnovu oznaka. U Kubernetesu čak možete preći na klijenta i pratiti događaje po određenim oznakama.
Pomoću oznaka možete uraditi praktično sve, ali dobar primer bi bio stvaranje više okruženja za izvođenje programa u jednom klasteru.
Pretpostavimo da koristite jedan te isti klaster za dev i qa. To znači da može biti aplikacija app-a, koja istovremeno radi u oba okruženja qa i dev. U ovom slučaju možemo zasebno da pristupimo instanci aplikacije u određenom okruženju, navodeći odgovarajući parametar okruženje. Na primjer, app: app-a i environment: dev za jedno okruženje, a app: app-a i environment: qa za drugo.
To omogućava pristup obema instancama aplikacije, na primer, istovremeno vršeći testiranje.
Upravljajte svojim
Kubernetes je veoma moćan sistem, ali svaka sistem na kraju može zapasti u veliku količinu procesa. Kubelet pokreće sve procese i provere koje ste naveli, kao i svoje vlastite.
Naravno, jedna napuštena usluga neće usporiti sistem, a Kubernetes je od početka osmišljen za skaliranje. Ali ako umesto jedne usluge imate milion, kubelet počinje da se guši.
Ako iz nekog razloga brišete implementaciju (kontejner, sliku, što god), jednostavno se pobrinite da se sve potpuno očisti.
Upoznajte se s Go-om
Glavni savjet čuvali smo za kraj. Naučite programski jezik Go.
Kubernetes je razvijen na Go-u, sve ekstenzije su napisane na Go-u, a također se službeno podržava klijentska biblioteka client-go.
Može se koristiti za razne zanimljive stvari. Na primjer, za prilagodbu sistema Kubernetes po vlastitom ukusu. Tako možete koristiti vlastite programe za prikupljanje podataka, implementaciju aplikacija ili jednostavno čišćenje kontejnera.
Naučiti programski jezik Go i savladati client-go vjerojatno je najvažniji savjet koji možemo dati novim korisnicima Kubernetes-a.
Što još pročitati:
- .
- ?
- .
Izvor: habr.com
