MĂ€rkus tĂ”lke kohta.: Originaali artikli autor on ThĂ©o Chamley, Google'i pilveehitusarhitekt. Selles Google Cloud'i blogipostituses esitleb ta lĂŒhikokkuvĂ”tte oma ettevĂ”tte pikemast juhendist, pealkirjaga "». Selles on Google'i ekspertide poolt kokku kogutud parimad praktikud konteinerite kasutamiseks Google Kubernetes Engine'i kontekstis ja mitte ainult, kĂ€sitledes laia teemade spektrit: alates turvalisusest kuni jĂ€lgimise ja logimise. Nii et millised konteinerite haldamise praktikud on Google'i arvates kĂ”ige olulisemad?

(Kubernetesil pĂ”hinev teenus konteineriseeritud rakenduste kĂ€itamiseks Google Cloud'is â mĂ€rkus tĂ”lke kohta.) on ĂŒks parimaid viise skaleerimist vajavate töökoormuste kĂ€itamiseks. tagab enamikku rakendustest probleemivaba toimimise, kui need on konteineriseeritud. Kuid kui soovite, et rakenduse haldamine oleks lihtne ja soovite kasutada kĂ”iki Kubernetes'e eeliseid, tuleb jĂ€rgida parimaid praktikaid. Need lihtsustavad rakenduse haldamist, selle jĂ€lgimist ja tĂ”rkeotsingut ning suurendavad ka turvalisust.
Selles artiklis vaatame ĂŒle, mida on oluline teada ja teha, et tagada konteinerite tĂ”hus toimimine Kuberneteses. Kes soovib sĂŒvitsi minna, peaks lugema materjali , samuti pöörama tĂ€helepanu meie konteinerite ehitamisest.
1. Kasutage konteinerite logimise natiivmehhanisme
Kui rakendus kĂ€ib Kubernetes'e klastris, siis logide jaoks ei ole vajalik palju. Tsentraliseeritud logimise sĂŒsteem on tĂ”enĂ€oliselt juba sisse ehitatud kasutatavasse klastrisse. Kui kasutate Kubernetes Engine'i, vastutab selle eest . (MĂ€rkus tĂ”lke kohta.: Kui kasutate oma Kubernetes'e installatsiooni, soovitame tutvuda meie avatud lĂ€htekoodiga lahendusega â .) Ărge keerake endale elu raskeks ja kasutage konteinerite logimise natiivmehhanisme. Kirjutage logid stdout ja stderr â need saadetakse automaatselt, salvestatakse ja indekseerivad.
Soovi korral saate logisid kirjutada ka . Selline lÀhenemine vÔimaldab hÔlpsasti lisada neile metaandmeid. Koos nendega ilmub Stackdriver Logging'is vÔimalus otsida logisid nende metaandmete abil.
2. Veenduge, et konteinerid oleksid stateful ja immutable
Kubernetesi klastris töötavate konteinerite korrektseks funktsioneerimiseks peavad need olema stateless ja immutable. Kui need tingimused on tĂ€idetud, saab Kubernetes oma ĂŒlesandeid tĂ€ita, luues ja hĂ€vitades rakenduse ĂŒksusi, kui ja kus see on vajalik.
Stateless tĂ€hendab, et kĂ”ik olekud (kĂ”ikvĂ”imalikud pĂŒsivad andmed) talletatakse konteinerist vĂ€ljaspool. Selleks, sĂ”ltuvalt vajadustest, vĂ”ivad olla kaasatud erinevad vĂ€lised ladustamisvĂ”imalused: , , , vĂ”i muud haldatud andmebaasid. (MĂ€rkus tĂ”lke kohta.: Lisainformatsiooni selle kohta lugege ka meie artiklist â».)
Immutable tĂ€hendab, et konteinerit ei muudetaks elu jooksul: ei mingit uuendamist, plaastrite rakendamist ega konfiguratsiooni muutmist. Kui peate rakenduse koodi uuendama vĂ”i plaastri rakendama, looge uus pilt ja juurutage see. Soovitav on konteineri konfiguratsioon (kuulamisport, kĂ€ituskeskkonna valikud jne) asetada vĂ€ljapoole â ja . Neid saab uuendada, ilma et oleks vajalik uut konteineripilti luua. Pilti kogumispipeline'ide lihtsaks loomiseks saab kasutada . (MĂ€rkus tĂ”lke kohta.: Me kasutame nende jaoks avatud lĂ€htekoodiga tööriista .)

NĂ€ide Deployment konfiguratsiooni uuendamisest Kubernetesis ConfigMap'i kaudu, mis on monteeritud podidesse konfiguraatorina
3. VĂ€listage privileege sisaldavad konteinerid
Te ei kĂ€ivita ju oma serverites rakendusi root'ina, eks? Kui rĂŒndaja pÀÀseb rakendusse, saab ta root'i Ă”igused. Samad kaalutlused kehtivad ka privileege sisaldavate konteinerite kĂ€ivitamise keelamisele. Kui hostis seadistusi muuta on vaja, saab konteinerile anda kindlad capabilities kasutades valikut Kubernetesis. Kui on vaja muuta sysctls, siis Kubernetesil on selle jaoks. Ăldiselt pĂŒĂŒdke teha maksimaalselt kasutust ja sidecar-konteineritele sarnaste privileegide toimingute jaoks. Need ei vaja kĂ€ttesaadavust ei sisetu trafikus, ega vĂ€lises.
Kui haldate klastrit, vÔite kasutada privilegeeritud konteinerite rakendamise piirangute jaoks.
4. VÀltige kÀivitamist root'al
O privileeritud konteinerite kohta on juba rÀÀgitud, kuid olukord paraneb veelgi, kui te lisaks sellele ei kÀivita konteineri sees rakendusi root Ôigustega. Kui kurjategija leiab rakenduses, mis töötab root Ôigustes, kaugjuhtimise haavatavuse koodide tÀitmiseks, ja suudab seejÀrel lahkuda konteineri piiridest tundmatute haavatavuste kaudu, saavutab ta hostil root Ôigused.
Parim viis selle vÀltimiseks on kÔigepealt mitte kÀivitada midagi root Ôigustes. Selleks saab kasutada direktiivi KASUTAJA ja Dockerfile vÔi runAsUser Kuberneteses. Klastri administraator saab samuti seadistada sundimist, kasutades .
5. Tehke rakendus jÀlgimiseks lihtsaks
Nagu logimine, on jĂ€lgimine rakenduse haldamise lahutamatu osa. Populaarne lahendus Kubernetese kogukonnas jĂ€lgimiseks on â sĂŒsteem, mis avastab automaatselt podid ja teenused, mis vajavad jĂ€lgimist. (MĂ€rkus tĂ”lke kohta.: Vaadake ka meie teemal jĂ€lgimine Prometheuse ja Kubernetese abil.) on suuteline jĂ€lgima Kubernetese klastreid ja sisaldab oma versiooni Prometheusest rakenduste jĂ€lgimiseks.

Kubernetese jÀlgimise paneel Stackdriveris
Tavaline ootus Prometheuse jaoks on, et rakendus edastab mÔÔdikud HTTP lÔpp-punkti. Selleks on saadaval . Sama formaati kasutavad ka teised tööriistad, nagu ja .
6. Tehke rakenduse tervislik olek kergesti kÀttesaadavaks
Rakenduse haldamisel tootmises aitab selle suutlikkus teatada oma olekust kogu sĂŒsteemile. Kas rakendus on kĂ€ivitatud? Kas see on korras? Kas see on valmis liiklust vastu vĂ”tma? Kuidas see kĂ€itub? KĂ”ige levinum viis selle probleemi lahendamiseks on elujĂ”udude kontrollide rakendamine (health checks). Kubernetese jaoks on nende kahe tĂŒĂŒpi kontrollid: .
ElujĂ”u kontrolli jaoks (liveness probe) peab rakendusel olema HTTP lĂ”pp-punkt, mis tagastab '200 OK' vastuse, kui see töötab ja selle pĂ”h sĂ”ltuvused on rahuldatud. Valmiduse kontrolli jaoks (readiness probe) Rakendus peab omama teist HTTP lĂ”ppu, mis tagastab vastuse â200 OKâ, kui rakendus on tervislik, initsialiseerimise sammud on lĂ”petatud ja kĂ”ik kehtivad pĂ€ringud ei pĂ”hjusta viga. Kubernetes suunab liikluse konteinerisse ainult rakenduse valmisoleku tingimuste jĂ€rgi, mis on defineeritud nende kontrollide kohaselt. Kaks lĂ”ppu vĂ”ivad olla ĂŒhendatud, kui elujĂ”udmise (liveness) ja valmisoleku (readiness) olekute vahel pole erinevust.
Lisateavet selle kohta leiate vastavast artiklist Sandeep Dineshilt, Google'i arendajate kaitsjalt: â».
7. Valige hoolikalt pildi versioon
Enamik avalikke ja privaatsed pilte kasutavad sildistamise sĂŒsteemi, mis on sarnane kirjeldatud sĂŒsteemiga . Kui pilt rakendab sĂŒsteemi, mis on lĂ€hedane , tuleb arvesse vĂ”tta sildistamise spetsiifikat. NĂ€iteks vĂ”ib silt latest tavaliselt liikuda pildilt pildile - sellele ei saa toetuda, kui vajate ettearvatavaid ja korduvaid ehitusi ja installatsioone.
Saate kasutada silti X.Y.Z (need on peaaegu alati muutumatud), kuid sel juhul jÀlgige kÔiki patche ja vÀrskendusi pildi kohta. Kui kasutatava pildi silt on X.Y, on see hea keskmine variant. Valides selle, saate automaatselt kÔik patchid ja toetute samal ajal rakenduse stabiilsele versioonile.
P.S. tÔlkijalt
Lugege ka meie blogist:
- «»;
- «»;
- «»;
- «» (ĂŒlevaade ja esitluse video);
- «» (ĂŒlevaade ja esitluse video);
- «» (ĂŒlevaade ja esitluse video);
- «» (ĂŒlevaade ja esitluse video);
- «».
Allikas: habr.com
