10 najboljših trikov in nasvetov Kubernetes

10 najboljših trikov in nasvetov Kubernetes

Na internetu je veliko referenčne literature, a včasih je najpreprostejši nasvet najbolj dragocen. Ekipa Kubernetes aaS iz Mail.ru prevedeno izbor desetih trikov in nasvetov, ki ga je avtor članka zbral po letu dni dela s Kubernetesom. Nasveti niso razvrščeni po pomembnosti, vendar menimo, da bo vsak našel kaj koristnega zase.

Najenostavnejši ukaz za delo s Kubernetesom

Za začetek morda najenostavnejše in najbolj uporabno dejanje pri delu s Kubernetesom. Naslednji ukaz omogoča dokončanje ukaza kubectl v lupini bash:

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

Samodejno izpolnjevanje kubectl bo zapisan v datoteko .bashrc in bo samodejno aktiviran ob vsakem zagonu lupine. To pospeši vnašanje dolgih ukazov in parametrov, kot je npr all-namespaces. Več podrobnosti v Pomoč za Kubernetes bash.

Privzete omejitve pomnilnika in procesorja v imenskem prostoru

Če je aplikacija napisana nepravilno, na primer vsako sekundo odpre novo povezavo z bazo podatkov, vendar je nikoli ne zapre, potem grozd pušča pomnilnik. In če aplikacija med uvajanjem nima nastavljene omejitve pomnilnika, lahko to povzroči okvaro vozlišča.

Da bi to preprečili, vam Kubernetes omogoča nastavitev privzetih omejitev glede na imenski prostor. Zapisani so v datoteki yaml za določen imenski prostor. Tukaj je primer takšne datoteke:

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

Ustvarite tak yaml in ga uporabite za kateri koli imenski prostor. Na primer v imenski prostor limit-example. Zdaj bo vsak vsebnik, nameščen v tem imenskem prostoru, imel omejitev 512Mi, razen če je za ta vsebnik dodatno nastavljena druga posamezna omejitev.

Zbiranje smeti v starejših različicah Kubernetesa

Kubelet privzeto zažene zbiranje smeti, ko var/lib/docker zasede 90% razpoložljivega prostora na disku. To je super, vendar do Kubernetes 1.7 ni bilo privzete omejitve števila uporabljenih inodov, ki ustrezajo številu datotek v datotečnem sistemu.

Potencialno vaš vsebnik var/lib/docker lahko uporablja le 50 % prostora na disku, lahko pa mu zmanjka inode, kar bo povzročalo težave delavcem.

V starejših različicah kubeleta od 1.4 do 1.6 boste morali dodati to zastavico:

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

V 1.7 in novejših različicah je ta zastavica privzeto nastavljena. Vendar prejšnje različice ne spremljajo omejitve inode.

Minikube ... majhen, a močan lokalni Kubernetes

Minikube je najlažji način za zagon lokalne gruče Kubernetes. Zažene se s preprostim ukazom:

minikube start

Če zaženete ta ukaz, se na vašem računalniku izvaja prava gruča Kubernetes.

10 najboljših trikov in nasvetov Kubernetes
Vir ilustracije

Trik je v tem, kako zgraditi aplikacijo in jo zagnati lokalno v tej gruči. Če ni posebnih navodil, bo slika Docker zgrajena v vašem računalniku in ne v gruči.

Če želite prisiliti Docker, da potisne sliko v lokalno gručo Kubernetes, dobi priklopni stroj ta ukaz:

eval $(minikube docker-env)

Zdaj lahko gradimo aplikacije v lokalni gruči Kubernetes.

Ne omogočite dostopa kubectl vsem

To se zdi očitno, toda če več ekip uporablja isto gručo za svoje aplikacije (za kar je bil Kubernetes ustvarjen), ne bi smeli vsem kubectl. Bolje je ločiti ukaze, vsakemu od njih dodeliti lasten imenski prostor in omejiti dostop s pravilniki RBAC.

Lahko se zmedete, če za vsako enoto dodelite pravice za dostop, branje, ustvarjanje, brisanje in druge operacije. Toda glavna stvar je omejiti dostop do skrivnosti in ga omogočiti samo skrbnikom. Na ta način bomo razlikovali med tistimi, ki lahko upravljajo gručo, in tistimi, ki jo lahko preprosto namestijo.

Upravljajte proračune Pod

Kako preprečiti izpade aplikacije v gruči Kubernetes? PodDisruptionBudget in še enkrat PodDisruptionBudget.

Grozdi se občasno posodabljajo in vozlišča se praznijo. Nič ne miruje, to je realnost. Vsaka uvedba z več kot enim primerkom mora vključevati PDB (PodDisruptionBudget). Ustvari se v preprosti datoteki yaml, ki se uporabi za gručo. Območje pokritosti določenega PDB je določeno z izbirniki oznak.

Opomba: Proračun PPP se upošteva le, če je kršitev proračuna popravljiva (prostovoljna motnja). V primerih, kot so okvare strojne opreme, PDB ne bo deloval.

Primer PPP:

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

Dva glavna parametra sta matchLabels и minAvailable. Prvi parameter določa, za katere aplikacije velja proračun. Na primer, če imam razmestitve z oznakami app: app-a и app: app-b, potem bo ta PPP veljal samo za prvega.

Parameter minAvailable upoštevano pri praznjenju (čiščenju) vozlišča. Na primer, v našem primeru so med praznjenjem vsi primerki izločeni app: app-a, razen dveh.

To vam omogoča, da nadzirate, koliko primerkov aplikacije naj se izvaja v danem trenutku.

Spremljanje zdravja aplikacije

Tako spremljanje je možno na dva načina: z uporabo testa pripravljenosti ali testa živahnosti.

Prva sonda (pripravljenost) ugotavlja pripravljenost kontejnerja za sprejem prometa.

Drugi (živahnost) kaže, ali je vsebnik zdrav ali ga je treba znova zagnati.

Ustrezne konfiguracije se preprosto dodajo v yaml za uvajanje. Tam lahko določite časovne omejitve, zakasnitve in število ponovnih poskusov. Oglejte si več podrobnosti o njih Dokumentacija Kubernetes.

Oznake so povsod

Oznake so eden temeljnih konceptov v Kubernetesu. Objektom omogočajo prosto komunikacijo med seboj, pa tudi ustvarjanje poizvedb na podlagi oznak. V Kubernetesu lahko greste celo do odjemalca in si ogledate dogodke za določene oznake.

Z oznakami lahko naredite skoraj vse, dober primer pa bi bilo ustvarjanje več okolij za izvajanje programov v isti gruči.

Recimo, da uporabljate isto gručo za dev и qa. To pomeni, da lahko imate aplikacijo app-a, ki hkrati deluje v obeh okoljih qa и dev. V tem primeru lahko ločeno dostopamo do primerka aplikacije v določenem okolju z določitvijo ustreznega parametra environment. Na primer app: app-a и environment: dev za eno okolje in app: app-a и environment: qa za drugo.

To vam omogoča dostop do obeh primerkov aplikacije, na primer za hkratno izvajanje testiranja.

Stvari postavite v red

Kubernetes je zelo zmogljiv sistem, vendar lahko vsak sistem sčasoma zabrede s preveč procesi. Kubelet izvaja vse procese in preverjanja, ki jih določite, pa tudi svoje.

Seveda ena osirotela storitev ne bo upočasnila sistema, Kubernetes pa je zasnovan za prilagajanje od začetka. Če pa se namesto ene storitve pojavi milijon, se kubelet začne dušiti.

Če iz nekega razloga izbrišete razmestitev (vsebnik, sliko, karkoli), se prepričajte, da opravite popolno čiščenje.

Spoznajte Go

Glavni nasvet smo prihranili za konec. Naučite se programskega jezika Go.

Kubernetes je razvit v Go, vse razširitve so napisane v Go, uradno pa je podprta tudi knjižnica client-go client.

Lahko se uporablja za različne in zanimive stvari. Na primer, da razširite sistem Kubernetes po svojem okusu. Torej lahko uporabite lastne programe za zbiranje podatkov, uvajanje aplikacij ali preprosto čiščenje vsebnikov.

Učenje programskega jezika Go in obvladovanje client-go je morda najpomembnejši nasvet, ki ga lahko daste novim uporabnikom Kubernetes.

Prevedeno s podporo Mail.ru Cloud Solutions

Kaj še brati:

  1. Tri ravni samodejnega skaliranja v Kubernetesu in kako jih učinkovito uporabljati.
  2. Delavska vozlišča Kubernetes: veliko majhnih ali nekaj velikih?
  3. 25 uporabnih orodij za uvajanje in upravljanje Kubernetesa.

Vir: www.habr.com

Dodaj komentar