Parimad 10 Kubernetes'i nÀpunÀidet ja nippi

Parimad 10 Kubernetes'i nÀpunÀidet ja nippi

Internetis on palju viidatud kirjandust, kuid mĂ”nikord on kĂ”ige vÀÀrtuslikumad just kĂ”ige lihtsamad soovitused. Meeskond Mail.ru Kubernetes aaS tĂ”lkis kĂŒmne nĂ€punĂ€ite ja nipi kogumiku, mille autor koostas aasta jooksul, töötades Kubernetes'ega. Soovitused ei ole tĂ€htsuse jĂ€rgi jĂ€rjestatud, kuid usume, et igaĂŒks leiab siit midagi kasulikku endale.

Lihtsaim kÀsk Kubernetes'i kasutamises

Alustuseks on vÔib-olla kÔige lihtsam ja kasulikum tegevus Kubernetes'i kasutamisel. JÀrgmine kÀsk aktiveerib kÀskude automaattÀiendamise kubectl bash'i terminalis:

echo "source > ~/ .bashrc

Automaatne tÀiendamine kubectl salvestatakse .bashrc faili ja aktiveeritakse automaatselt igal korral, kui terminal kÀivitatakse. See kiirendab pikkade kÀskude ja parameetrite, nagu all-namespacesLisaks leiate bash'i Kubernetes'i dokumenteerimisest.

MÀlu ja CPU Ôigused vaikimisi nimel

Kui rakendus on valesti kirjutatud, nĂ€iteks avab iga sekundi jĂ€rel uue ĂŒhenduse andmebaasiga, kuid kunagi ei sulge seda, toimub klastris mĂ€lu lekke. Ja kui rakenduse juurutamisel pole mÀÀratud mĂ€lupiirangut, vĂ”ib see pĂ”hjustada sĂ”lme riket.

Ette vÀltimiseks vÔimaldab Kubernetes igas nimespetsiifiliselt mÀÀrata vaikimisi piirangud. Need kirjutatakse yml-faili, mis on seotud konkreetse nimespetsiifikaga. Siin on sellise faili nÀide:

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

Looge selline yml-fail ja rakendage see igas nimespetsiifikas. NĂ€iteks nimespetsiifikas limit-example. NĂŒĂŒd kehtib igasuguste konteinerite puhul, mis on ĂŒles seatud selles nimespetsiifikas, piiri vÀÀrtus 512Mi, vĂ€lja arvatud juhul, kui antud konteinerile on mÀÀratud mĂ”ni muu individuaalne piir.

PrĂŒgipuhastus vanades Kubernetes'i versioonides

Kubelet alustab vaikimisi prĂŒgipuhastust, kui var/lib/docker moodustab 90% vabast ketta ruumidest. See on suurepĂ€rane, kuid Kubernetes'i versioonis 1.7 ei olnud vaikimisi piiri indekseeritud inode (faili indeksi) arvu jaoks, mis vastab failide arvule failisĂŒsteemis.

VÔimalik, et teie konteiner var/lib/docker saa kasutada ainult 50% kettaruumi, kuid samas vÔivad inode'id otsa lÔppeda, mis pÔhjustab töötajate töös probleeme.

Vanadel kubelet'i versioonidel vahemikus 1.4 kuni 1.6 tuleb lisada jÀrgmine lipp:

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

Versioonis 1.7 ja uuemates see lipp on vaikimisi seadistatud. Kuid varasemad versioonid ei jÀlginud inoodide piirangut.

Minikube
 vÀike, aga vÔimas kohalik Kubernetes

Minikube on kÔige lihtsam viis kÀivitada kohalik Kubernetes klaster. Seda saab alustada lihtsa kÀsuga:

minikube start

Selle kÀsu tÀitmisel töötab teie arvutis tÔeline Kubernetes klaster.

Parimad 10 Kubernetes'i nÀpunÀidet ja nippi
Illustratsiooni allikas

Nipp seisneb selles, kuidas rakendust koguda ja seda kohalikus klastris kÀivitada. Kui ei anta erilisi juhiseid, kogutakse Docker'i pilt teie arvutis, mitte klastris.

Kuna Docker'it sundida saatma pilti kohalikku Kubernetes klastrisse, antakse docker-machine'ile jÀrgmine kÀsk:

eval $(minikube docker-env)

NĂŒĂŒd saame koguda rakendusi kohalikus Kubernetes klastris.

Ärge jagage kubectl'i ligipÀÀsu kĂ”igile

See tundub ilmne, kuid kui mitu meeskonda kasutavad oma rakenduste jaoks ĂŒhte klastri (milleks Kubernetes on loodud), ei tasu lihtsalt anda ligipÀÀsu kĂ”igile. kubectl. Parim on jagada meeskonnad, mÀÀrates igale neist oma nimespetsiifilised ruumid ja piirates ligipÀÀsu RBAC-poliitikatega.

Sa saad keeruliseks minna, mÀÀrates iga podi jaoks juurdepÀÀsu, lugemise, loomise, kustutamise ja muud Ôigused. Kuid peamine on piirata ligipÀÀsu saladustele, lubades selle ainult administraatoritele. Nii eristame need, kes saavad klastrit hallata, ja need, kes saavad vaid seal rakendusi kÀivitada.

Haldage podide eelarveid

Kuidas tagada, et Kubernetes'i klastris ei esineks ootamatuid seisakuid? PodDisruptionBudget ja veel kord PodDisruptionBudget.

Klastrid uuendatakse perioodiliselt ja sĂ”lmed tĂŒhjendatakse. Miski ei seisa paigal, see on reaalsus. Iga mitme instantsiga rakenduse juurutamisel peab kindlasti olema kaasatud PDB (PodDisruptionBudget). See luuakse lihtsas yaml-failis, mis rakendatakse klastri peale. Konkreetse PDB katvuse mÀÀravad mĂ€rgise valikud.

MÀrkus: PDB eelarvet arvestatakse ainult pöörduva eelarve rikkumise korral (voluntary disruption). NÀiteks riistvarahÀirete korral PDB ei tööta.

PDB nÀide:

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

Kaks peamist parameetrit on matchLabels ja minAvailable. Esimeses parameetris mÀÀratakse, millistele rakendustele eelarve kehtib. NÀiteks, kui mul on juurutamised siltidega app: app-a ja app: app-b, siis kehtib see PDB ainult esimesele.

Parameeter minAvailable arvesse vĂ”etakse sĂ”lme tĂŒhjendamisel (puhastamisel). NĂ€iteks meie nĂ€ites tĂŒhjendamise ajal kĂ”rvaldatakse kĂ”ik instantsid app: app-a, vĂ€lja arvatud kaks.

See vÔimaldab kontrollida, kui palju rakenduse eksemplare peaks olema igal hetkel kÀimas.

Rakenduse töökorralduse jÀlgimine

Seda jÀlgimist saab teostada kahel viisil: Readiness vÔi Liveness kontrollide abil.

Esimene kontroll (readiness) mÀÀrab, kas konteiner on valmis liiklust vastu vÔtma.

Teine (liveness) nÀitab, kas konteiner on töökindel vÔi tuleb see taaskÀivitada.

Vastavad konfiguratsioonid lisatakse lihtsalt yaml-sissekandes. Seal saab mÀÀrata ajutisi, ooteaegu ja kordusproove. TÀiendava informatsiooni saamiseks vaadake Kubernetes dokumentatsiooni.

Sildid igal pool

Sildid on ĂŒks Kubernetes'i pĂ”hikontsepte. Need vĂ”imaldavad objektidel vabalt omavahel suhelda ja luua pĂ€ringuid siltide alusel. Kuberneteses saab isegi minna kliendi juurde ja jĂ€lgida sĂŒndmusi konkreetsete siltide pĂ”hjal.

Siltide abil on vĂ”imalik teha praktiliselt kĂ”ike, kuid hea nĂ€itena vĂ”iks tuua mitme keskkonna loomise programmide kĂ€itamiseks ĂŒhes klastris.

Oletame, et kasutate sama klastri dev ja qa. See tĂ€hendab, et teie kĂ€sutuses on rakendus app-a, mis töötab samal ajal kahes keskkonnas qa ja dev. Sel juhul saame eraldi pöörduda rakenduse eksemplari poole konkreetses keskkonnas, mÀÀrates sobiva parameetri environment. NĂ€iteks, app: app-a ja environment: dev ĂŒhe keskkonna jaoks ja app: app-a ja environment: qa teise jaoks.

See vÔimaldab pöörduda mÔlema rakenduse eksemplari poole, nÀiteks testimise lÀbiviimiseks samal ajal.

Tee jÀrjestikuste toimingute korralduslikuks

Kubernetes on vĂ€ga vĂ”imas sĂŒsteem, kuid iga sĂŒsteem vĂ”ib lĂ”puks ummistuda paljude protsessidega. Kubelet kĂ€ivitab kĂ”ik mÀÀratud protsessid ja kontrollid, samuti oma omad.

Loomulikult ei aeglusta ĂŒkski ĂŒksik teenus sĂŒsteemi ning Kubernetes on algselt loodud skaleerimiseks. Kuid kui ĂŒhe teenuse asemel on miljon, hakkab kubelet sinne upuma.

Kui mingil pÔhjusel kustutate juurutuse (konteineri, pildi, mis iganes), veenduge, et kÔik oleks tÀielikult puhastatud.

Tutvuge Go'ga

Peamine nĂ”uanne jĂ€tsime lĂ”ppu. Õppige programmeerimiskeelt Go.

Kubernetes on kirjutatud Go's, kÔik laiendused on kirjutatud Go'd, ja ametlikult toetatakse klientteeki client-go.

Seda saab kasutada igasuguste huvitavate asjade tegemiseks. NĂ€iteks saate Kubernetes'e sĂŒsteemi laiendamiseks enda maitse jĂ€rgi. Nii saate kasutada enda programme andmete kogumiseks, rakenduste juurutamiseks vĂ”i lihtsalt konteinerite puhastamiseks.

Go programmeerimiskeele Ôppimine ja client-go omandamine on tÔenÀoliselt kÔige olulisem nÔuanne, mida algetaotajatele Kubernetes'e kohta anda.

TÔlgitud Mail.ru Cloud Solutions'i toetusel

Mida veel lugeda:

  1. Kuberneteses on kolm taset automaatset skaleerimist ja kuidas neid tÔhusalt kasutada.
  2. Kubernetes töötlusĂŒksused: palju vĂ€ikeseid vĂ”i vĂ€he suuri?
  3. 25 kasulikku tööriista Kubernetes'e juurutamiseks ja haldamiseks.

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster