7 praktikat më të mira për operimin e konteinerëve sipas Google

ShĂ«n. pĂ«rk.: Autori i artikullit origjinal — ThĂ©o Chamley, arkitekt i zgjidhjeve cloud nĂ« Google. NĂ« kĂ«tĂ« publikim pĂ«r blogun Google Cloud, ai paraqiti 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Ă«, specialistĂ«t e Google kanĂ« mbledhur praktikat mĂ« tĂ« mira pĂ«r pĂ«rdorimin 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 nĂ« punĂ«n me kontejnerĂ«t sipas mendimit tĂ« Google?

7 praktikat më të mira për operimin e konteinerëve sipas Google

Kubernetes Engine (shĂ«rbimi i bazuar nĂ« Kubernetes pĂ«r ekzekutimin e aplikacioneve tĂ« kontejnerizuara nĂ« Google Cloud — shĂ«n. transl.) — Ă«shtĂ« njĂ« nga mĂ«nyrat mĂ« tĂ« mira pĂ«r tĂ« ekzekutuar ngarkesa pune qĂ« kanĂ« nevojĂ« pĂ«r skalim. Kubernetes do tĂ« sigurojĂ« funksionimin pa probleme tĂ« shumicĂ«s sĂ« aplikacioneve, nĂ«se ato janĂ« tĂ« kontejnerizuara. Por nĂ«se dĂ«shiron qĂ« aplikacioni tĂ« menaxhohet lehtĂ«sisht dhe tĂ« pĂ«rfitosh nga tĂ« gjitha pĂ«rfitimet e Kubernetes, duhet tĂ« ndjekĂ«sh praktikat mĂ« tĂ« mira. Ato do tĂ« thjeshtojnĂ« operimin e aplikacionit, monitorimin dhe shkallĂ«zimin e tij, si dhe do tĂ« rrisin sigurinĂ«.

Në këtë artikull do të shqyrtojmë një listë të asaj që duhet të dini dhe të bëni për funksionimin efikas 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ë kushtojnë vëmendje postit tonë më të hershëm në lidhje me ndërtimin e kontejnerëve.

1. Përdorni mekanizmat native të kontejnerëve për regjistrimin e logeve

NĂ«se aplikacioni ekzekutohet nĂ« njĂ« klaster Kubernetes, pĂ«r loge nuk Ă«shtĂ« nevoja pĂ«r shumĂ«. NjĂ« sistem i centralizuar i regjistrimit tĂ« logeve ndoshta Ă«shtĂ« tashmĂ« i integruar nĂ« klasterin qĂ« pĂ«rdorni. NĂ« rastin e pĂ«rdorimit tĂ« Kubernetes Engine, kjo menaxhohet nga Stackdriver Logging. (ShĂ«n. pĂ«rk.: dhe pĂ«r njĂ« instalim tĂ« vetĂ«-kontrolluar tĂ« Kubernetes, rekomandojmĂ« tĂ« shqyrtoni zgjidhjen tonĂ« me kod burimor — loghouse.) Mos i kompliko vetes jetĂ«n dhe pĂ«rdor mekanizmat native tĂ« regjistrimit tĂ« logeve tĂ« kontejnerĂ«ve. Shkruani loget nĂ« stdout dhe stderr — ato do tĂ« merren automatikisht, ruhen dhe indeksohen.

Nëse dëshironi, mund të shkruani gjithashtu loge në formatin JSON. Ky qasje do të lejojë shtimin e të dhënave meta. Dhe po me to, në Stackdriver Logging do të shfaqet mundësia për të kërkuar në loget duke përdorur këto metadatat.

2. Sigurohuni që kontejnerët të jenë stateless dhe immutable

Për funksionimin e saktë të kontejnerëve në klasterin Kubernetes, ata duhet të jenë stateless dhe immutable. Kur këto kushte përmbushen, Kubernetes do të jetë në gjendje të kryejë punën e tij, duke krijuar dhe shkatërruar entitetet e aplikacionit kur dhe ku është e nevojshme.

Stateless do të thotë që çdo gjendje (të dhënat e vazhdueshme të çdo lloji) ruhet jashtë kontejnerit. Për këtë, në varësi të nevojave, mund të angazhohen lloje të ndryshme të ruajtjes së jashtme: Ruajtja në Cloud, Disqe të Qëndrueshëm, Redis, Cloud SQL ose baza të tjera të dhënash të menaxhuara. (Shën. përk.: Më shumë rreth kësaj lexoni gjithashtu në artikullin tonë "Operatorët për Kubernetes: si të nisni aplikacione stateful».)

Immutable do tĂ« thotĂ« qĂ« kontejneri nuk do tĂ« modifikohet gjatĂ« jetĂ«s sĂ« tij: asnjĂ« pĂ«rditĂ«sim, patch, ndryshime nĂ« konfigurim. NĂ«se ju nevojitet tĂ« pĂ«rditĂ«soni kodin e aplikacionit ose tĂ« aplikoni njĂ« patch, krijoni njĂ« imazh tĂ« ri dhe deployeni atĂ«. Rekomandohet qĂ« konfigurimi i kontejnerit (porti pĂ«r dĂ«gjim, opsionet e mjedisit ekzekutiv, etj.) tĂ« nxirret jashtĂ« — nĂ« Secrets dhe ConfigMaps. Ato mund tĂ« pĂ«rditĂ«sohen pa pasur nevojĂ« tĂ« ndĂ«rtohet njĂ« imazh i ri i kontejnerit. PĂ«r krijimin e thjeshtĂ« tĂ« pipeline-ve pĂ«r ndĂ«rtimin e imazheve mund tĂ« pĂ«rdoret Cloud Build. (ShĂ«n. pĂ«rk.: Ne pĂ«rdorim njĂ« mjet Open Source pĂ«r kĂ«to qĂ«llime dapp.)

7 praktikat më të mira për operimin e konteinerëve sipas Google
Shembulli i përditësimit të konfigurimit të Deployment në Kubernetes duke përdorur ConfigMap, i montuar në pod si konfigurim

3. Shmangni kontejnerët e privilegjuar

SicĂ« e dini, nuk po i drejtoni aplikacionet nĂ«n pĂ«rdoruesin root nĂ« serverat tuaj, apo jo? NĂ«se njĂ« sulmues arrin tĂ« hyjĂ« nĂ« aplikacion, ai do tĂ« ketĂ« akses me tĂ« drejtat e root. TĂ« njĂ«jtat konsiderata vlejnĂ« edhe pĂ«r mos e drejtuar kontejnerĂ«t e privilegjuar. NĂ«se duhet tĂ« ndryshoni cilĂ«simet nĂ« host, mund t’i jepni kontejnerit disa capabilities nĂ«pĂ«rmjet opsionit securityContext nĂ« Kubernetes. NĂ«se duhet tĂ« ndryshoni sysctls, Kubernetes ka njĂ« annotim tĂ« veçantĂ« pĂ«r kĂ«tĂ«. PĂ«r gjithçka, pĂ«rpiquni tĂ« pĂ«rdorni sa mĂ« shumĂ« init- dhe kontejnerĂ«t sidecar pĂ«r tĂ« kryer operacione tĂ« tilla me privilegje. Ata nuk kĂ«rkojnĂ« akses pĂ«r asnjĂ« lloj trafiku, qoftĂ« tĂ« brendshĂ«m apo tĂ« jashtĂ«m.

Nëse jeni duke administruar një klaster, mund të përdorni Politika e Sigurisë së Pod për kufizimet në përdorimin e kontejnerëve të privilegjuar.

4. Shmangni drejtpërdrejtë nën root

ËshtĂ« folur pĂ«r kontejnerĂ«t me privilegje, por do tĂ« ishte edhe mĂ« mirĂ« nĂ«se, pĂ«rveç kĂ«saj, nuk do tĂ« aktivizoni aplikacione brenda kontejnerit si root. NĂ«se njĂ« sulmues gjen njĂ« dobĂ«si tĂ« largĂ«t nĂ« aplikacionin me tĂ« drejta root qĂ« lejon ekzekutimin e kodit, dhe mĂ« pas arrin tĂ« dalĂ« jashtĂ« kontejnerit pĂ«rmes njĂ« dobĂ«sie qĂ« nuk dihet ende, ai do tĂ« fitojĂ« akses root nĂ« host.

Mënyra më e mirë për të evituar këtë është, në radhë të parë, të mos aktivizoni asgjë si root. Për këtë mund të përdorni direktivën USER në Dockerfile ose runAsUser në Kubernetes. Administratori i grumbullit gjithashtu mund të konfigurojë një sjellje të detyruar përmes Politika e Sigurisë së Pod.

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

Ashtu siç Ă«shtĂ« logimi, monitorimi Ă«shtĂ« njĂ« pjesĂ« thelbĂ«sore e menaxhimit tĂ« aplikacionit. NjĂ« zgjidhje popullore pĂ«r monitorimin nĂ« komunitetin Kubernetes Ă«shtĂ« Prometheus — njĂ« sistem qĂ« zb discovers (zbulo) automatikisht pod-et dhe shĂ«rbimet qĂ« kĂ«rkojnĂ« monitorim. (ShĂ«n. pĂ«rk.: Shih gjithashtu raportin tonĂ« tĂ« detajuar nĂ« lidhje me monitorimin me Prometheus dhe Kubernetes.) Stackdriver Ă«shtĂ« nĂ« gjendje tĂ« monitorojĂ« grumbujt Kubernetes dhe pĂ«rfshin versionin e tij tĂ« Prometheus pĂ«r monitorimin e aplikacioneve.

7 praktikat më të mira për operimin e konteinerëve sipas Google
Paneli i monitorimit Kubernetes në Stackdriver

Prometheus pret që aplikacioni të hedhë metrikat në endpoint HTTP. Për këtë, janë të disponueshme bibliotekat e klientit të Prometheus. I njëjti format përdor edhe mjete të tjera si OpenCensus dhe Istio.

6. Bëni të arritshëm gjendjen e shëndetit të aplikacionit

Menaxhimi i aplikacionit në prodhim ndihmohet nga aftësia e tij për të raportuar mbi gjendjen e tij në të gjithë sistemin. A është e hapur aplikacioni? A është në rregull? A është gati të pranojë trafik? Si po sillet? Mënyra më e zakonshme për të zgjidhur këtë çështje është implementimi i kontrollit të 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ë endpoint HTTP që kthen 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 të ndryshëm HTTP që kthen përgjigjen "200 OK" nëse aplikacioni është në gjendje të shëndetshme, hapat e inicializimit janë përfunduar dhe çdo kërkesë e saktë nuk shkakton një gabim. Kubernetes do të drejtojë trafikun në kontejner vetëm kur aplikacioni të jetë i gatshëm sipas këtyre kontrollove. Dy endpoint mund të bashkohen nëse nuk ka diferencë mes gjendjeve të vitalitetit (liveness) dhe gatishmërisë (readiness).

Më shumë rreth kësaj mund të lexoni në artikullin përkatës nga Sandeep Dinesh, Advocati i Zhvilluesve në Google: "praktikat më të mira të Kubernetes: Vendosja e kontrollimeve të shëndetit me sondat e gatishmërisë dhe vitalitetit"».

7. Zgjidhni me kujdes 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Ă«rtimin e konteinerĂ«ve. NĂ«se imazhi pĂ«rdor njĂ« sistem tĂ« ngjashĂ«m me versionimin semantik, Ă«shtĂ« e nevojshme tĂ« merren parasysh karakteristikat e etiketimit. PĂ«r shembull, etiketimi latest mund tĂ« lĂ«vizĂ« shpesh nga njĂ« imazh nĂ« njĂ« tjetĂ«r — nuk mund tĂ« mbĂ«shteteni Ă« pĂ«r ndĂ«rtimet dhe instalimet e parashikueshme dhe tĂ« riprodhueshme.

Mund të përdorni etiketën X.Y.Z (ato zakonisht mbeten të pandryshuar), megjithatë në këtë rast, sigurohuni të ndiqni të gjitha patch-et dhe përditësimet për imazhin. Nëse imazhi që përdoret ka një etiketë X.Y, kjo është një variant i mirë përmes qëndresës. Duke e zgjedhur atë, automatikisht merrni patch-et dhe njëkohësisht mbështeteni në një version të stabilizuar të aplikacionit.

P.S. nga përkthyesi

Lexoni gjithashtu në blogun tonë:

Burimi: habr.com

Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« đŸ”„ Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« | ProHoster