7 najlepszych praktyk korzystania z kontenerów według Google

Notatka. przeł.: autorem oryginalnego artykułu jest Théo Chamley, architekt rozwiązań Google Cloud. W tym poście na blogu Google Cloud przedstawia podsumowanie bardziej szczegółowego przewodnika swojej firmy, zatytułowanego „Najlepsze praktyki dotyczące obsługi kontenerów" Eksperci Google zebrali w nim najlepsze praktyki obsługi kontenerów w kontekście wykorzystania Google Kubernetes Engine i nie tylko, poruszając szerokie spektrum tematów: od bezpieczeństwa po monitorowanie i logowanie. Jakie są zatem najważniejsze praktyki kontenerowe według Google?

7 najlepszych praktyk korzystania z kontenerów według Google

Silnik Kubernetes (Usługa oparta na Kubernetes do uruchamiania aplikacji kontenerowych w Google Cloud - około. tłumaczenie) to jeden z najlepszych sposobów uruchamiania obciążeń wymagających skalowania. Kubernetes zapewni sprawne działanie większości aplikacji, jeśli zostaną one skonteneryzowane. Jeśli jednak chcesz, aby Twoja aplikacja była łatwa w zarządzaniu i chcesz w pełni wykorzystać Kubernetes, musisz postępować zgodnie z najlepszymi praktykami. Uproszczą obsługę aplikacji, jej monitorowanie i debugowanie, a także zwiększą bezpieczeństwo.

W tym artykule omówimy listę rzeczy, które powinieneś wiedzieć i zrobić, aby efektywnie uruchamiać kontenery na Kubernetesie. Osoby pragnące zagłębić się w szczegóły powinny zapoznać się z materiałem Najlepsze praktyki dotyczące obsługi kontenerów, a także zwróć uwagę na nasze wcześniejszy post o montażu kontenerów.

1. Korzystaj z natywnych mechanizmów logowania kontenerów

Jeśli aplikacja działa na klastrze Kubernetes, niewiele potrzeba na logi. Scentralizowany system rejestrowania jest prawdopodobnie już wbudowany w używany klaster. W przypadku korzystania z Kubernetes Engine jest to odpowiedzialne Logowanie Stackdrivera. (Notatka. przeł.: A jeśli korzystasz z własnej instalacji Kubernetes, zalecamy przyjrzenie się bliżej naszemu rozwiązaniu Open Source - dom z bali.) Utrzymuj proste życie i korzystaj z natywnych mechanizmów rejestrowania kontenerów. Zapisuj logi na stdout i stderr - zostaną automatycznie odebrane, zapisane i zindeksowane.

Jeśli chcesz, możesz także zapisywać logi formacie JSON. Takie podejście ułatwi dodawanie do nich metadanych. Dzięki nim Stackdriver Logging będzie mógł przeszukiwać dzienniki przy użyciu tych metadanych.

2. Upewnij się, że kontenery są bezstanowe i niezmienne

Aby kontenery działały poprawnie w klastrze Kubernetes, muszą być bezstanowe i niezmienne. Po spełnieniu tych warunków Kubernetes może wykonać swoją pracę, tworząc i niszcząc jednostki aplikacji, kiedy i gdzie jest to potrzebne.

Bezpaństwowiec oznacza, że ​​dowolny stan (dowolnego rodzaju trwałe dane) jest przechowywany poza kontenerem. W tym celu, w zależności od potrzeb, można zastosować różne rodzaje pamięci zewnętrznych: cloud Storage, Dyski trwałe, Redis, CloudSQL lub inne zarządzane bazy danych. (Notatka. przeł.: Przeczytaj więcej na ten temat w naszym artykule „Operatory dla Kubernetes: jak uruchamiać aplikacje stanowe”.)

Niezmienny oznacza, że ​​kontener nie będzie modyfikowany w trakcie swojego życia: żadnych aktualizacji, poprawek, zmian konfiguracyjnych. Jeśli chcesz zaktualizować kod aplikacji lub zastosować poprawkę, utwórz nowy obraz i wdróż go. Zalecane jest przeniesienie konfiguracji kontenera (port nasłuchiwania, opcje środowiska uruchomieniowego itp.) na zewnątrz – do Tajniki и ConfigMap. Można je aktualizować bez konieczności tworzenia nowego obrazu kontenera. Aby łatwo tworzyć potoki z montażem obrazu, możesz użyć Tworzenie chmury. (Notatka. przeł.: W tym celu używamy narzędzia Open Source Dapp.)

7 najlepszych praktyk korzystania z kontenerów według Google
Przykład aktualizacji konfiguracji wdrożenia w Kubernetes przy użyciu ConfigMap zamontowanego w podach jako konfiguracja

3. Unikaj uprzywilejowanych kontenerów

Nie uruchamiasz aplikacji jako root na swoich serwerach, prawda? Jeśli atakujący dostanie się do aplikacji, uzyska dostęp do konta root. Te same uwagi dotyczą nieuruchamiania kontenerów uprzywilejowanych. Jeśli chcesz zmienić ustawienia na hoście, możesz podać kontener możliwości korzystając z opcji securityContext w Kubernetesie. Jeśli potrzebujesz zmiany sysctls, Kubernetes ma osobne streszczenie dla tego. Ogólnie rzecz biorąc, staraj się wykorzystać jak najwięcej w tym- i kontenery z przyczepą boczną do wykonywania podobnych uprzywilejowanych operacji. Nie muszą być dostępne ani dla ruchu wewnętrznego, ani zewnętrznego.

Jeśli administrujesz klastrem, możesz użyć Polityka bezpieczeństwa kapsuł w sprawie ograniczeń w korzystaniu z kontenerów uprzywilejowanych.

4. Unikaj uruchamiania jako root

Kontenery uprzywilejowane były już omawiane, ale będzie jeszcze lepiej, jeśli dodatkowo nie będziesz uruchamiał aplikacji wewnątrz kontenera jako root. Jeśli atakujący znajdzie zdalną lukę w aplikacji z uprawnieniami roota, która umożliwia wykonanie kodu, po czym będzie mógł opuścić kontener poprzez nieznaną jeszcze lukę, uzyska root na hoście.

Najlepszym sposobem na uniknięcie tego jest przede wszystkim nie uruchamianie niczego jako root. Aby to zrobić, możesz użyć dyrektywy USER в Dockerfile lub runAsUser w Kubernetesie. Administrator klastra może również skonfigurować zachowanie wymuszania za pomocą Polityka bezpieczeństwa kapsuł.

5. Spraw, aby aplikacja była łatwa do monitorowania

Podobnie jak rejestrowanie, monitorowanie jest integralną częścią zarządzania aplikacjami. Popularnym rozwiązaniem monitorującym w społeczności Kubernetes jest Prometheus - system automatycznie wykrywający pody i usługi wymagające monitorowania. (Notatka. przeł.: Zobacz także nasze szczegółowy raport na temat monitoringu z wykorzystaniem Prometheusa i Kubernetesa.) Układarka jest w stanie monitorować klastry Kubernetes i zawiera własną wersję Prometheusa do monitorowania aplikacji.

7 najlepszych praktyk korzystania z kontenerów według Google
Panel Kubernetes w Stackdriver

Prometheus oczekuje, że aplikacja przekaże metryki do punktu końcowego HTTP. Dostępne do tego Biblioteki klienta Prometheus. Ten sam format jest używany przez inne narzędzia, takie jak Otwarty Spis Ludności и Podobnie.

6. Udostępnij stan aplikacji

Zarządzanie aplikacją w środowisku produkcyjnym jest wspomagane przez jej zdolność do komunikowania swojego stanu całemu systemowi. Czy aplikacja jest uruchomiona? Czy to w porządku? Czy jesteś gotowy na przyjęcie ruchu? Jak się zachowuje? Najczęstszym sposobem rozwiązania tego problemu jest wdrożenie kontroli stanu (badania zdrowia). Kubernetes ma dwa typy: sondy żywotności i gotowości.

Dla sondy żywotności (kontrole żywotności) aplikacja musi mieć punkt końcowy HTTP, który zwraca odpowiedź „200 OK”, jeśli działa i spełnione są jej podstawowe zależności. Dla sondy gotowości (kontrola gotowości usługi) aplikacja musi mieć inny punkt końcowy HTTP, który zwraca odpowiedź „200 OK”, jeśli aplikacja jest w dobrym stanie, kroki inicjalizacji zostały zakończone i żadne prawidłowe żądanie nie powoduje błędu. Kubernetes będzie kierował ruch do kontenera tylko wtedy, gdy aplikacja będzie gotowa zgodnie z tymi kontrolami. Można połączyć dwa punkty końcowe, jeśli nie ma różnicy między stanami żywotności i gotowości.

Więcej na ten temat możesz przeczytać w powiązanym artykule Sandeepa Dinesha, rzecznika programistów w Google: „Najlepsze praktyki Kubernetes: Konfigurowanie kontroli kondycji za pomocą sond gotowości i żywotności".

7. Wybierz ostrożnie wersję obrazu

Większość obrazów publicznych i prywatnych korzysta z systemu tagowania podobnego do opisanego w Najlepsze praktyki dotyczące budowania kontenerów. Jeśli obraz korzysta z systemu zbliżonego do wersjonowanie semantyczne, należy wziąć pod uwagę specyfikę tagowania. Na przykład tag latest może często przechodzić z obrazu na obraz - nie można na nim polegać, jeśli potrzebujesz przewidywalnych i powtarzalnych kompilacji i instalacji.

Możesz użyć tagu X.Y.Z (prawie zawsze pozostają niezmienione), ale w tym przypadku należy śledzić wszystkie poprawki i aktualizacje obrazu. Jeśli obraz, którego używasz, ma tag X.Y, to dobra opcja na złoty środek. Wybierając ją, automatycznie otrzymujesz łatki i jednocześnie polegasz na stabilnej wersji aplikacji.

PS od tłumacza

Przeczytaj także na naszym blogu:

Źródło: www.habr.com

Dodaj komentarz