10 najboljih Kubernetes trikova i savjeta

10 najboljih Kubernetes trikova i savjeta

Na internetu postoji mnogo referentne literature, ali ponekad je najjednostavniji savjet najvredniji. Tim Kubernetes aaS sa Mail.ru prevedeno izbor od deset trikova i savjeta, koje je autor članka prikupio nakon godinu dana rada sa Kubernetesom. Savjeti nisu razvrstani po važnosti, ali mislimo da će svako pronaći nešto korisno za sebe.

Najjednostavnija komanda za rad sa Kubernetesom

Za početak, možda najjednostavnija i najkorisnija radnja u radu s Kubernetesom. Sljedeća naredba omogućava završetak naredbe kubectl u bash shell-u:

echo "source <(kubectl completion bash)" >> ~/.bashrc

Automatsko popunjavanje kubectl će biti upisan u .bashrc datoteku i automatski će se aktivirati svaki put kada se shell pokrene. Ovo ubrzava kucanje dugih komandi i parametara kao što su all-namespaces. Više detalja u Kubernetes bash pomoć.

Zadana memorija i ograničenja CPU-a u imenskom prostoru

Ako je aplikacija pogrešno napisana, na primjer, svake sekunde otvara novu vezu s bazom podataka, ali je nikada ne zatvara, tada klaster ima curenje memorije. A ako aplikacija nema postavljeno ograničenje memorije tokom implementacije, to može dovesti do kvara čvora.

Da biste to spriječili, Kubernetes vam omogućava da postavite zadana ograničenja na osnovu prostora imena. Oni su zapisani u yaml datoteci za određeni prostor imena. Evo primjera takve datoteke:

apiVersion: v1
kind: LimitRange
metadata:
  name: mem-limit-range
spec:
  limits:
  - default:
      memory: 512Mi
    defaultRequest:
      memory: 256Mi
    type: Container

Kreirajte takav yaml i primijenite ga na bilo koji prostor imena. Na primjer, u imenski prostor limit-example. Sada će svaki kontejner raspoređen u ovom imenskom prostoru imati ograničenje od 512Mi, osim ako za ovaj kontejner nije dodatno postavljeno drugo pojedinačno ograničenje.

Sakupljanje smeća u starijim verzijama Kubernetesa

Kubelet po defaultu pokreće sakupljanje smeća kada var/lib/docker zauzima 90% dostupnog prostora na disku. Ovo je sjajno, međutim, do Kubernetes 1.7 nije bilo podrazumevanog ograničenja za broj korišćenih inoda, koji odgovaraju broju fajlova u sistemu datoteka.

Potencijalno vaš kontejner var/lib/docker može koristiti samo 50% prostora na disku, ali može ostati bez inoda, što će uzrokovati probleme radnicima.

U starijim verzijama kubeleta od 1.4 do 1.6 morat ćete dodati ovu zastavicu:

--eviction-hard
=memory.available<100Mi,nodefs.available<10%,nodefs.inodesFree<5%

U 1.7 i novijim verzijama ova zastavica je postavljena po defaultu. Međutim, prethodne verzije ne prate ograničenje inode.

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

Izvođenje ove naredbe rezultira pravim Kubernetes klasterom koji radi na vašoj mašini.

10 najboljih Kubernetes trikova i savjeta
Izvor ilustracije

Trik je kako napraviti aplikaciju i pokrenuti je lokalno na tom klasteru. Osim ako nije posebno naloženo, Docker slika će biti izgrađena na vašem računaru, a ne na klasteru.

Da bi prisilio Docker da gurne sliku u lokalni Kubernetes klaster, docker mašini je data sljedeća naredba:

eval $(minikube docker-env)

Sada možemo graditi aplikacije na lokalnom Kubernetes klasteru.

Ne dajte kubectl pristup svima

Ovo se čini očiglednim, ali ako više timova koristi isti klaster za svoje aplikacije (za šta je Kubernetes stvoren), ne biste trebali samo dati svima kubectl. Bolje je razdvojiti komande, dodijeliti svakoj od njih svoj vlastiti prostor imena i ograničiti pristup korištenjem RBAC politika.

Možete se zbuniti dodjeljivanjem prava za pristup, čitanje, kreiranje, brisanje i druge operacije za svaki pod. Ali glavna stvar je ograničiti pristup tajnama, dopuštajući ga samo administratorima. Na ovaj način ćemo napraviti razliku između onih koji mogu administrirati klaster i onih koji se jednostavno mogu rasporediti na njega.

Upravljajte Pod Budgetima

Kako osigurati da aplikacija u Kubernetes klasteru nema zastoja? PodDisruptionBudget i opet PodDisruptionBudget.

Klasteri se periodično ažuriraju i čvorovi se prazne. Ništa ne miruje, to je realnost. Svaka implementacija s više od jedne instance treba uključivati ​​PDB (PodDisruptionBudget). Kreira se u jednostavnoj yaml datoteci koja se primjenjuje na klaster. Područje pokrivenosti određenog PDB-a određuju selektori oznaka.

Napomena: Budžet PDB-a se uzima u obzir samo kada je kršenje budžeta reverzibilno (dobrovoljnog prekida). U situacijama kao što su kvarovi na hardveru, PDB neće raditi.

Primjer PDB-a:

apiVersion: policy/v1beta1
kind: PodDisruptionBudget
metadata:
  name: app-a-pdb
spec:
  minAvailable: 2
  selector:
      matchLabels:
        app: app-a

Dva glavna parametra su matchLabels и minAvailable. Prvi parametar određuje na koje se aplikacije budžet odnosi. Na primjer, ako imam implementacije s oznakama app: app-a и app: app-b, onda će se ovaj PDB primjenjivati ​​samo na prvi.

Parametar minAvailable uzeti u obzir prilikom pražnjenja (čišćenja) čvora. Na primjer, u našem primjeru, prilikom pražnjenja, sve instance su iseljene app: app-a, osim dva.

Ovo vam omogućava da kontrolirate koliko instanci aplikacije treba biti pokrenuto u bilo kojem trenutku.

Praćenje zdravlja aplikacija

Takvo praćenje je moguće na dva načina: korištenjem testova spremnosti ili živosti.

Prva sonda (spremnost) utvrđuje spremnost kontejnera da primi promet.

Drugi (živost) pokazuje da li je kontejner zdrav ili ga treba ponovo pokrenuti.

Relevantne konfiguracije se jednostavno dodaju u yaml za implementaciju. Tamo možete odrediti vremenska ograničenja, vremena kašnjenja i broj ponovnih pokušaja. Pogledajte više detalja o njima Kubernetes dokumentacija.

Oznake su posvuda

Oznake su jedan od osnovnih koncepata u Kubernetesu. Oni omogućavaju objektima da slobodno komuniciraju jedni s drugima, kao i kreiraju upite na osnovu oznaka. U Kubernetesu možete čak otići do klijenta i gledati događaje za određene oznake.

Sa oznakama možete učiniti gotovo sve, ali dobar primjer bi bio stvaranje više okruženja za pokretanje programa na istom klasteru.

Recimo da koristite isti klaster za dev и qa. To znači da možete imati aplikaciju app-a, istovremeno radeći u oba okruženja qa и dev. U ovom slučaju možemo zasebno pristupiti instanci aplikacije u određenom okruženju navođenjem odgovarajućeg parametra environment. Na primjer app: app-a и environment: dev za jednu sredinu, i app: app-a и environment: qa za drugu.

Ovo vam omogućava da pristupite obema instancama aplikacije, na primer, da istovremeno izvršite testiranje.

Organizujte se

Kubernetes je veoma moćan sistem, ali svaki sistem može na kraju da zaglibi u previše procesa. Kubelet pokreće sve procese i provere koje navedete, kao i svoje sopstvene.

Naravno, jedna napuštena usluga neće usporiti sistem, a Kubernetes je dizajniran da se skalira iz temelja. Ali ako se umjesto jedne usluge pojavi milion, kubelet počinje da se guši.

Ako iz nekog razloga izbrišete implementaciju (kontejner, sliku, bilo šta), samo se pobrinite da izvršite potpuno čišćenje.

Upoznajte Go

Glavni savjet smo sačuvali za kraj. Naučite programski jezik Go.

Kubernetes je razvijen u Go-u, sva proširenja su napisana u Go-u, a klijent-go klijentska biblioteka je takođe zvanično podržana.

Može se koristiti za različite i zanimljive stvari. Na primjer, da proširite Kubernetes sistem po svom ukusu. Dakle, možete koristiti vlastite programe za prikupljanje podataka, postavljanje aplikacija ili jednostavno čišćenje kontejnera.

Učenje programskog jezika Go i savladavanje client-go-a je možda najvažniji savjet koji možete dati novim korisnicima Kubernetesa.

Prevedeno uz podršku Mail.ru Cloud Solutions

Šta još čitati:

  1. Tri nivoa automatskog skaliranja u Kubernetesu i kako ih efikasno koristiti.
  2. Kubernetes radni čvorovi: mnogo malih ili nekoliko velikih?
  3. 25 korisnih alata za implementaciju i upravljanje Kubernetes-om.

izvor: www.habr.com

Dodajte komentar