Najboljih 10 trikova i savjeta za Kubernetes

Najboljih 10 trikova i savjeta za Kubernetes

Na internetu ima mnogo referentne literature, ali ponekad su najvredniji najjednostavniji saveti. Tim Kubernetes aaS od Mail.ru je preveo selekciju od deset trikova i saveta, 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 pomoć za Kubernetes za bash.

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.

Najboljih 10 trikova i savjeta za Kubernetes
Izvor ilustracije

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 (voluntary disruption). 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 u dokumentaciji Kubernetes.

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.

Prevedeno uz podršku Mail.ru Cloud Solutions

Što još pročitati:

  1. Tri razine automatskog skaliranja u Kubernetesu i kako ih učinkovito koristiti.
  2. Radni čvorovi Kubernetes-a: mnogo malih ili malo velikih?
  3. 25 korisnih alata za implementaciju i upravljanje Kubernetes-om.

Izvor: habr.com

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster