Pozn. přek.: Autor původního článku — Théo Chamley, architekt cloudových řešení Google. V tomto příspěvku pro blog Google Cloud představil krátké shrnutí detailního průvodce jeho společnosti, nazvaného „». V něm odborníci Google shromáždili osvědčené postupy pro provozování kontejnerů v kontextu využívání Google Kubernetes Engine a nejen to, pokrývají široké spektrum témat: od bezpečnosti až po monitorování a protokolování. Jaké praktiky v práci s kontejnery jsou podle Google nejdůležitější?

(služba založená na Kubernetes pro spouštění kontejnerizovaných aplikací v Google Cloud — pozn. přek.) — jeden z nejlepších způsobů, jak spouštět pracovní zátěže, které potřebují škálování. zajistí bezproblémové fungování většiny aplikací, pokud jsou kontejnerizovány. Ale pokud chcete, aby bylo možné aplikaci snadno spravovat a chcete využít všechny výhody Kubernetes, je nutné dodržovat nejlepší postupy. Tyto postupy usnadní provoz aplikace, její monitorování a ladění a také zvýší bezpečnost.
V tomto článku projdeme seznam toho, co byste měli znát a dělat pro efektivní fungování kontejnerů v Kubernetes. Ti, kdo chtějí jít do hloubky, by měli přečíst materiál , a také si všímat našeho o sestavování kontejnerů.
1. Používejte nativní mechanismy kontejnerů pro protokolování
Pokud je aplikace spuštěná v klastru Kubernetes, pro protokoly není potřeba tolik. Centralizovaný systém protokolování je pravděpodobně již integrován do použitých clusterů. V případě využívání Kubernetes Engine se o to stará . (Pozn. přek.: A v případě použití vlastní instalace Kubernetes doporučujeme podívat se na naše Open Source řešení — .) Nezjednodušujte si život a používejte nativní mechanismy protokolování kontejnerů. Pište protokoly do stdout a stderr — ty budou automaticky zaznamenány, uloženy a indexovány.
Pokud chcete, můžete také psát protokoly do . Tento přístup umožní snadno přidávat metadata. A spolu s nimi se ve Stackdriver Logging objeví možnost vyhledávání v protokolech pomocí těchto metadat.
2. Ujistěte se, že kontejnery jsou stateless a immutable
Aby kontejnery w klastrze Kubernetes działały poprawnie, muszą być stateless i immutable. Gdy te warunki są spełnione, Kubernetes będzie w stanie wykonać swoją pracę, tworząc i niszcząc jednostki aplikacji, kiedy i gdzie to jest potrzebne.
Stateless oznacza, że wszelkie stany (trwałe dane wszelkiego rodzaju) są przechowywane poza kontenerem. W tym celu, w zależności od potrzeb, mogą być wykorzystywane różne rodzaje zewnętrznych magazynów: , , , lub inne zarządzane bazy danych. (Pozn. přek.: Więcej na ten temat przeczytasz również w naszym artykule „».)
Immutable oznacza, że kontener nie będzie modyfikowany w czasie swojego życia: żadnych aktualizacji, poprawek, zmian w konfiguracji. Jeśli potrzebujesz zaktualizować kod aplikacji lub zastosować poprawkę, stwórz nowy obraz i wdroż go. Zaleca się wynoszenie konfiguracji kontenera (port do nasłuchiwania, opcje środowiska wykonawczego itp.) na zewnątrz — do a . Można je aktualizować bez konieczności budowania nowego obrazu kontenera. Do łatwego tworzenia pipeline'ów do budowy obrazów można używać . (Pozn. přek.: W tym celu używamy narzędzia typu open source .)

Przykład aktualizacji konfiguracji Deployment w Kubernetes za pomocą ConfigMap, zamontowanego w podach jako konfiguracja
3. Unikaj uruchamiania kontenerów z uprawnieniami
Nie uruchamiasz aplikacji z uprawnieniami root na swoich serwerach, prawda? Jeśli haker uzyska dostęp do aplikacji, zyska dostęp z uprawnieniami root. Te same zasady mają zastosowanie do unikania uruchamiania kontenerów z uprawnieniami. Jeśli konieczne jest zmienienie ustawień na hoście, można nadać kontenerowi konkretne capabilities za pomocą opcji w Kubernetes. Jeśli potrzebujesz zmieniać sysctls, Kubernetes ma do tego. W ogóle, staraj się maksymalnie wykorzystywać i sidecar-kontenery do wykonywania podobnych operacji z uprawnieniami. Nie potrzebują one dostępu ani do ruchu wewnętrznego, ani zewnętrznego.
Jeśli zarządzasz klastrem, możesz skorzystać z do ograniczeń w zastosowaniu kontenerów z uprawnieniami.
4. Unikaj uruchamiania jako root
O privilegovaných kontejnerech již bylo řečeno, ale bude ještě lepší, pokud navíc nebudete spouštět aplikace uvnitř kontejneru pod účtem root. Pokud útočník najde v aplikaci s právy root vzdálenou zranitelnost s možností vykonání kódu, a podaří se mu uniknout z kontejneru skrze dosud neznámou zranitelnost, získá rootovská práva na hostiteli.
Nejlepší způsob, jak se tomu vyhnout, je primárně nespouštět nic pod účtem root. K tomu lze využít direktivu UŽIVATEL v Dockerfile nebo runAsUser v Kubernetes. Správce clustera může také nastavit donucovací chování pomocí .
5. Učiňte aplikaci snadno monitorovatelnou
Stejně jako logování, monitoring je nezbytnou součástí správy aplikace. Populárním řešením pro monitoring v komunitě Kubernetes je — systém, který automaticky detekuje pody a služby vyžadující monitorování. (Pozn. přek.: Viz také naši na téma monitorování pomocí Prometheus a Kubernetes.) je schopen monitorovat clustery Kubernetes a zahrnuje svou verzi Prometheus pro monitorování aplikací.

Panel monitorování Kubernetes ve Stackdriveru
Prometheus očekává, že aplikace poskytne metriky na HTTP endpoint. K tomu jsou k dispozici . Stejný formát používají i další nástroje, jako například a .
6. Učiňte stav zdraví aplikace dostupným
Správě aplikace v produkci pomáhá její schopnost informovat o svém stavu celou systém. Je aplikace spuštěna? Je v pořádku? Je připravena přijímat provoz? Jak se chová? Nejrozšířenějším způsobem, jak tuto otázku řešit, je implementace kontrol zdraví (health checks). V Kubernetes existují dva jejich typy: .
Pro liveness probe (kontroly životaschopnosti) musí aplikace mít HTTP endpoint vracející odpověď „200 OK“, pokud funguje a její základní závislosti jsou splněny. Pro readiness probe (kontroly připravenosti na obsluhu) Aplikace by měla mít jiný HTTP endpoint, který vrací odpověď „200 OK“, pokud je aplikace ve zdravém stavu, iniciační kroky byly splněny a jakýkoli platný požadavek nevede k chybě. Kubernetes bude směrovat provoz na kontejner pouze v případě připravenosti aplikace podle těchto kontrol. Dva endpointy mohou být sloučeny, pokud není rozdíl mezi stavem životaschopnosti (liveness) a připravenosti (readiness).
Více o tom se můžete dočíst v odpovídajícím článku od Sandeepa Dineshe, vývojového advokáta z Googlu: „».
7. Pečlivě vybírejte verzi obrazu
Většina veřejných a soukromých obrazů používá systém tagování podobný tomu, co je popsáno v . Pokud obraz používá systém blízký , je třeba vzít v úvahu specifika tagování. Například tag latest se může často přemístit z obrazu na obraz — nelze se na něj spoléhat, pokud potřebujete předvídatelné a reprodukovatelné sestavy a instalace.
Můžete používat tag X.Y.Z (ty jsou téměř vždy neměnné), ale v takovém případě sledujte všechny opravy a aktualizace obrazu. Pokud má používaný obraz tag X.Y, je to dobrá volba ze zlatého středu. Jeho výběrem automatiky získáte opravy a zároveň se opíráte o stabilní verzi aplikace.
P.S. od překladatele
Přečtěte si také náš blog:
- «»;
- «»;
- «»;
- «» (přehled a video prezentace);
- «» (přehled a video prezentace);
- «» (přehled a video prezentace);
- «» (přehled a video prezentace);
- «».
Zdroj: habr.com
