10 najboljih Kubernetes trikova i savjeta

10 najboljih Kubernetes trikova i savjeta

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

Najlakša naredba za korištenje s Kubernetesom

Za početak, možda najjednostavniji i najkorisniji korak u radu s Kubernetesom. Sljedeća naredba omogućuje završetak naredbe kubectl u bash ljusci:

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

samodovršetka kubectl bit će zapisani u .bashrc datoteku i automatski će se aktivirati svaki put kada se ljuska pokrene. To ubrzava upisivanje dugih naredbi i opcija poput all-namespaces. Pročitajte više u Kubernetes bash pomoć.

Memorija prostora imena i zadana ograničenja CPU-a

Ako je aplikacija pogrešno napisana, na primjer, svake sekunde otvara novu vezu s bazom podataka, ali je nikada ne zatvara, tada dolazi do curenja memorije u klasteru. A ako aplikacija nema ograničenje memorije tijekom postavljanja, to može dovesti do kvara čvora.

Da biste to spriječili, Kubernetes vam omogućuje postavljanje zadanih ograničenja za svaki prostor imena. Zapisani su u yaml datoteci za određeni imenski prostor. Evo primjera takve datoteke:

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

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

Skupljanje smeća u starijim verzijama Kubernetesa

Kubelet prema zadanim postavkama pokreće sakupljanje smeća kada var/lib/docker zauzima 90% dostupnog prostora na disku. Ovo je sjajno, međutim, prije Kubernetesa 1.7 nije postojalo zadano ograničenje broja korištenih inodeova, koji odgovaraju broju datoteka u datotečnom sustavu.

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

U starijim verzijama kubeleta od 1.4 do 1.6 morat ćete dodati sljedeću oznaku:

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

U 1.7 i novijim, ova je zastavica postavljena prema zadanim postavkama. Međutim, prethodne verzije ne provode 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 naredbom:

minikube start

Ova naredba rezultirat će pokretanjem stvarnog Kubernetes klastera na vašem računalu.

10 najboljih Kubernetes trikova i savjeta
Izvor ilustracije

Trik je u tome kako izgraditi aplikaciju i pokrenuti je lokalno na ovom klasteru. Osim ako nije drugačije navedeno, Docker slika će biti izgrađena na vašem računalu, a ne na klasteru.

Kako biste natjerali Docker da gurne sliku u lokalni Kubernetes klaster, docker stroju daje se sljedeća naredba:

eval $(minikube docker-env)

Sada možemo graditi aplikacije na lokalnom Kubernetes klasteru.

Ne dijelite kubectl pristup sa svima

Ovo se čini očiglednim, ali ako više timova koristi isti klaster za svoje aplikacije (za što je Kubernetes stvoren), nemojte ih samo izdavati sve redom kubectl. Bolje je razdvojiti naredbe, dajući svakoj od njih vlastiti prostor imena i razgraničavajući pristup RBAC pravilima.

Možete se zbuniti dodjeljivanjem prava pristupa, čitanja, stvaranja, brisanja i drugih operacija za svaku mahunu. Ali glavna stvar je ograničiti pristup tajnama, dopuštajući to samo administratorima. Ovo je način na koji razlikujemo one koji mogu administrirati klaster i one koji ga mogu jednostavno implementirati.

Upravljajte proračunima podova

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

Klasteri se povremeno ažuriraju, a čvorovi se prazne. Ništa ne stoji, to je realnost. Svaka implementacija s više od jedne instance mora uključivati ​​PDB (PodDisruptionBudget). Stvara se u jednostavnoj yaml datoteci koja se primjenjuje na klaster. Opseg pojedinog PDB-a određen je selektorima oznaka.

Napomena: PDB proračun se uzima u obzir samo u slučaju poništivog kršenja proračuna (dobrovoljni poremećaj). U situacijama kao što su kvarovi hardvera, PDB neće raditi.

PDB primjer:

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 proračun odnosi. Na primjer, ako imam implementacije s oznakama app: app-a и app: app-b, tada će se ovaj PDB odnositi samo na prvi.

Parametar minAvailable uzeti u obzir prilikom pražnjenja (čišćenja) čvora. Na primjer, u našem primjeru, sve instance su deložirane tijekom devastacije app: app-aosim dvojice.

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

Praćenje zdravlja aplikacije

Takvo praćenje moguće je na dva načina: korištenjem Readiness ili Liveness testova.

Prva sonda (spremnost) utvrđuje je li spremnik spreman primiti promet.

Drugi (živahnost) označava je li spremnik ispravan ili ga treba ponovno pokrenuti.

Relevantne konfiguracije jednostavno se dodaju u yaml za implementaciju. Tamo možete odrediti vremensko ograničenje, vrijeme odgode i broj ponovnih pokušaja. Vidi više o njima Kubernetes dokumentacija.

Etikete posvuda

Oznake su jedan od temeljnih koncepata u Kubernetesu. Omogućuju objektima slobodnu međusobnu komunikaciju, kao i stvaranje zahtjeva na temelju oznaka. U Kubernetesu možete čak otići do klijenta i gledati događaje za određene oznake.

S oznakama se može učiniti gotovo sve, ali dobar primjer bio bi 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 prijavu app-a, istovremeno radeći u oba okruženja qa и dev. U ovom slučaju, instanci aplikacije možemo zasebno pristupiti 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.

To vam omogućuje pristup objema instancama aplikacije, na primjer, za testiranje u isto vrijeme.

Dovedite stvari u red

Kubernetes je vrlo moćan sustav, ali bilo koji sustav se na kraju može zaglaviti u velikom broju procesa. Kubelet pokreće sve procese i provjere koje navedete, kao i svoje vlastite.

Naravno, jedna usluga siroče neće usporiti sustav, a Kubernetes je dizajniran za skaliranje od samog početka. Ali ako se umjesto jedne usluge pojavi milijun, kubelet se počinje gušiti.

Ako iz nekog razloga brišete implementaciju (spremnik, sliku, bilo što), samo je svakako potpuno očistite.

Upoznajte Go

Sačuvali smo naš glavni savjet za kraj. Naučite Go programski jezik.

Kubernetes je razvijen u Go-u, sve ekstenzije su napisane u Go-u, a službeno je podržana i client-go biblioteka.

Može se koristiti za različite i zanimljive stvari. Na primjer, proširiti Kubernetes sustav po svom ukusu. Na primjer, možete koristiti vlastite programe za prikupljanje podataka, implementaciju aplikacija ili jednostavno čišćenje spremnika.

Naučiti programski jezik Go i svladati client-go možda je najvažniji savjet koji se može dati početnicima u Kubernetesu.

Prevedeno uz podršku Mail.ru Cloud Solutions

Što još čitati:

  1. Tri razine automatskog skaliranja u Kubernetesu i kako ih učinkovito koristiti.
  2. Kubernetes radnički čvorovi: mnogo malih ili nekoliko velikih?
  3. 25 korisnih alata za implementaciju i upravljanje Kubernetesom.

Izvor: www.habr.com

Dodajte komentar