10 geriausių „Kubernetes“ gudrybių ir patarimų

10 geriausių „Kubernetes“ gudrybių ir patarimų

Internete gausu informacinės literatūros, tačiau kartais patys paprasčiausi patarimai būna patys vertingiausi. Komanda Kubernetes aaS iš Mail.ru išversta dešimties gudrybių ir patarimų pasirinkimas, kurį straipsnio autorė surinko po metų darbo su Kubernetes. Patarimai nėra surūšiuoti pagal svarbą, bet manome, kad kiekvienas ras sau ką nors naudingo.

Paprasčiausia komanda dirbti su Kubernetes

Pirmiausia – bene paprasčiausias ir naudingiausias veiksmas dirbant su „Kubernetes“. Ši komanda įgalina komandų užbaigimą kubectl bash shell:

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

Automatinis užpildymas kubectl bus įrašytas į .bashrc failą ir bus automatiškai aktyvuojamas kiekvieną kartą paleidus apvalkalą. Tai pagreitina ilgų komandų ir parametrų, tokių kaip all-namespaces. Daugiau skaitykite Kubernetes bash pagalba.

Numatytieji atminties ir procesoriaus apribojimai vardų erdvėje

Jei programa parašyta neteisingai, pavyzdžiui, ji kas sekundę atidaro naują ryšį su duomenų baze, bet niekada jo neuždaro, tada klasteryje yra atminties nutekėjimas. Ir jei diegimo metu programa nenustato atminties limito, tai gali sukelti mazgo gedimą.

Norėdami to išvengti, „Kubernetes“ leidžia nustatyti numatytuosius apribojimus kiekvienai vardų erdvei. Jie parašyti yaml faile tam tikrai vardų erdvei. Štai tokio failo pavyzdys:

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

Sukurkite tokį yaml ir pritaikykite bet kuriai vardų erdvei. Pavyzdžiui, į vardų sritį limit-example. Dabar bet kuris šioje vardų erdvėje įdiegtas sudėtinis rodinys turės 512 Mi limitą, nebent šiam sudėtiniam rodiniui papildomai nustatytas kitas individualus apribojimas.

Šiukšlių rinkimas senesnėse Kubernetes versijose

Pagal numatytuosius nustatymus „Kubelet“ pradeda šiukšlių rinkimą, kai var/lib/docker užima 90% laisvos vietos diske. Tai puiku, tačiau iki Kubernetes 1.7 nebuvo numatytasis naudojamų inodų skaičiaus apribojimas, kuris atitinka failų sistemoje esančių failų skaičių.

Galbūt jūsų konteineris var/lib/docker gali naudoti tik 50% vietos diske, bet gali pritrūkti inodų, o tai sukels problemų darbuotojams.

Senesnėse kubelet versijose nuo 1.4 iki 1.6 turėsite pridėti šią vėliavėlę:

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

1.7 ir vėlesnėse versijose ši vėliavėlė nustatyta pagal numatytuosius nustatymus. Tačiau ankstesnėse versijose įvesties ribos nestebimos.

Minikube... mažas, bet galingas vietinis Kubernetes

„Minikube“ yra lengviausias būdas paleisti vietinį „Kubernetes“ klasterį. Jis paleidžiamas naudojant paprastą komandą:

minikube start

Vykdant šią komandą jūsų kompiuteryje veikia tikras „Kubernetes“ klasteris.

10 geriausių „Kubernetes“ gudrybių ir patarimų
Iliustracijos šaltinis

Triukas yra tai, kaip sukurti programą ir paleisti ją vietoje toje klasteryje. Jei nebus konkrečiai nurodyta, „Docker“ vaizdas bus sukurtas jūsų kompiuteryje, o ne klasteryje.

Norėdami priversti „Docker“ perkelti vaizdą į vietinį „Kubernetes“ klasterį, doko įrenginiui suteikiama ši komanda:

eval $(minikube docker-env)

Dabar galime kurti programas vietiniame Kubernetes klasteryje.

Neduokite kubectl prieigos visiems

Tai atrodo akivaizdu, bet jei kelios komandos savo programoms naudoja tą patį klasterį (tam Kubernetes buvo sukurtas), neturėtumėte duoti visiems kubectl. Geriau atskirti komandas, kiekvienai iš jų priskiriant savo vardų erdvę ir apribojant prieigą naudojant RBAC politiką.

Galite susipainioti priskirdami prieigai, skaitymui, kūrimui, trynimui ir kitas kiekvienos grupės operacijas teises. Tačiau svarbiausia yra apriboti prieigą prie paslapčių, leidžiant tai tik administratoriams. Tokiu būdu skirsime tuos, kurie gali administruoti klasterį, ir tuos, kurie gali tiesiog jame dislokuoti.

Tvarkykite paketų biudžetus

Kaip užtikrinti, kad programa Kubernetes klasteryje nebūtų prastovos? PodDisruptionBudget ir vėl PodDisruptionBudget.

Klasteriai periodiškai atnaujinami, o mazgai ištuštinami. Niekas nestovi vietoje, tokia realybė. Į kiekvieną diegimą su daugiau nei vienu egzemplioriumi turi būti įtrauktas PBP (PodDisruptionBudget). Jis sukurtas paprastame yaml faile, kuris taikomas klasteriui. Tam tikro PBP aprėpties sritį nustato etikečių parinkikliai.

Pastaba: Į PBP biudžetą atsižvelgiama tik tada, kai biudžeto pažeidimas yra panaikinamas (savanoriškas sutrikimas). Tokiose situacijose kaip aparatūros gedimai, PBP neveiks.

PBP pavyzdys:

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

Du pagrindiniai parametrai yra matchLabels и minAvailable. Pirmasis parametras nurodo, kurioms programoms taikomas biudžetas. Pavyzdžiui, jei turiu diegimų su etiketėmis app: app-a и app: app-b, tada šis PBP bus taikomas tik pirmajam.

Parametras minAvailable į kurį atsižvelgiama ištuštinant (valant) mazgą. Pavyzdžiui, mūsų pavyzdyje ištuštinimo metu visos instancijos iškeldinamos app: app-a, išskyrus du.

Tai leidžia valdyti, kiek programos egzempliorių turi būti paleista bet kuriuo metu.

Programos sveikatos stebėjimas

Toks stebėjimas galimas dviem būdais: naudojant pasirengimo arba gyvumo testus.

Pirmasis zondas (pasirengimas) nustato konteinerio pasirengimą priimti srautą.

Antrasis (gyvumas) rodo, ar konteineris sveikas, ar jį reikia paleisti iš naujo.

Atitinkamos konfigūracijos tiesiog pridedamos prie yaml, kad būtų galima įdiegti. Čia galite nurodyti skirtąjį laiką, delsos laiką ir pakartotinių bandymų skaičių. Žr. daugiau informacijos apie juos Kubernetes dokumentacija.

Etiketės yra visur

Etiketės yra viena iš pagrindinių Kubernetes sąvokų. Jie leidžia objektams laisvai bendrauti tarpusavyje, taip pat kurti užklausas pagal etiketes. „Kubernetes“ galite netgi eiti į klientą ir žiūrėti konkrečių žymų įvykius.

Su žymomis galite daryti beveik bet ką, bet geras pavyzdys būtų kelių aplinkų kūrimas programoms paleisti tame pačiame klasteryje.

Tarkime, kad naudojate tą pačią grupę dev и qa. Tai reiškia, kad galite turėti paraišką app-a, vienu metu dirbantis abiejose aplinkose qa и dev. Tokiu atveju mes galime atskirai pasiekti programos egzempliorių konkrečioje aplinkoje, nurodydami atitinkamą parametrą environment. Pavyzdžiui, app: app-a и environment: dev vienai aplinkai ir app: app-a и environment: qa už antrąjį.

Tai leidžia pasiekti abu programos atvejus, pavyzdžiui, atlikti bandymus vienu metu.

Tvarkykite daiktus

„Kubernetes“ yra labai galinga sistema, tačiau bet kuri sistema ilgainiui gali užstrigti dėl per daug procesų. „Kubelet“ vykdo visus jūsų nurodytus procesus ir patikrinimus, taip pat savo.

Žinoma, viena našlaičių paslauga nesustabdys sistemos, o „Kubernetes“ sukurta taip, kad ją būtų galima išplėsti nuo pat pradžių. Bet jei vietoj vienos paslaugos atsiranda milijonas, kubeletas pradeda dusti.

Jei dėl kokios nors priežasties ištrinate diegimą (konteinerį, vaizdą ar bet ką), tiesiog būtinai atlikite visišką išvalymą.

Susipažinkite – Go

Pagrindinį patarimą išsaugojome paskutiniam. Išmokite Go programavimo kalbą.

„Kubernetes“ sukurta „Go“, visi plėtiniai parašyti „Go“, o „client-go“ klientų biblioteka taip pat oficialiai palaikoma.

Jis gali būti naudojamas įvairiems ir įdomiems dalykams. Pavyzdžiui, išplėsti Kubernetes sistemą pagal savo skonį. Taigi, galite naudoti savo programas duomenims rinkti, programoms diegti ar tiesiog konteineriams išvalyti.

„Go“ programavimo kalbos mokymasis ir „client-go“ įsisavinimas yra bene svarbiausias patarimas, kurį galite duoti naujiems „Kubernetes“ vartotojams.

Išversta su Mail.ru Cloud Solutions palaikymu

Ką dar skaityti:

  1. Trys automatinio mastelio keitimo lygiai „Kubernetes“ ir kaip juos efektyviai naudoti.
  2. Kubernetes darbuotojų mazgai: daug mažų arba keli dideli?
  3. 25 naudingi „Kubernetes“ diegimo ir valdymo įrankiai.

Šaltinis: www.habr.com

Добавить комментарий