7 nejlepších praktik pro provoz kontejnerů podle Google

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 „Best Practices for Operating Containers». 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ší?

7 nejlepších praktik pro provoz kontejnerů podle Google

Kubernetes Engine (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í. Kubernetes 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 Best Practices for Operating Containers, a také si všímat našeho staršího příspěvku 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á Stackdriver Logging. (Pozn. přek.: A v případě použití vlastní instalace Kubernetes doporučujeme podívat se na naše Open Source řešení — loghouse.) 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 formátu JSON.. 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: Cloud Storage, Persistent Disks, Redis, Cloud SQL lub inne zarządzane bazy danych. (Pozn. přek.: Więcej na ten temat przeczytasz również w naszym artykule „Operátory pro Kubernetes: jak spouštět stateful aplikace».)

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 Secrets a ConfigMaps. Można je aktualizować bez konieczności budowania nowego obrazu kontenera. Do łatwego tworzenia pipeline'ów do budowy obrazów można używać Cloud Build. (Pozn. přek.: W tym celu używamy narzędzia typu open source dapp.)

7 nejlepších praktik pro provoz kontejnerů podle Google
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 securityContext w Kubernetes. Jeśli potrzebujesz zmieniać sysctls, Kubernetes ma oddzielną adnotację do tego. W ogóle, staraj się maksymalnie wykorzystywać init- 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 Politika zabezpečení podů 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í Politika zabezpečení podů.

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 Prometheus — systém, který automaticky detekuje pody a služby vyžadující monitorování. (Pozn. přek.: Viz také naši podrobnou zprávu na téma monitorování pomocí Prometheus a Kubernetes.) Stackdriver je schopen monitorovat clustery Kubernetes a zahrnuje svou verzi Prometheus pro monitorování aplikací.

7 nejlepších praktik pro provoz kontejnerů podle Google
Panel monitorování Kubernetes ve Stackdriveru

Prometheus očekává, že aplikace poskytne metriky na HTTP endpoint. K tomu jsou k dispozici klientské knihovny Prometheus. Stejný formát používají i další nástroje, jako například OpenCensus a Istio.

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: liveness a readiness probes.

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: „Kubernetes nejlepší postupy: Nastavení zdravotních kontrol pomocí sond readiness a liveness».

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 Best Practices for Building Containers. Pokud obraz používá systém blízký semantickému verzionování, 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:

Zdroj: habr.com

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster