7 geriausia konteinerių naudojimo praktika pagal „Google“.

Pastaba. vert.: Originalaus straipsnio autorius yra Théo Chamley, „Google Cloud Solutions“ architektas. Šiame „Google Cloud“ tinklaraščio įraše jis pateikia išsamesnio savo įmonės vadovo, pavadinto „Geriausia konteinerių naudojimo praktika“ Jame „Google“ ekspertai surinko geriausią praktiką, kaip naudoti konteinerius naudojant „Google Kubernetes Engine“ ir kt., palietę daugybę temų: nuo saugos iki stebėjimo ir registravimo. Taigi, kokios yra svarbiausios konteinerių praktikos, pasak „Google“?

7 geriausia konteinerių naudojimo praktika pagal „Google“.

Kubernetes variklis („Kubernetes“ pagrindu sukurta paslauga, skirta konteinerinėms programoms paleisti „Google Cloud“ – apytiksliai vertimas) yra vienas geriausių būdų vykdyti darbo krūvius, kuriuos reikia keisti. Kubernetes užtikrins sklandų daugelio programų veikimą, jei jos bus talpinamos. Tačiau jei norite, kad jūsų programą būtų lengva valdyti ir norite išnaudoti visas „Kubernetes“ galimybes, turite vadovautis geriausia praktika. Jie supaprastins programos veikimą, jos stebėjimą ir derinimą, taip pat padidins saugumą.

Šiame straipsnyje apžvelgsime sąrašą dalykų, kuriuos turėtumėte žinoti ir padaryti, kad „Kubernetes“ talpykla būtų veiksmingai paleista. Norintys įsigilinti į detales turėtų perskaityti medžiagą Geriausia konteinerių naudojimo praktika, taip pat atkreipkite dėmesį į mūsų ankstesnis įrašas apie konteinerių surinkimą.

1. Naudokite vietinius konteinerių registravimo mechanizmus

Jei programa veikia Kubernetes klasteryje, žurnalams nereikia daug. Tikėtina, kad jūsų naudojamame klasteryje jau įdiegta centralizuota registravimo sistema. Jei naudojate Kubernetes Engine, tai yra atsakinga Stackdriver registravimas. (Pastaba. vert.: O jei naudojate savo „Kubernetes“ diegimą, rekomenduojame atidžiau pažvelgti į mūsų atvirojo kodo sprendimą – rąstinis namas.) Tegul jūsų gyvenimas yra paprastas ir naudokite vietinius konteinerių registravimo mechanizmus. Rašykite žurnalus į stdout ir stderr – jie bus automatiškai gauti, išsaugoti ir indeksuoti.

Jei pageidaujate, taip pat galite rašyti žurnalus JSON formatu. Šis metodas leis lengvai pridėti prie jų metaduomenis. Ir su jais „Stackdriver Logging“ turės galimybę ieškoti žurnaluose naudodama šiuos metaduomenis.

2. Įsitikinkite, kad konteineriai yra be būsenos ir nekeičiami

Kad konteineriai tinkamai veiktų Kubernetes klasteryje, jie turi būti be būsenos ir nekintami. Kai šios sąlygos bus įvykdytos, Kubernetes gali atlikti savo darbą, kurdamas ir sunaikindamas taikomųjų programų objektus, kai ir kur reikia.

Be pilietybės reiškia, kad bet kokia būsena (bet kokios rūšies nuolatiniai duomenys) yra saugoma už konteinerio ribų. Tam, atsižvelgiant į poreikius, galima naudoti įvairių tipų išorinę saugyklą: Debesis saugykla, Nuolatiniai diskai, Redis, Debesų SQL ar kitos valdomos duomenų bazės. (Pastaba. vert.: Daugiau apie tai skaitykite mūsų straipsnyje "„Kubernetes“ operatoriai: kaip paleisti būseną turinčias programas".)

Nekintamas reiškia, kad konteineris per savo gyvavimo laikotarpį nebus modifikuojamas: jokių atnaujinimų, pataisų, konfigūracijos pakeitimų. Jei reikia atnaujinti programos kodą arba pritaikyti pataisą, sukurkite naują vaizdą ir įdiekite jį. Rekomenduojama konteinerio konfigūraciją (klausymo prievadą, vykdymo aplinkos parinktis ir kt.) perkelti išoriškai – į Paslaptys и ConfigMaps. Juos galima atnaujinti nekuriant naujo sudėtinio rodinio vaizdo. Norėdami lengvai sukurti vamzdynus su vaizdo surinkimu, galite naudoti Debesų kūrimas. (Pastaba. vert.: Šiems tikslams naudojame atvirojo kodo įrankį DAPP.)

7 geriausia konteinerių naudojimo praktika pagal „Google“.
Diegimo konfigūracijos atnaujinimo „Kubernetes“ pavyzdys naudojant „ConfigMap“, įmontuotą į blokus kaip konfigūraciją

3. Venkite privilegijuotų konteinerių

Jūs nepaleidžiate programų kaip root savo serveriuose, tiesa? Jei užpuolikas pateks į programą, jis gaus root prieigą. Tie patys svarstymai taikomi nenaudojant privilegijuotųjų sudėtinių rodinių. Jei reikia pakeisti pagrindinio kompiuterio nustatymus, galite nurodyti konkretų konteinerį galimybes naudojant parinktį securityContext Kubernetes mieste. Jei reikia keisti sysctls, Kubernetes turi atskira santrauka už tai. Apskritai stenkitės išnaudoti visas galimybes init- ir šoninių priekabų konteinerius panašioms privilegijuotoms operacijoms atlikti. Jie neturi būti pasiekiami nei vidaus, nei išorės srautui.

Jei administruojate klasterį, galite naudoti Pod saugumo politika dėl privilegijuotų konteinerių naudojimo apribojimų.

4. Venkite paleisti kaip root

Privilegijuotieji konteineriai jau buvo aptarti, tačiau bus dar geriau, jei, be to, konteineryje programų nepaleisite kaip root. Jei užpuolikas aptinka nuotolinį pažeidžiamumą programoje su root teisėmis, leidžiančiomis vykdyti kodą, o po to jis gali palikti konteinerį naudodamas dar nežinomą pažeidžiamumą, jis įgis pagrindinę prieigą prie pagrindinio kompiuterio.

Geriausias būdas to išvengti – iš pradžių nieko nepaleisti kaip root. Norėdami tai padaryti, galite naudoti direktyvą USER в Dockerfile arba runAsUser Kubernetes mieste. Grupės administratorius taip pat gali konfigūruoti vykdymo veiksmus naudodamas Pod saugumo politika.

5. Padarykite programą lengvai stebimą

Stebėjimas, kaip ir registravimas, yra neatsiejama programų valdymo dalis. Populiarus stebėjimo sprendimas Kubernetes bendruomenėje yra Prometėjas - sistema, kuri automatiškai aptinka ankštis ir paslaugas, kurias reikia stebėti. (Pastaba. vert.: Taip pat žiūrėkite mūsų išsami ataskaita stebėjimo naudojant Prometheus ir Kubernetes temą.) Stackdriver gali stebėti Kubernetes grupes ir apima savo Prometheus versiją, skirtą programų stebėjimui.

7 geriausia konteinerių naudojimo praktika pagal „Google“.
„Kubernetes“ prietaisų skydelis „Stackdriver“.

„Prometheus“ tikisi, kad programa perduos metriką į HTTP galutinį tašką. Galima už tai Prometheus klientų bibliotekos. Tą patį formatą naudoja kiti įrankiai, pvz OpenCensus и Tas pats.

6. Padarykite prieinamą programos sveikatos būklę

Programos valdymą gamyboje padeda jos gebėjimas perduoti savo būseną visai sistemai. Ar programa veikia? Ar viskas gerai? Ar esate pasirengę priimti srautą? Kaip jis elgiasi? Dažniausias šios problemos sprendimo būdas – sveikatos patikrinimų įgyvendinimas (sveikatos patikrinimai). Kubernetes yra dviejų tipų: gyvumo ir pasirengimo zondai.

Dėl gyvumo zondo (gyvybingumo patikrinimai) programa turi turėti HTTP galinį tašką, kuris grąžina atsakymą „200 OK“, jei ji veikia ir tenkinamos pagrindinės jos priklausomybės. Dėl parengties zondo (serviso parengties patikrinimai) programa turi turėti kitą HTTP galinį tašką, kuris grąžina atsakymą „200 OK“, jei programa yra sveikos būsenos, inicijavimo veiksmai buvo atlikti ir bet kokia tinkama užklausa nesukelia klaidos. „Kubernetes“ nukreips srautą į konteinerį tik tuo atveju, jei programa bus paruošta pagal šiuos patikrinimus. Du galutiniai taškai gali būti sujungti, jei nėra skirtumo tarp gyvumo ir parengties būsenų.

Daugiau apie tai galite perskaityti susijusiame „Google“ kūrėjo advokato Sandeep Dinesh straipsnyje: „„Kubernetes“ geriausia praktika: sveikatos patikrinimų nustatymas naudojant parengties ir gyvybingumo zondus".

7. Atidžiai pasirinkite vaizdo versiją

Daugumoje viešų ir privačių vaizdų naudojama žymėjimo sistema, panaši į aprašytą Geriausia konteinerių kūrimo praktika. Jei paveikslėlyje naudojama sistema, artima semantinės versijos, būtina atsižvelgti į žymėjimo specifiką. Pavyzdžiui, žymėti latest gali dažnai judėti iš vieno vaizdo į kitą – juo negalima pasikliauti, jei reikia nuspėjamų ir pakartojamų statymų ir diegimų.

Galite naudoti žymą X.Y.Z (jie beveik visada nesikeičia), tačiau tokiu atveju sekite visus vaizdo pataisymus ir atnaujinimus. Jei jūsų naudojamas vaizdas turi žymą X.Y, tai geras aukso vidurio pasirinkimas. Jį pasirinkę automatiškai gausite pataisas ir tuo pačiu pasikliaukite stabilia programos versija.

PS iš vertėjo

Taip pat skaitykite mūsų tinklaraštyje:

Šaltinis: www.habr.com

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