InternetÄ ir daudz uzziÅu literatÅ«ras, taÄu dažreiz visvienkÄrÅ”Äkais padoms ir visvÄrtÄ«gÄkais. Komanda Kubernetes aaS no Mail.ru tulkots desmit triku un padomu izlase, ko raksta autore apkopojusi pÄc gada darba ar Kubernetes. Padomi nav sakÄrtoti pÄc svarÄ«guma, taÄu domÄjam, ka katrs atradÄ«s sev ko noderÄ«gu.
VienkÄrÅ”ÄkÄ komanda darbam ar Kubernetes
SÄkumÄ, iespÄjams, visvienkÄrÅ”ÄkÄ un noderÄ«gÄkÄ darbÄ«ba darbÄ ar Kubernetes. SekojoÅ”Ä komanda iespÄjo komandas pabeigÅ”anu kubectl bash ÄaulÄ:
AutomÄtiskÄ pabeigÅ”ana kubectl tiks ierakstÄ«ts .bashrc failÄ un tiks automÄtiski aktivizÄts ikreiz, kad tiek palaists apvalks. Tas paÄtrina garu komandu un parametru ierakstÄ«Å”anu, piemÄram, all-namespaces. VairÄk lasiet sadaÄ¼Ä Kubernetes bash palÄ«dzÄ«ba.
NoklusÄjuma atmiÅas un CPU ierobežojumi nosaukumvietÄ
Ja lietojumprogramma ir uzrakstÄ«ta nepareizi, piemÄram, tÄ katru sekundi atver jaunu savienojumu ar datu bÄzi, bet nekad to neaizver, tad klasterim ir atmiÅas noplÅ«de. Un, ja lietojumprogrammai izvietoÅ”anas laikÄ nav iestatÄ«ts atmiÅas ierobežojums, tas var izraisÄ«t mezgla kļūmi.
Lai to novÄrstu, Kubernetes ļauj iestatÄ«t noklusÄjuma ierobežojumus katrai nosaukumvietai. Tie ir rakstÄ«ti yaml failÄ noteiktai nosaukumvietai. Å eit ir Å”Äda faila piemÄrs:
Izveidojiet Å”Ädu yaml un lietojiet to jebkurÄ nosaukumvietÄ. PiemÄram, uz nosaukumvietu limit-example. Tagad jebkuram Å”ajÄ nosaukumvietÄ izvietotajam konteineram bÅ«s 512 mi ierobežojums, ja vien Å”im konteineram nav papildus iestatÄ«ts cits atseviŔķs ierobežojums.
Kubelet pÄc noklusÄjuma sÄk atkritumu savÄkÅ”anu, kad var/lib/docker aizÅem 90% no pieejamÄs diska vietas. Tas ir lieliski, taÄu lÄ«dz versijai Kubernetes 1.7 nebija noklusÄjuma ierobežojumu izmantoto inožu skaitam, kas atbilst failu skaitam failu sistÄmÄ.
IespÄjams, jÅ«su konteiners var/lib/docker var izmantot tikai 50% diska vietas, bet var beigties inodes, kas radÄ«s problÄmas darbiniekiem.
ViltÄ«ba ir tÄda, kÄ izveidot lietojumprogrammu un palaist to lokÄli Å”ajÄ klasterÄ«. Ja nav Ä«paÅ”i norÄdÄ«jumu, Docker attÄls tiks izveidots jÅ«su datorÄ, nevis klasterÄ«.
Lai piespiestu Docker nosÅ«tÄ«t attÄlu vietÄjam Kubernetes klasterim, doka iekÄrtai tiek dota Å”Äda komanda:
eval $(minikube docker-env)
Tagad mÄs varam veidot lietojumprogrammas vietÄjÄ Kubernetes klasterÄ«.
Nedodiet kubectl piekļuvi visiem
Tas Ŕķiet paÅ”saprotami, taÄu, ja vairÄkas komandas savÄm lietojumprogrammÄm izmanto vienu un to paÅ”u klasteru (kam Kubernetes tika izveidots), jums nevajadzÄtu tikai dot visiem kubectl. LabÄk ir atdalÄ«t komandas, katrai no tÄm pieŔķirot savu nosaukumvietu un ierobežojot piekļuvi, izmantojot RBAC politikas.
Varat apjukt, pieŔķirot tiesÄ«bas piekļūt, lasÄ«t, izveidot, dzÄst un citas darbÄ«bas katram podam. Bet galvenais ir ierobežot piekļuvi noslÄpumiem, atļaujot to tikai administratoriem. TÄdÄ veidÄ mÄs noŔķirsim tos, kuri var pÄrvaldÄ«t kopu, un tos, kuri var tajÄ vienkÄrÅ”i izvietot.
PÄrvaldiet Pod budžetus
KÄ nodroÅ”inÄt bez dÄ«kstÄves lietojumprogrammai Kubernetes klasterÄ«? PodDisruptionBudget un atkal PodDisruptionBudget.
Klasteri tiek periodiski atjauninÄti, un mezgli tiek iztukÅ”oti. Nekas nestÄv uz vietas, tÄda ir realitÄte. Katrai izvietoÅ”anai ar vairÄk nekÄ vienu gadÄ«jumu ir jÄiekļauj PBP (PodDisruptionBudget). Tas ir izveidots vienkÄrÅ”Ä yaml failÄ, kas tiek lietots klasterim. KonkrÄta PBP pÄrklÄjuma zonu nosaka etiÄ·eÅ”u atlasÄ«tÄji.
PiezÄ«me: PBP budžetu Åem vÄrÄ tikai tad, ja budžeta pÄrkÄpums ir atgriezenisks (brÄ«vprÄtÄ«gs traucÄjums). TÄdos gadÄ«jumos kÄ aparatÅ«ras kļūmes PBP nedarbosies.
Divi galvenie parametri ir matchLabels Šø minAvailable. Pirmais parametrs norÄda, uz kurÄm lietojumprogrammÄm attiecas budžets. PiemÄram, ja man ir izvietojumi ar etiÄ·etÄm app: app-a Šø app: app-b, tad Å”is PBP attieksies tikai uz pirmo.
Parametrs minAvailable Åem vÄrÄ, iztukÅ”ojot (tÄ«rot) mezglu. PiemÄram, mÅ«su piemÄrÄ iztukÅ”oÅ”anas laikÄ visas instances tiek izliktas app: app-a, izÅemot divus.
Tas ļauj kontrolÄt, cik lietojumprogrammas gadÄ«jumu ir jÄdarbojas jebkurÄ laikÄ.
Lietojumprogrammas veselības uzraudzība
Å Äda uzraudzÄ«ba ir iespÄjama divos veidos: izmantojot gatavÄ«bas vai dzÄ«vÄ«guma testus.
PirmÄ zonde (gatavÄ«ba) nosaka konteinera gatavÄ«bu uztvert trafiku.
Otrais (dzÄ«vÄ«gums) parÄda, vai konteiners ir vesels vai ir nepiecieÅ”ams restartÄt.
AttiecÄ«gÄs konfigurÄcijas vienkÄrÅ”i tiek pievienotas yaml izvietoÅ”anai. Tur jÅ«s varat norÄdÄ«t taimautus, aizkaves laikus un atkÄrtotu mÄÄ£inÄjumu skaitu. Skatiet sÄ«kÄku informÄciju par tiem Kubernetes dokumentÄcija.
Atzīmes ir visur
EtiÄ·etes ir viens no Kubernetes pamatjÄdzieniem. Tie ļauj objektiem brÄ«vi sazinÄties vienam ar otru, kÄ arÄ« izveidot vaicÄjumus, pamatojoties uz etiÄ·etÄm. PakalpojumÄ Kubernetes varat pat doties uz klientu un skatÄ«ties konkrÄtus tagus.
Ar tagiem varat darÄ«t gandrÄ«z jebko, taÄu labs piemÄrs bÅ«tu izveidot vairÄkas vides, lai palaistu programmas vienÄ klasterÄ«.
PieÅemsim, ka izmantojat to paÅ”u kopu dev Šø qa. Tas nozÄ«mÄ, ka jums var bÅ«t lietojumprogramma app-a, vienlaikus strÄdÄjot abÄs vidÄs qa Šø dev. Å ajÄ gadÄ«jumÄ mÄs varam atseviŔķi piekļūt lietojumprogrammas instancei noteiktÄ vidÄ, norÄdot atbilstoÅ”o parametru environment. PiemÄram, app: app-a Šø environment: dev vienai videi, un app: app-a Šø environment: qa par otro.
Tas ļauj piekļūt abiem lietojumprogrammas gadÄ«jumiem, piemÄram, lai vienlaikus veiktu testÄÅ”anu.
SakÄrto lietas
Kubernetes ir ļoti spÄcÄ«ga sistÄma, taÄu jebkura sistÄma galu galÄ var iestrÄgt ar pÄrÄk daudziem procesiem. Kubelet palaiž visus jÅ«su norÄdÄ«tos procesus un pÄrbaudes, kÄ arÄ« savus.
Protams, viens bÄreÅu pakalpojums nepalÄninÄs sistÄmas darbÄ«bu, un Kubernetes ir paredzÄts mÄrogoÅ”anai no paÅ”a sÄkuma. Bet, ja viena pakalpojuma vietÄ parÄdÄs miljons, kubelets sÄk aizrÄ«ties.
Ja kÄda iemesla dÄļ izdzÄÅ”at izvietoÅ”anu (konteineru, attÄlu vai jebkuru citu), noteikti veiciet pilnÄ«gu tÄ«rÄ«Å”anu.
Iepazīstieties ar Go
Galveno padomu saglabÄjÄm pÄdÄjam. ApgÅ«stiet Go programmÄÅ”anas valodu.
Kubernetes ir izstrÄdÄts programmÄ Go, visi paplaÅ”inÄjumi ir rakstÄ«ti Go, un oficiÄli tiek atbalstÄ«ta arÄ« client-go klientu bibliotÄka.
To var izmantot dažÄdÄm un interesantÄm lietÄm. PiemÄram, lai paplaÅ”inÄtu Kubernetes sistÄmu pÄc savas gaumes. TÄdÄjÄdi varat izmantot savas programmas, lai apkopotu datus, izvietotu lietojumprogrammas vai vienkÄrÅ”i iztÄ«rÄ«tu konteinerus.
Go programmÄÅ”anas valodas apguve un client-go apguve, iespÄjams, ir vissvarÄ«gÄkais padoms, ko varat sniegt jaunajiem Kubernetes lietotÄjiem.