7 best practices for container operations according to Google

ShĂ«n. pĂ«rkth.: Autori i artikullit origjinal Ă«shtĂ« ThĂ©o Chamley, arkitekt i zgjidhjeve tĂ« cloud nga Google. NĂ« kĂ«tĂ« publikim pĂ«r blogun e Google Cloud, ai paraqet njĂ« pĂ«rmbledhje tĂ« shkurtĂ«r nga njĂ« udhĂ«zues mĂ« i detajuar i kompanisĂ« sĂ« tij, tĂ« quajtur "Praktikat mĂ« tĂ« mira pĂ«r operimin e kontejnerĂ«ve“. NĂ« tĂ«, ekspertĂ«t e Google kanĂ« mbledhur praktikat mĂ« tĂ« mira pĂ«r menaxhimin e kontejnerĂ«ve nĂ« kontekstin e pĂ«rdorimit tĂ« Google Kubernetes Engine dhe mĂ« shumĂ«, duke pĂ«rfshirĂ« njĂ« gamĂ« tĂ« gjerĂ« temash: nga siguria deri te monitorimi dhe regjistrimi. Pra, cilat janĂ« praktikat mĂ« tĂ« rĂ«ndĂ«sishme nĂ« punĂ«n me kontejnerĂ«t sipas mendimit tĂ« Google?

7 best practices for container operations according to Google

Kubernetes Engine (njĂ« shĂ«rbim i bazuar nĂ« Kubernetes pĂ«r tĂ« drejtuar aplikacione tĂ« kontejnerizuara nĂ« Google Cloud — shĂ«nim i pĂ«rkthyesit.) — Ă«shtĂ« njĂ« nga mĂ«nyrat mĂ« tĂ« mira pĂ«r tĂ« drejtuar ngarkesa pune qĂ« kanĂ« nevojĂ« pĂ«r shkallĂ«zim. Kubernetes do tĂ« sigurojĂ« funksionimin pa probleme tĂ« shumicĂ«s sĂ« aplikacioneve, nĂ«se janĂ« tĂ« kontejnerizuara. Por nĂ«se dĂ«shironi qĂ« aplikacioni tĂ« jetĂ« i lehtĂ« pĂ«r t'u menaxhuar dhe dĂ«shironi tĂ« shfrytĂ«zoni tĂ« gjitha avantazhet e Kubernetes, Ă«shtĂ« e nevojshme tĂ« ndiqni praktikat mĂ« tĂ« mira. Ato do ta thjeshtojnĂ« operimin e aplikacionit, monitorimin dhe pastrimin e tij, si dhe do tĂ« rrisin sigurinĂ«.

Në këtë artikull do të kalojmë nëpër një listë të asaj që duhet të dini dhe të bëni për funksionimin efektiv të kontejnerëve në Kubernetes. Ata që dëshirojnë të thellohen në detaje duhet të lexojnë materialin Praktikat më të mira për operimin e kontejnerëve, si dhe të kenë parasysh postimin tonë më të hershëm për ndërtimin e kontejnerëve.

1. Përdorni mekanizmat natyrorë të kontejnerëve për regjistrimin

NĂ«se aplikacioni Ă«shtĂ« i drejtuar nĂ« njĂ« grup Kubernetes, pĂ«r regjistrimin nuk nevojitet shumĂ«. NjĂ« sistem i centralizuar i regjistrimit, pĂ«r tĂ« cilin ndoshta tashmĂ« Ă«shtĂ« i integruar nĂ« grupe, pĂ«rgjigjet pĂ«r kĂ«tĂ« nĂ« rastin e pĂ«rdorimit tĂ« Kubernetes Engine Stackdriver Logging. (ShĂ«n. pĂ«rkth.: NdĂ«rsa pĂ«r njĂ« instalim tĂ« vetĂ«-kontrolluar Kubernetes, rekomandojmĂ« tĂ« shikoni zgjidhjen tonĂ« me burim tĂ« hapur — loghouse.) Mos e kompliko jetĂ«n dhe pĂ«rdor mekanizmat natyrorĂ« tĂ« regjistrimit tĂ« kontejnerĂ«ve. Shkruani regjistrat nĂ« stdout dhe stderr — ato do tĂ« merren automatikisht, ruhen, dhe indeksohen.

Nëse dëshironi, mund të shkruani gjithashtu regjistrat në formatin JSON. Ky qasje do të lejojë që të shtoni lehtësisht metadatat. Dhe së bashku me to, në Stackdriver Logging do të ketë mundësi kërkimi në regjistrat duke përdorur këto metadata.

2. Sigurohuni që kontejnerët janë stateless dhe të pandryshueshëm

Për funksionimin e saktë të konteinerëve në klasterin Kubernetes, ato duhet të jenë stateless dhe immutable. Kur këto kushte plotësohen, Kubernetes do të jetë në gjendje të kryejë punën e tij, duke krijuar dhe shkatërruar entitete të aplikacionit kur dhe ku nevojitet.

Stateless do të thotë se çdo gjendje (të dhëna të qëndrueshme të çdo lloji) ruhen jashtë konteinerit. Për këtë, në varësi të nevojave, mund të angazhohen lloje të ndryshme të ruajtjeve të jashtme: Ruajtja në Re, Disku i Qëndrueshëm, Redis, Cloud SQL apo baza të tjera të dhënash të menaxhuara. (Shën. përkth.: Më shumë rreth kësaj mund të lexoni gjithashtu në artikullin tonë "Operatorët për Kubernetes: si të ekzekutoni aplikacione stateful».)

Immutable do tĂ« thotĂ« se konteineri nuk do tĂ« modifikohet gjatĂ« jetĂ«s sĂ« tij: nuk ka pĂ«rditĂ«sime, patches, ndryshime nĂ« konfiguracion. NĂ«se ju nevojitet tĂ« pĂ«rditĂ«soni kodin e aplikacionit ose tĂ« aplikoni njĂ« patch, krijoni njĂ« imazh tĂ« ri dhe depozitoni atĂ«. Rekomandohet tĂ« nxirreni konfiguracionin e konteinerit (porta pĂ«r dĂ«gjim, opsionet e mjedisit ekzekutiv etj.) jashtĂ« — nĂ« Sekretet dhe ConfigMaps. Ato mund tĂ« pĂ«rditĂ«sohen pa pasur nevojĂ« tĂ« krijoni njĂ« imazh tĂ« ri tĂ« konteinerit. PĂ«r krijimin e thjeshtĂ« tĂ« pipeline-ve pĂ«r ndĂ«rtimin e imazheve mund tĂ« pĂ«rdorni Cloud Build. (ShĂ«n. pĂ«rkth.: Ne pĂ«r kĂ«to qĂ«llime pĂ«rdorim mjetin Open Source dapp.)

7 best practices for container operations according to Google
Shembulli i përditësimit të konfiguracionit të Deployment në Kubernetes duke përdorur ConfigMap, të montuar në pod për si një konfigurim

3. Shmangni konteinerët me privilegje

Ju nuk i ekzekutoni aplikacionet nën root në serverat tuaj, apo jo? Nëse një sulmues fiton akses në aplikacion, ai do të ketë qasje me privilegje root. Po të njëjtat konsiderata vlejnë edhe për të mos e ekzekutuar konteinerët me privilegje. Nëse nevojitet të ndryshoni cilësimet në host, mund t'u jepni konteinerëve të veçantë capabilities përmes opsionit securityContext në Kubernetes. Nëse nevojitet të ndryshoni sysctls, Kubernetes ka një annotim të veçantë për këtë. Në përgjithësi, përpiquni të përdorni sa më shumë init- dhe konteinerë sidecar për kryerjen e operacioneve të tilla me privilegje. Ata nuk kanë nevojë për aksesim për asnjë trafik të brendshëm apo të jashtëm.

Nëse ju menaxhoni klasterin, mund të përdorni Pod Security Policy për kufizimet në përdorimin e konteinerëve me privilegje.

4. Shmangni ekzekutimin nën root

ËshtĂ« folur pĂ«r kontenierĂ«t me privilegje, por do tĂ« ishte akoma mĂ« mirĂ« qĂ« nĂ« pĂ«rputhje me kĂ«tĂ« tĂ« mos filloni aplikacione nĂ«n pĂ«rdoruesin root brenda kontenierit. NĂ«se njĂ« haker gjen njĂ« vulnerabilitet nĂ« aplikacion me tĂ« drejta root qĂ« lejon ekzekutimin e kodit, dhe mĂ« pas mund tĂ« dalĂ« jashtĂ« kufijve tĂ« kontenierit pĂ«rmes njĂ« vulnerabiliteti ende tĂ« panjohur, ai do tĂ« ketĂ« kontrollin e root nĂ« host.

Mënyra më e mirë për të shmangur këtë është, në radhë të parë, të mos filloni asgjë nën root. Për këtë, mund të përdorni drejtpërdrejtë USER në Dockerfile ose runAsUser në Kubernetes. Administratori i klasterit gjithashtu mund ta konfigurojë një sjellje të detyrueshme duke përdorur Pod Security Policy.

5. Bëni aplikacionin të lehtë për monitorim

Siç Ă«shtĂ« regjistrimi, monitorimi Ă«shtĂ« njĂ« pjesĂ« e pandashme e menaxhimit tĂ« aplikacionit. NjĂ« zgjidhje e njohur pĂ«r monitorimin nĂ« komunitetin Kubernetes Ă«shtĂ« Prometheus — njĂ« sistem qĂ« zbulon automatikisht pod-Ă«t dhe shĂ«rbimet qĂ« kĂ«rkojnĂ« monitorim. (ShĂ«n. pĂ«rkth.: Shih gjithashtu raportin tonĂ« tĂ« detajuar nĂ« lidhje me monitorimin pĂ«rmes Prometheus dhe Kubernetes.) Stackdriver Ă«shtĂ« nĂ« gjendje tĂ« monitorojĂ« klasteret Kubernetes dhe pĂ«rfshin versionin e tij tĂ« Prometheus pĂ«r monitorimin e aplikacioneve.

7 best practices for container operations according to Google
Paneli i monitorimit Kubernetes në Stackdriver

Prometheus pret që aplikacioni të japë metrikat në një HTTP endpoint. Për këtë, janë të disponueshme bibliotekat klient të Prometheus. I njëjti format po ashtu përdoret nga mjete të tjera si OpenCensus dhe Istio.

6. Bëni të disponueshëm gjendjen shëndetësore të aplikacionit

Menaxhimi i aplikacionit në prodhim ndihmohet nga aftësia e tij për të raportuar gjendjen e tij tërë sistemit. A është aplikacioni i nisur? A është ai në rregull? A është i gatshëm për të pranuar trafik? Si po sillet? Mënyra më e zakonshme për të zgjidhur këtë problem është të implementoni kontrollet e shëndetit (health checks). Kubernetes ka dy lloje të tyre: liveness dhe readiness probes.

Për liveness probe (kontrolli i jetesës) aplikacioni duhet të ketë një HTTP endpoint që kthen një përgjigje "200 OK" nëse ai funksionon dhe varësitë e tij kryesore janë të kënaqura. Për readiness probe (kontrolli i gatishmërisë për shërbim) Aplikacioni duhet të ketë një endpoint tjetër HTTP që kthen një përgjigje "200 OK", nëse aplikacioni është në gjendje të shëndoshë, hapat e inicializimit janë përfunduar dhe çdo kërkesë e saktë nuk çon në gabim. Kubernetes do të drejtojë trafikun në kontejner vetëm në rast se aplikacioni është i gatshëm sipas këtyre kontrollimeve. Dy endpointët mund të kombinohen nëse nuk ka ndryshim mes gjendjeve të jetës (liveness) dhe gatishmërisë (readiness).

Më shumë rreth kësaj mund të lexoni në artikullin përkatës nga Sandeep Dinesh, Avokat i Zhvillimit në Google: "Praktikat më të mira të Kubernetes: Cilësimi i kontrolleve të shëndetit me kontrollet e gatishmërisë dhe jetësisë».

7. Zgjidhni kujdes me versionin e imazhit

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Ă«rtime tĂ« KontejnerĂ«ve. NĂ«se imazhi aplikon njĂ« sistem qĂ« Ă«shtĂ« i afĂ«rt me versionimin semantik, Ă«shtĂ« e nevojshme tĂ« merret parasysh specifikimi i etiketimit. PĂ«r shembull, etiketa latest mund tĂ« lĂ«vizĂ« shpesh nga njĂ« imazh nĂ« njĂ« tjetĂ«r — nuk mund tĂ« mbĂ«shteteni nĂ« tĂ«, nĂ«se ju nevojiten ndĂ«rtime dhe instalime tĂ« parashikueshme dhe tĂ« riprodhueshme.

Mund të përdorni etiketën X.Y.Z ((ato pothuajse gjithmonë mbeten të pandryshuara), megjithatë në këtë rast mbani nën kontroll të gjitha patch-ët dhe përditësimet për imazhin. Nëse imazhi që po përdorni ka etiketën X.Y, kjo është një mundësi e mirë e një mesatare të arsyeshme. Duke e zgjedhur atë, automatikisht merrni patch-et dhe, njëkohësisht, mbështeteni në një version stabil të aplikacionit.

P.S. nga përkthyesi

Lexoni gjithashtu në blogun tonë:

Burimi: habr.com

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster