7 najboljih praksi za korištenje kontejnera prema Google-u

Bilješka. transl.: Autor originalnog članka je Théo Chamley, Google Cloud Solutions Architect. U ovom postu za Google Cloud blog, on daje sažetak detaljnijeg vodiča svoje kompanije pod nazivom "Najbolje prakse za rad sa kontejnerima" U njemu su Google stručnjaci prikupili najbolje prakse za upravljanje kontejnerima u kontekstu korištenja Google Kubernetes Engine-a i više, dotičući se širokog spektra tema: od sigurnosti do praćenja i evidentiranja. Dakle, koje su najvažnije prakse kontejnera prema Googleu?

7 najboljih praksi za korištenje kontejnera prema Google-u

Kubernetes Engine (Usluga zasnovana na Kubernetesu za pokretanje kontejnerskih aplikacija na Google Cloud - cca. transl.) je jedan od najboljih načina za pokretanje radnih opterećenja koja se moraju skalirati. Kubernet će osigurati nesmetano funkcioniranje većine aplikacija ako su u kontejnerima. Ali ako želite da se vašom aplikacijom lako upravlja i želite da u potpunosti iskoristite prednosti Kubernetesa, morate slijediti najbolje prakse. Oni će pojednostaviti rad aplikacije, njeno praćenje i otklanjanje grešaka, kao i povećati sigurnost.

U ovom članku ćemo proći kroz listu stvari koje treba da znate i uradite da biste efikasno pokrenuli kontejnere na Kubernetesu. Oni koji žele ići dublje u detalje trebali bi pročitati materijal Najbolje prakse za rad sa kontejnerima, a obratite pažnju i na naše raniji post o sastavljanju kontejnera.

1. Koristite izvorne mehanizme za evidentiranje kontejnera

Ako aplikacija radi na Kubernetes klasteru, nije potrebno mnogo za zapisnike. Centralizovani sistem evidentiranja je verovatno već ugrađen u klaster koji koristite. U slučaju korištenja Kubernetes Engine-a, ovo je odgovorno Stackdriver Logging. (Bilješka. transl.: A ako koristite vlastitu Kubernetes instalaciju, preporučujemo da pobliže pogledate naše rješenje otvorenog koda - brvnara.) Neka vaš život bude jednostavan i koristite mehanizme za bilježenje izvornih kontejnera. Upišite dnevnike u stdout i stderr - oni će biti automatski primljeni, sačuvani i indeksirani.

Ako želite, možete i pisati dnevnike JSON format. Ovaj pristup će im olakšati dodavanje metapodataka. Uz njih, Stackdriver Logging će imati mogućnost pretraživanja dnevnika koristeći ove metapodatke.

2. Provjerite jesu li kontejneri bez državljanstva i nepromjenjivi

Da bi kontejneri ispravno funkcionirali u Kubernetes klasteru, moraju biti bez stanja i nepromjenjivi. Kada se ovi uslovi ispune, Kubernetes može da radi svoj posao, kreirajući i uništavajući entitete aplikacije kada i gde je to potrebno.

Državljanstvo znači da se bilo koje stanje (trajni podaci bilo koje vrste) pohranjuje izvan kontejnera. Za to se, ovisno o potrebama, mogu koristiti različite vrste eksterne memorije: Cloud Storage, Trajni diskovi, Redis, Cloud SQL ili druge upravljane baze podataka. (Bilješka. transl.: Više o tome pročitajte u našem članku “Operatori za Kubernetes: kako pokrenuti aplikacije s podacima o stanju".)

Nepromjenjiv znači da se kontejner neće mijenjati tokom svog životnog vijeka: nema ažuriranja, zakrpa, promjena konfiguracije. Ako trebate ažurirati kôd aplikacije ili primijeniti zakrpu, kreirajte novu sliku i implementirajte je. Preporučljivo je premjestiti konfiguraciju kontejnera (port za slušanje, opcije runtime okruženja, itd.) eksterno - na Secrets и ConfigMaps. Mogu se ažurirati bez potrebe za kreiranjem nove slike kontejnera. Za jednostavno kreiranje cjevovoda sa sklopom slike, možete koristiti Cloud Build. (Bilješka. transl.: Za ove svrhe koristimo alat otvorenog koda dapp.)

7 najboljih praksi za korištenje kontejnera prema Google-u
Primjer ažuriranja konfiguracije implementacije u Kubernetes koristeći ConfigMap montiran u pods kao konfiguraciju

3. Izbjegavajte privilegirane kontejnere

Ne pokrećete aplikacije kao root na svojim serverima, zar ne? Ako napadač uđe u aplikaciju, on će dobiti root pristup. Ista razmatranja se primjenjuju na nepokretanje privilegiranih kontejnera. Ako trebate promijeniti postavke na hostu, možete dati specifičan kontejner mogućnosti koristeći opciju securityContext Kubernetes. Ako trebate da se promenite sysctls, Kubernetes ima zaseban sažetak za ovo. Općenito, pokušajte izvući maksimum u tome- i bočne prikolice za obavljanje sličnih privilegiranih operacija. Ne moraju biti dostupni ni unutrašnjem ni eksternom saobraćaju.

Ako administrirate klaster, možete koristiti Pod Sigurnosna politika za ograničenja upotrebe privilegiranih kontejnera.

4. Izbjegavajte pokretanje kao root

O privilegovanim kontejnerima je već bilo reči, ali biće još bolje ako, pored ovoga, ne pokrećete aplikacije unutar kontejnera kao root. Ako napadač pronađe udaljenu ranjivost u aplikaciji s root pravima koja dozvoljava izvršavanje koda, nakon čega može napustiti kontejner kroz još nepoznatu ranjivost, dobit će root na hostu.

Najbolji način da se to izbjegne je da ništa ne pokrećete kao root. Da biste to učinili, možete koristiti direktivu USER в Dockerfile ili runAsUser Kubernetes. Administrator klastera također može konfigurirati ponašanje primjene koristeći Pod Sigurnosna politika.

5. Učinite aplikaciju lakom za praćenje

Kao i evidentiranje, nadgledanje je sastavni dio upravljanja aplikacijom. Popularno rješenje za praćenje u Kubernetes zajednici je Prometej - sistem koji automatski otkriva podove i usluge koje zahtijevaju nadzor. (Bilješka. transl.: Pogledajte i naše detaljan izvještaj na temu praćenja pomoću Prometheusa i Kubernetesa.) Stackdriver sposoban je za praćenje Kubernetes klastera i uključuje vlastitu verziju Prometheusa za praćenje aplikacija.

7 najboljih praksi za korištenje kontejnera prema Google-u
Kubernetes Dashboard na Stackdriveru

Prometheus očekuje da aplikacija prosljeđuje metriku do HTTP krajnje točke. Dostupan za ovo Prometheus klijentske biblioteke. Isti format koriste i drugi alati poput OpenCensus и Istio.

6. Učinite zdravstveni status aplikacije dostupnim

Upravljanje aplikacijama u proizvodnji potpomognuto je njegovom sposobnošću da prenese svoje stanje cijelom sistemu. Da li je aplikacija pokrenuta? Je li uredu? Jeste li spremni za primanje saobraćaja? Kako se ponaša? Najčešći način rješavanja ovog problema je provođenje zdravstvenih pregleda (zdravstveni pregledi). Kubernetes ima dva tipa: sonde za životnost i spremnost.

Za sondu za živost (provjere vitalnosti) aplikacija mora imati HTTP krajnju tačku koja vraća "200 OK" odgovor ako je funkcionalna i ako su zadovoljene njene osnovne zavisnosti. Za sondu spremnosti (provjere spremnosti servisa) aplikacija mora imati drugu HTTP krajnju točku koja vraća "200 OK" odgovor ako je aplikacija u zdravom stanju, ako su koraci inicijalizacije dovršeni i nijedan važeći zahtjev ne rezultira greškom. Kubernetes će usmjeriti promet u kontejner samo ako je aplikacija spremna prema ovim provjerama. Dvije krajnje točke mogu se spojiti ako nema razlike između stanja živosti i stanja spremnosti.

Više o ovome možete pročitati u povezanom članku Sandeep Dinesh, Developer Advocate iz Googlea: “Kubernetes najbolje prakse: Postavljanje zdravstvenih provjera sa sondama spremnosti i živog stanja".

7. Pažljivo odaberite svoju verziju slike

Većina javnih i privatnih slika koristi sistem označavanja sličan onom opisanom u Najbolje prakse za izgradnju kontejnera. Ako slika koristi sistem blizu semantičko verzioniranje, potrebno je uzeti u obzir specifičnosti označavanja. Na primjer, oznaka latest može se često kretati sa slike na sliku - ne može se osloniti na njega ako su vam potrebne predvidljive i ponovljive gradnje i instalacije.

Možete koristiti oznaku X.Y.Z (oni su skoro uvijek nepromijenjeni), ali u ovom slučaju pratite sve zakrpe i ažuriranja slike. Ako slika koju koristite ima oznaku X.Y, ovo je dobra opcija za zlatnu sredinu. Njegovim odabirom automatski dobijate zakrpe i istovremeno se oslanjate na stabilnu verziju aplikacije.

PS od prevodioca

Pročitajte i na našem blogu:

izvor: www.habr.com

Dodajte komentar