KÄdÄ brÄ«dÄ«, izmantojot Kubernetes klasteru, ir jÄatjaunina darbojoÅ”ie mezgli. Tas var ietvert pakotÅu atjauninÄjumus, kodola atjauninÄjumus vai jaunu virtuÄlÄs maŔīnas attÄlu izvietoÅ”anu. Kubernetes terminoloÄ£ijÄ to sauc "BrÄ«vprÄtÄ«gs traucÄjums".
Å Ä« ziÅa ir daļa no 4 ziÅu sÄrijas:
Å is ieraksts.
Pareiza pÄkstu izslÄgÅ”ana Kubernetes klasterÄ«
AizkavÄta aplikuma pÄrtraukÅ”ana, kad tÄ tiek dzÄsta
KÄ izvairÄ«ties no Kubernetes klastera dÄ«kstÄves, izmantojot PodDisruptionBudgets
(aptuveni. TuvÄkajÄ laikÄ sagaidiet pÄrÄjo sÄrijas rakstu tulkojumus)
Å ajÄ rakstÄ mÄs aprakstÄ«sim visus rÄ«kus, ko nodroÅ”ina Kubernetes, lai panÄktu nulles dÄ«kstÄvi jÅ«su klasterÄ« strÄdÄjoÅ”ajiem mezgliem.
ProblÄmas definÄÅ”ana
SÄkumÄ mÄs izmantosim naivu pieeju, identificÄsim problÄmas un novÄrtÄsim Ŕīs pieejas iespÄjamos riskus, kÄ arÄ« veidosim zinÄÅ”anas, lai atrisinÄtu katru problÄmu, ar kuru saskaramies visa cikla laikÄ. RezultÄts ir konfigurÄcija, kas izmanto dzÄ«ves cikla ÄÄ·us, gatavÄ«bas zondes un Pod traucÄjumu budžetus, lai sasniegtu mÅ«su nulles dÄ«kstÄves mÄrÄ·i.
Lai sÄktu savu ceļojumu, Åemsim konkrÄtu piemÄru. PieÅemsim, ka mums ir divu mezglu Kubernetes klasteris, kurÄ darbojas lietojumprogramma ar diviem podiem, kas atrodas aiz Service:
SÄksim ar diviem podiem ar Nginx un Service, kas darbojas mÅ«su divos Kubernetes klastera mezglos.
MÄs vÄlamies atjauninÄt divu mÅ«su klastera darbinieku mezglu kodola versiju. KÄ mÄs to darÄm? VienkÄrÅ”s risinÄjums bÅ«tu palaist jaunus mezglus ar atjauninÄto konfigurÄciju un pÄc tam izslÄgt vecos mezglus, startÄjot jaunos. Lai gan tas darbosies, ar Å”o pieeju bÅ«s dažas problÄmas:
IzslÄdzot vecos mezglus, tiks izslÄgti arÄ« tajos strÄdÄjoÅ”ie podi. Ko darÄ«t, ja pÄkstis ir jÄiztÄ«ra, lai to graciozai izslÄgtu? JÅ«su izmantotÄ virtualizÄcijas sistÄma var nesagaidÄ«t, lÄ«dz tiks pabeigts tÄ«rÄ«Å”anas process.
Ko darÄ«t, ja vienlaikus izslÄdzat visus mezglus? JÅ«s iegÅ«sit pienÄcÄ«gu dÄ«kstÄvi, kamÄr pÄksti pÄrvietosies uz jauniem mezgliem.
Mums ir nepiecieÅ”ams veids, kÄ graciozi migrÄt aplikumus no veciem mezgliem, vienlaikus nodroÅ”inot, ka neviens no mÅ«su darbinieku procesiem nedarbojas, kamÄr veicam izmaiÅas mezglÄ. Vai arÄ« veicot pilnÄ«gu klastera nomaiÅu, kÄ tas ir piemÄrÄ (tas ir, mÄs aizstÄjam VM attÄlus), mÄs vÄlamies pÄrsÅ«tÄ«t darbojoÅ”Äs lietojumprogrammas no vecajiem mezgliem uz jauniem. Abos gadÄ«jumos mÄs vÄlamies neļaut jauniem podiem ieplÄnot plÄnoÅ”anu vecajos mezglos un pÄc tam izlikt no tiem visus darbojoÅ”os blokus. Lai sasniegtu Å”os mÄrÄ·us, mÄs varam izmantot komandu kubectl drain.
Visu pÄkstu pÄrdalÄ«Å”ana no mezgla
DrenÄžas darbÄ«ba ļauj pÄrdalÄ«t visas pÄkstis no mezgla. DrenÄžas izpildes laikÄ mezgls tiek atzÄ«mÄts kÄ neplÄnojams (karogs NoSchedule). Tas neļauj uz tÄ parÄdÄ«ties jaunas pÄkstis. PÄc tam drenÄža sÄk izspiest pÄkstis no mezgla, izslÄdz konteinerus, kas paÅ”laik darbojas mezglÄ, nosÅ«tot signÄlu TERM konteineri podiÅÄ.
Kaut gan kubectl drain veiks lielisku darbu, izliekot pÄkstis, ir divi citi faktori, kas var izraisÄ«t kanalizÄcijas darbÄ«bas neveiksmi:
JÅ«su pieteikumam jÄbÅ«t iespÄjai pÄc iesniegÅ”anas graciozi pÄrtraukt TERM signÄls. Kad pÄkstis tiek izliktas, Kubernetes sÅ«ta signÄlu TERM konteinerus un gaida to apstÄÅ”anos uz noteiktu laiku, pÄc kura, ja tie nav apstÄjuÅ”ies, tos pÄrtrauc piespiedu kÄrtÄ. JebkurÄ gadÄ«jumÄ, ja jÅ«su konteiners neuztver signÄlu pareizi, jÅ«s joprojÄm varat nepareizi nodzÄst aplikumus, ja tie paÅ”laik darbojas (piemÄram, notiek datu bÄzes transakcija).
JÅ«s zaudÄjat visas pÄkstis, kurÄs ir jÅ«su pieteikums. Tas var nebÅ«t pieejams, kad jaunos mezglos tiek palaisti jauni konteineri vai, ja jÅ«su podi ir izvietoti bez kontrolleriem, tie var netikt restartÄti vispÄr.
IzvairÄ«Å”anÄs no dÄ«kstÄves
Lai samazinÄtu dÄ«kstÄves laiku, ko izraisa brÄ«vprÄtÄ«gi traucÄjumi, piemÄram, mezgla iztukÅ”oÅ”anas darbÄ«ba, Kubernetes nodroÅ”ina Å”Ädas kļūdu apstrÄdes iespÄjas:
PÄrÄjÄs sÄrijas daļÄs mÄs izmantosim Ŕīs Kubernetes funkcijas, lai mazinÄtu pod migrÄcijas ietekmi. Lai bÅ«tu vieglÄk ievÄrot galveno ideju, mÄs izmantosim iepriekÅ” minÄto piemÄru ar Å”Ädu resursu konfigurÄciju:
Å Ä« konfigurÄcija ir minimÄls piemÄrs Deployment, kas pÄrvalda nginx pÄkstis klasterÄ«. TurklÄt konfigurÄcijÄ ir aprakstÄ«ts resurss Service, ko var izmantot, lai piekļūtu nginx pÄkstÄ«m klasterÄ«.
Visa cikla laikÄ mÄs iteratÄ«vi paplaÅ”inÄsim Å”o konfigurÄciju, lai tÄ galu galÄ ietvertu visas Kubernetes nodroÅ”inÄtÄs iespÄjas, lai samazinÄtu dÄ«kstÄves laiku.
Lai iegÅ«tu pilnÄ«bÄ ieviestu un pÄrbaudÄ«tu Kubernetes klastera atjauninÄjumu versiju, lai bez dÄ«kstÄves AWS un ne tikai, apmeklÄjiet vietni Gruntwork.io.