7 praktikat më të mira për përdorimin e kontejnerëve sipas Google
Shënim. përkth.: Autori i artikullit origjinal është Théo Chamley, arkitekt i Google Cloud Solutions. Në këtë postim për blogun e Google Cloud, ai ofron një përmbledhje të udhëzuesit më të detajuar të kompanisë së tij, të quajtur "Praktikat më të mira për funksionimin e kontejnerëve" Në të, ekspertët e Google mblodhën praktikat më të mira për funksionimin e kontejnerëve në kontekstin e përdorimit të Google Kubernetes Engine dhe më shumë, duke prekur një gamë të gjerë temash: nga siguria te monitorimi dhe regjistrimi. Pra, cilat janë praktikat më të rëndësishme të kontejnerëve sipas Google?
Motori Kubernetes(Shërbimi i bazuar në Kubernetes për ekzekutimin e aplikacioneve me kontejnerë në Google Cloud - përafërsisht. përkthimi) është një nga mënyrat më të mira për të ekzekutuar ngarkesat e punës që duhet të shkallëzohen. Kubernetes do të sigurojë funksionimin e qetë të shumicës së aplikacioneve nëse ato janë të kontejnerizuara. Por nëse dëshironi që aplikacioni juaj të jetë i lehtë për t'u menaxhuar dhe dëshironi të përfitoni plotësisht nga Kubernetes, duhet të ndiqni praktikat më të mira. Ata do të thjeshtojnë funksionimin e aplikacionit, monitorimin dhe korrigjimin e tij, si dhe do të rrisin sigurinë.
Në këtë artikull, ne do të shqyrtojmë një listë të gjërave që duhet të dini dhe të bëni për të drejtuar kontejnerët në mënyrë efektive në Kubernetes. Ata që dëshirojnë të thellohen në detaje duhet të lexojnë materialin Praktikat më të mira për funksionimin e kontejnerëve, dhe gjithashtu kushtojini vëmendje tonë postimi i mëparshëm rreth montimit të kontejnerëve.
1. Përdorni mekanizmat vendas të prerjeve të kontejnerëve
Nëse aplikacioni funksionon në një grup Kubernetes, nuk nevojitet shumë për regjistrat. Një sistem i centralizuar i regjistrimit ka të ngjarë të jetë ndërtuar tashmë në grupin që po përdorni. Në rastin e përdorimit të Kubernetes Engine, kjo është përgjegjëse Regjistrimi i Stackdriver. (Shënim. përkth.: Dhe nëse përdorni instalimin tuaj të Kubernetes, ju rekomandojmë të shikoni nga afër zgjidhjen tonë me burim të hapur - shtëpi bari.) Mbajeni jetën tuaj të thjeshtë dhe përdorni mekanizmat vendas të prerjeve të kontejnerëve. Shkruani regjistrat në stdout dhe stderr - ato do të merren, ruhen dhe indeksohen automatikisht.
Nëse dëshironi, mund të shkruani edhe regjistra në Formati JSON. Kjo qasje do ta bëjë të lehtë shtimin e meta të dhënave në to. Dhe me ta, Stackdriver Logging do të ketë aftësinë për të kërkuar nëpër regjistra duke përdorur këto meta të dhëna.
2. Sigurohuni që kontejnerët të jenë pa shtetësi dhe të pandryshueshme
Që kontejnerët të funksionojnë siç duhet në një grup Kubernetes, ato duhet të jenë pa shtetësi dhe të pandryshueshme. Pasi të plotësohen këto kushte, Kubernetes mund të bëjë punën e tij, duke krijuar dhe shkatërruar entitete aplikimi kur dhe ku të jetë e nevojshme.
i pandryshueshëm do të thotë që kontejneri nuk do të modifikohet gjatë jetës së tij: nuk ka përditësime, arna, ndryshime konfigurimi. Nëse keni nevojë të përditësoni kodin e aplikacionit ose të aplikoni një patch, krijoni një imazh të ri dhe vendoseni atë. Rekomandohet të zhvendosni konfigurimin e kontejnerit (portin e dëgjimit, opsionet e mjedisit të kohës së funksionimit, etj.) nga jashtë - në Secrets и ConfigMaps. Ato mund të përditësohen pa pasur nevojë të ndërtohet një imazh i ri i kontejnerit. Për të krijuar lehtësisht tubacione me montim imazhi, mund të përdorni Ndërtimi i resë kompjuterike. (Shënim. përkth.: Ne përdorim një mjet me burim të hapur për këto qëllime DAPP.)
Një shembull i përditësimit të konfigurimit të vendosjes në Kubernetes duke përdorur ConfigMap të montuar në pods si një konfigurim
3. Shmangni kontejnerët e privilegjuar
Ju nuk ekzekutoni aplikacione si rrënjë në serverët tuaj, apo jo? Nëse një sulmues hyn në aplikacion, ai do të fitojë qasje rrënjësore. Të njëjtat konsiderata vlejnë për mos drejtimin e kontejnerëve të privilegjuar. Nëse keni nevojë të ndryshoni cilësimet në host, mund t'i jepni kontejnerit specifik aftësitë duke përdorur opsionin securityContext në Kubernetes. Nëse keni nevojë të ndryshoni sysctls, Kubernetes ka abstrakt i veçantë për këtë. Në përgjithësi, përpiquni të shfrytëzoni sa më shumë fillim- dhe kontejnerët e karrigeve anësore për të kryer operacione të ngjashme të privilegjuara. Ata nuk kanë nevojë të jenë të aksesueshme as nga trafiku i brendshëm dhe as i jashtëm.
Nëse administroni një grup, mund të përdorni Politika e sigurisë së pod për kufizime në përdorimin e kontejnerëve të privilegjuar.
4. Shmangni vrapimin si rrënjë
Kontejnerët e privilegjuar tashmë janë diskutuar, por do të jetë edhe më mirë nëse, përveç kësaj, nuk ekzekutoni aplikacione brenda kontejnerit si rrënjë. Nëse një sulmues gjen një cenueshmëri të largët në një aplikacion me të drejta rrënjësore që lejon ekzekutimin e kodit, pas së cilës ai është në gjendje të largohet nga kontejneri përmes një cenueshmërie ende të panjohur, ai do të fitojë rrënjë në host.
Mënyra më e mirë për të shmangur këtë është që në radhë të parë të mos përdorni asgjë si root. Për ta bërë këtë, mund të përdorni direktivën USER в Dockerfile ose runAsUser në Kubernetes. Administratori i grupit gjithashtu mund të konfigurojë sjelljen e zbatimit duke përdorur Politika e sigurisë së pod.
5. Bëni aplikacionin të lehtë për tu monitoruar
Ashtu si regjistrimi, monitorimi është një pjesë integrale e menaxhimit të aplikacionit. Një zgjidhje popullore monitorimi në komunitetin Kubernetes është Prometeu - një sistem që zbulon automatikisht pods dhe shërbimet që kërkojnë monitorim. (Shënim. përkth.: Shihni edhe tonën raport i detajuar në temën e monitorimit duke përdorur Prometheus dhe Kubernetes.)Stackdriver është në gjendje të monitorojë grupimet e Kubernetes dhe përfshin versionin e vet të Prometheus për monitorimin e aplikacioneve.
6. Bëje të disponueshme gjendjen shëndetësore të aplikacionit
Menaxhimi i aplikacionit në prodhim ndihmohet nga aftësia e tij për të komunikuar gjendjen e tij në të gjithë sistemin. A po funksionon aplikacioni? A është ne rregull? A jeni gati për të marrë trafik? Si po sillet ai? Mënyra më e zakonshme për të zgjidhur këtë problem është kryerja e kontrolleve shëndetësore (kontrollet shëndetësore). Kubernetes ka dy lloje: sondat e gjallërisë dhe gatishmërisë.
Për hetimin e gjallërisë (kontrollet e vitalitetit) aplikacioni duhet të ketë një pikë fundore HTTP që kthen një përgjigje "200 OK" nëse është funksional dhe varësitë e tij themelore janë të kënaqura. Për hetimin e gatishmërisë (kontrollet e gatishmërisë së shërbimit) aplikacioni duhet të ketë një pikë tjetër fundore HTTP që kthen një përgjigje "200 OK" nëse aplikacioni është në gjendje të shëndetshme, hapat e inicializimit janë përfunduar dhe çdo kërkesë e vlefshme nuk rezulton në një gabim. Kubernetes do të drejtojë trafikun drejt kontejnerit vetëm nëse aplikacioni është gati sipas këtyre kontrolleve. Dy pika fundore mund të bashkohen nëse nuk ka dallim midis gjendjeve të gjallërisë dhe gatishmërisë.
Shumica e imazheve publike dhe private përdorin një sistem etiketimi të ngjashëm me atë të përshkruar në Praktikat më të mira për ndërtimin e kontejnerëve. Nëse imazhi përdor një sistem afër versionimi semantik, është e nevojshme të merren parasysh specifikat e etiketimit. Për shembull, tag latest mund të lëvizë shpesh nga imazhi në imazh - nuk mund të mbështeteni nëse keni nevojë për ndërtime dhe instalime të parashikueshme dhe të përsëritshme.
Ju mund të përdorni etiketën X.Y.Z (ato janë pothuajse gjithmonë të pandryshuara), por në këtë rast, mbani gjurmët e të gjitha arnimeve dhe përditësimeve të imazhit. Nëse imazhi që po përdorni ka një etiketë X.Y, ky është një opsion i mirë për mesataren e artë. Duke e zgjedhur atë, ju automatikisht merrni arna dhe në të njëjtën kohë mbështeteni në versionin e qëndrueshëm të aplikacionit.