Ang 7 Container na Pinakamahuhusay na Kasanayan ng Google

Tandaan. transl.: Ang may-akda ng orihinal na artikulo ay si ThΓ©o Chamley, Arkitekto ng Google Cloud Solutions. Sa post na ito para sa Google Cloud blog, nagbibigay siya ng buod ng mas detalyadong gabay ng kanyang kumpanya, na tinatawag na "Pinakamahuhusay na Kasanayan para sa Mga Operating Container" Dito, kinolekta ng mga eksperto ng Google ang pinakamahuhusay na kagawian para sa pagpapatakbo ng mga container sa konteksto ng paggamit ng Google Kubernetes Engine at higit pa, na may kinalaman sa malawak na hanay ng mga paksa: mula sa seguridad hanggang sa pagsubaybay at pag-log. Kaya ano ang pinakamahalagang mga kasanayan sa lalagyan ayon sa Google?

Ang 7 Container na Pinakamahuhusay na Kasanayan ng Google

Kubernetes Engine (Kubernetes-based na serbisyo para sa pagpapatakbo ng mga containerized na application sa Google Cloud - tinatayang pagsasalin) ay isa sa mga pinakamahusay na paraan upang magpatakbo ng mga workload na kailangang sukatin. Kubernetes titiyakin ang maayos na paggana ng karamihan sa mga application kung ang mga ito ay containerized. Ngunit kung gusto mong maging madaling pamahalaan ang iyong application at gustong sulitin ang Kubernetes, kailangan mong sundin ang pinakamahuhusay na kagawian. Pasimplehin nila ang pagpapatakbo ng application, pagsubaybay at pag-debug nito, at dagdagan din ang seguridad.

Sa artikulong ito, susuriin namin ang isang listahan ng mga bagay na dapat mong malaman at gawin upang epektibong magpatakbo ng mga container sa Kubernetes. Ang mga nagnanais na pumunta nang mas malalim sa mga detalye ay dapat basahin ang materyal Pinakamahuhusay na Kasanayan para sa Mga Operating Container, at bigyang pansin din ang aming naunang post tungkol sa pag-assemble ng mga lalagyan.

1. Gumamit ng mga katutubong mekanismo ng pag-log ng container

Kung ang application ay tumatakbo sa isang Kubernetes cluster, hindi gaanong kailangan para sa mga log. Ang isang sentralisadong sistema ng pag-log ay malamang na binuo na sa kumpol na iyong ginagamit. Sa kaso ng paggamit ng Kubernetes Engine, responsable ito Pag-log ng Stackdriver. (Tandaan. transl.: At kung gagamit ka ng sarili mong pag-install ng Kubernetes, inirerekomenda naming tingnang mabuti ang aming solusyon sa Open Source - bahay na kahoy.) Panatilihing simple ang iyong buhay at gumamit ng mga native na mekanismo ng pag-log ng container. Sumulat ng mga log sa stdout at stderr - sila ay awtomatikong matatanggap, mai-save at mai-index.

Kung ninanais, maaari ka ring sumulat ng mga log sa JSON na format. Ang diskarte na ito ay gagawing madali upang magdagdag ng metadata sa kanila. At kasama nila, magkakaroon ang Stackdriver Logging ng kakayahang maghanap sa pamamagitan ng mga log gamit ang metadata na ito.

2. Siguraduhin na ang mga lalagyan ay walang estado at hindi nababago

Para gumana nang tama ang mga container sa isang Kubernetes cluster, dapat ay stateless at hindi nababago ang mga ito. Kapag natugunan na ang mga kundisyong ito, magagawa ng Kubernetes ang trabaho nito, lumikha at sirain ang mga entity ng aplikasyon kung kailan at saan kinakailangan.

Walang kwenta nangangahulugan na ang anumang estado (patuloy na data ng anumang uri) ay nakaimbak sa labas ng lalagyan. Para dito, depende sa mga pangangailangan, maaaring gamitin ang iba't ibang uri ng panlabas na imbakan: Cloud Storage, Patuloy na Mga Disk, Redis, Cloud SQL o iba pang mga pinamamahalaang database. (Tandaan. transl.: Magbasa nang higit pa tungkol dito sa aming artikulo β€œMga operator para sa Kubernetes: kung paano magpatakbo ng mga stateful na application".)

Hindi mababago nangangahulugan na ang container ay hindi mababago sa panahon ng buhay nito: walang mga update, patch, pagbabago sa configuration. Kung kailangan mong i-update ang iyong application code o maglapat ng patch, gumawa ng bagong larawan at i-deploy ito. Inirerekomenda na ilipat ang configuration ng container (pakikinig port, runtime na mga opsyon sa kapaligiran, atbp.) sa labas - sa Lihim ΠΈ ConfigMaps. Maa-update ang mga ito nang hindi kinakailangang gumawa ng bagong imahe ng lalagyan. Upang madaling lumikha ng mga pipeline na may pagpupulong ng imahe, maaari mong gamitin Cloud Build. (Tandaan. transl.: Gumagamit kami ng Open Source tool para sa mga layuning ito dapp.)

Ang 7 Container na Pinakamahuhusay na Kasanayan ng Google
Isang halimbawa ng pag-update ng configuration ng Deployment sa Kubernetes gamit ang ConfigMap na naka-mount sa mga pod bilang isang config

3. Iwasan ang mga privileged container

Hindi ka nagpapatakbo ng mga application bilang root sa iyong mga server, tama ba? Kung makapasok ang isang attacker sa application, magkakaroon siya ng root access. Ang parehong mga pagsasaalang-alang ay nalalapat sa hindi pagpapatakbo ng mga privileged container. Kung kailangan mong baguhin ang mga setting sa host, maaari mong bigyan ang container na partikular mga kakayahan gamit ang opsyon securityContext sa Kubernetes. Kung kailangan mong magbago sysctls, mayroon ang Kubernetes hiwalay na abstract para dito. Sa pangkalahatan, subukang sulitin sa loob- at mga lalagyan ng sidecar upang magsagawa ng mga katulad na privileged na operasyon. Hindi nila kailangang ma-access sa alinman sa panloob o panlabas na trapiko.

Kung nangangasiwa ka ng isang cluster, maaari mong gamitin Patakaran sa Seguridad ng Pod para sa mga paghihigpit sa paggamit ng mga privileged container.

4. Iwasang tumakbo bilang ugat

Napag-usapan na ang mga privileged container, ngunit mas magiging mabuti kung, bilang karagdagan dito, hindi ka magpapatakbo ng mga application sa loob ng container bilang root. Kung ang isang umaatake ay nakahanap ng isang malayuang kahinaan sa isang application na may mga karapatan sa ugat na nagbibigay-daan sa pagpapatupad ng code, pagkatapos nito ay maiiwan niya ang lalagyan sa pamamagitan ng hindi pa alam na kahinaan, magkakaroon siya ng ugat sa host.

Ang pinakamahusay na paraan upang maiwasan ito ay ang hindi magpatakbo ng anumang bagay bilang ugat sa unang lugar. Upang gawin ito, maaari mong gamitin ang direktiba USER Π² Dockerfile o runAsUser sa Kubernetes. Maaari ding i-configure ng administrator ng cluster ang gawi sa pagpapatupad gamit Patakaran sa Seguridad ng Pod.

5. Gawing madaling subaybayan ang application

Tulad ng pag-log, ang pagsubaybay ay isang mahalagang bahagi ng pamamahala ng aplikasyon. Ang isang sikat na solusyon sa pagsubaybay sa komunidad ng Kubernetes ay Promiteyus - isang system na awtomatikong nakakakita ng mga pod at serbisyo na nangangailangan ng pagsubaybay. (Tandaan. transl.: Tingnan din ang aming detalyadong ulat sa paksa ng pagsubaybay gamit ang Prometheus at Kubernetes.) Stackdriver ay may kakayahang subaybayan ang mga kumpol ng Kubernetes at kasama ang sarili nitong bersyon ng Prometheus para sa pagsubaybay sa aplikasyon.

Ang 7 Container na Pinakamahuhusay na Kasanayan ng Google
Kubernetes Dashboard sa Stackdriver

Inaasahan ng Prometheus na ipapasa ng application ang mga sukatan sa HTTP endpoint. Available para dito Mga aklatan ng kliyente ng Prometheus. Ang parehong format ay ginagamit ng iba pang mga tool tulad ng OpenCensus ΠΈ Istio.

6. Gawing available ang katayuan sa kalusugan ng app

Ang pamamahala ng aplikasyon sa produksyon ay tinutulungan ng kakayahan nitong ipaalam ang estado nito sa buong sistema. Gumagana ba ang application? okay lang ba? Handa ka na bang tumanggap ng trapiko? Paano siya kumilos? Ang pinakakaraniwang paraan upang malutas ang problemang ito ay ang pagpapatupad ng mga pagsusuri sa kalusugan (mga pagsusuri sa kalusugan). Ang Kubernetes ay may dalawang uri: kasiglahan at kahandaan probes.

Para sa liveness probe (mga pagsusuri sa sigla) ang application ay dapat mayroong HTTP endpoint na nagbabalik ng "200 OK" na tugon kung ito ay gumagana at ang mga pangunahing dependency nito ay nasiyahan. Para sa kahandaan probe (mga pagsusuri sa kahandaan sa serbisyo) ang application ay dapat na may isa pang HTTP endpoint na nagbabalik ng "200 OK" na tugon kung ang application ay nasa isang malusog na estado, ang mga hakbang sa pagsisimula ay nakumpleto at ang anumang wastong kahilingan ay hindi nagreresulta sa isang error. Iruruta lang ng Kubernetes ang trapiko sa container kung handa na ang application ayon sa mga pagsusuring ito. Maaaring pagsamahin ang dalawang endpoint kung walang pagkakaiba sa pagitan ng liveness at readyness states.

Maaari mong basahin ang higit pa tungkol dito sa kaugnay na artikulo mula kay Sandeep Dinesh, Developer Advocate mula sa Google: β€œPinakamahuhusay na kagawian ng Kubernetes: Pagse-set up ng mga pagsusuri sa kalusugan nang may kahandaan at liveness probe'.

7. Maingat na piliin ang iyong bersyon ng larawan

Karamihan sa mga pampubliko at pribadong larawan ay gumagamit ng sistema ng pag-tag na katulad ng inilarawan sa Pinakamahuhusay na Kasanayan para sa Pagbuo ng mga Container. Kung ang imahe ay gumagamit ng isang sistemang malapit sa semantic versioning, kinakailangang isaalang-alang ang mga detalye ng pag-tag. Halimbawa, tag latest maaaring madalas na lumipat mula sa larawan patungo sa larawan - hindi maaasahan kung kailangan mo ng predictable at paulit-ulit na mga build at installation.

Maaari mong gamitin ang tag X.Y.Z (halos palaging hindi nagbabago ang mga ito), ngunit sa kasong ito, subaybayan ang lahat ng mga patch at update sa larawan. Kung ang larawang ginagamit mo ay may tag X.Y, ito ay isang magandang opsyon para sa golden mean. Sa pamamagitan ng pagpili nito, awtomatiko kang makakatanggap ng mga patch at sa parehong oras ay umaasa sa matatag na bersyon ng application.

PS mula sa tagasalin

Basahin din sa aming blog:

Pinagmulan: www.habr.com

Magdagdag ng komento