Trudno sobie wyobrazić — a tym bardziej stosować — praktyki DevOps bez całego wachlarza narzędzi DevOps. W tym artykule dowiesz się, czym jest zarządzanie konteneryzacją i jakie są najlepsze narzędzia DevOps wykorzystywane w tym procesie. To pierwsza część serii artykułów opisujących najpopularniejsze narzędzia DevOps, które odpowiadają nie tylko za zarządzanie konfiguracją, ale również za silniki kontenerowe, infrastrukturę jako kod (IaC) oraz tworzenie pipeline’ów CI/CD.
Czym jest konteneryzacja?
Konteneryzacja oznacza użycie narzędzi zwanych kontenerami — paczek oprogramowania zawierających wszystkie niezbędne elementy do uruchomienia aplikacji. W kontenerze znajdziesz kod źródłowy, pliki konfiguracyjne, środowiska testowe oraz biblioteki systemowe. Dlaczego stosować kontenery?
Ułatwiają i przyspieszają procesy DevOps, takie jak automatyzacja tworzenia oprogramowania czy automatyczne testowanie. Kontenery można łatwo ponownie wykorzystać, a ponieważ zawierają „wszystko W zestawie”, będą działać w niemal każdym środowisku DevOps. Ponieważ kontenery to lekkie procesy, nie zużywają tak wielu zasobów jak pełne systemy operacyjne uruchamiane na maszynach wirtualnych — ich zastosowanie pozwala osiągnąć większą gęstość uruchomionych jednostek i lepsze wykorzystanie zasobów węzłów.
Efektywne zarządzanie konfiguracją staje się szczególnie ważne, gdy liczba kontenerów staje się tak duża, że człowiek nie nadąża z ich obsługą. Choć wdrożenie zarządzania konfiguracją jest złożone, może powodować błędy i zazwyczaj wymaga dobrze wyszkolonych zespołów DevOps i deweloperskich — to i tak się opłaca. Zapewnia elastyczność i wydajność operacyjną w całym cyklu życia oprogramowania, a także wysoką jakość kodu i bezpieczeństwo.
Kubernetes
Zanim przejdziemy do narzędzi konteneryzacji, zdefiniujmy Kubernetes (znany też jako K8s). Kubernetes to system open source do automatyzacji, skalowania, wdrażania i zarządzania kontenerami. Pierwsza wersja pojawiła się w 2014 roku i została zaprojektowana przez trzech deweloperów z Google.
Jest bardzo elastyczny dzięki API i może współpracować z różnymi narzędziami. Kubernetes posiada 5 podstawowych obiektów:
- Pods – najmniejsze jednostki, składające się z jednego lub kilku kontenerów współdzielących ten sam host;
- Services – jeden lub kilka pods współdziałających ze sobą poprzez lokalną sieć węzła;
- Volumes – komponenty przechowywania danych dla kontenerów, umożliwiające krótkoterminowe (ephemeral) lub długoterminowe (persistent) przechowywanie danych;
- Namespaces – logiczne przestrzenie, które mogą izolować aplikacje lub środowiska (testowe, produkcyjne, deweloperskie), ale jednocześnie współdzielić podstawowe zasoby (sieć, węzły);
- Secrets – mechanizm przechowywania danych wrażliwych z większym poziomem bezpieczeństwa niż sam kontener.
Ponadto Kubernetes często wykorzystywany jest do hostingu mikrousług.

Kubernetes to de facto standard technologii, aspirujący do tego, by stać się platformą dla wszystkiego, co jest „Cloud Native”, z jednolitym interfejsem dostępnym na wszystkich możliwych prywatnych i publicznych dostawcach chmur. Może być nadmiarem dla prostej aplikacji webowej z kilkoma komponentami, ale jeżeli masz coś bardziej złożonego, Kubernetes to dobry wybór. Platforma obsługuje wszelkiego rodzaju obciążenia obliczeniowe — od aplikacji webowych i baz danych, przez AI i IoT, aż po wielo‑dzierżawowe platformy SaaS z różnorodnymi topologiami sieciowymi i wzorcami architekturalnymi.
Jako przykład wykorzystania Kubernetes można wyobrazić sobie platformę e-learningową opartą o mikrousługi, działającą na wielu zregionalizowanych klastrach Kubernetes z złożonymi zależnościami i wieloma wersjami językowymi. Zunifikowane środowiska hostingowe często działają między regionami i dostawcami chmur, z wieloma etapami rozwoju i środowiskami podglądowymi (preview). To typowa sytuacja w zaawansowanym startupie lub firmie w fazie skali, gdzie tempo innowacji i zdolność do szybkich, prowizorycznych eksperymentów są wysoko cenione.
OpenShift
Drugim narzędziem do konteneryzacji jest OpenShift, opracowany przez Red Hat. W pewnej części zbudowany na Dockerze i Kubernetesie, stanowi platformę kontenerową opartą na technologii chmurowej. Uważany jest też za platformę typu PaaS (Platform as a Service). OpenShift wspomaga proces wdrażania, ciągłego testowania i dostarczania aplikacji chmurowych. Główne zalety tego systemu to scentralizowane zarządzanie politykami, bezpieczeństwo, wbudowany monitoring oraz integracja z wieloma innymi narzędziami DevOps – przede wszystkim Kubernetes.
Ponieważ OpenShift stanowi właściwie własną implementację Kubernetes z podwyższonymi standardami bezpieczeństwa i podejściem „wszystko w pakiecie” (monitoring, narzędzia pomocnicze, zarządzanie politykami klasy korporacyjnej), jest często wybierany przez większe przedsiębiorstwa do obsługi zazwyczaj dużych i zróżnicowanych obciążeń. OpenShift adresuje te same scenariusze co Kubernetes, ale zwykle w bardziej dojrzałych środowiskach korporacyjnych i finansowych, gdzie zarządzanie ryzykiem i zmianą ma wysoki priorytet. Zespoły korporacyjne często pracują wolniej i mniej chętnie podejmują ryzykowne eksperymenty, co skłania je do wyboru sprawdzonych narzędzi DevOps o rozpoznawalnych markach, takich jak Red Hat.

Nomad
Poza złożonym oprogramowaniem konteneryzacyjnym, zespoły DevOps mogą sięgnąć po prostsze narzędzia jako uzupełnienie lub alternatywę dla Kubernetes czy Dockera. Jednym z nich jest Nomad firmy HashiCorp. Nomad to elastyczny scheduler i system orkiestracji do zarządzania aplikacjami w tej samej infrastrukturze, korzystając z jednej uniwersalnej biblioteki, którą można wdrożyć w różnych środowiskach przy zachowaniu spójnego doświadczenia użytkownika. Może być używany zarówno dla projektów kontenerowych, jak i niekontenerowych, oraz obsługuje przepływy związane z GPU (np. w uczeniu maszynowym czy sztucznej inteligencji).
Nomad, podobnie jak wiele innych narzędzi od HashiCorp, stara się być uniwersalnym rozwiązaniem dla hostowania obciążeń. Jeśli masz heterogeniczne środowiska (sprzęt fizyczny, maszyny wirtualne i kontenery) do obsługi, skorzystasz na zdolności Nomad do zarządzania tym wszystkim na dużą skalę — używasz tego samego języka IaC i masz jedno „okno” do obserwacji (single pane of glass).

Podman
Kolejnym narzędziem DevOps autorstwa Red Hat jest Podman — projekt open source dla systemu Linux, obsługujący kontenery zgodne ze standardem Open Container Initiative (OCI). Podman często porównywany jest do Docker i Kubernetes, i faktycznie może współpracować z oboma. Różnica polega na tym, że Podman skupia się na tworzeniu podów, które organizują kontenery jako jednostki współdzielące zasoby. Dzięki temu deweloperzy mogą współdzielić zasoby między różnymi kontenerami w aplikacji wewnątrz jednego poda.
Przykładowe zastosowania Podmana to głównie małe lokalne wdrożenia mikrousług lub konteneryzowane projekty hobbystyczne, gdzie pożądany jest dobry standard zarządzania konfiguracją w stylu Cloud Native z wbudowanym bezpieczeństwem, ale niekoniecznie potrzeba rozwiązania skalującego się na dużą skalę.

Inne rozwiązania
Wszystkie omówione narzędzia są odpowiednie do zarządzania dużymi projektami z wieloma kontenerami. Jednak istnieje wiele rozwiązań lepiej dopasowanych do mniejszych aplikacji. Przykładami są AWS ECS, Azure Container Instances czy DigitalOcean Apps — rozwiązania kontenerowe specyficzne dla dostawców chmur. Zazwyczaj dobrze współgrają z prostszymi aplikacjami z jedną lub kilkoma jednostkami kontenerowymi, oferując autoskalowanie oparte na metrykach i koncepcje wysokiej dostępności oparte na sieciach wieloregionalnych i równoważeniu ruchu.

Przykładowy projekt dla narzędzi dostarczanych przez dostawców
Ponieważ popularne narzędzia DevOps typu AWS ECS czy Azure Container Systems są projektowane tak, aby korzystać ze wszystkich najlepszych praktyk i koncepcji infrastruktury dostawcy — od wysokiej dostępności po bezpieczeństwo danych — są idealne dla małych i średnich aplikacji konteneryzowanych, które nie mają zbyt złożonych zależności. Dobrym przykładem może być aplikacja webowa z backendem w PHP i oddzielnym frontendem w React, z zależnościami jak zarządzana baza PostgreSQL i serwer Redis.
Możesz także rozważyć narządzia serverless. Proste aplikacje w jednym kontenerze nie wymagają dziś skomplikowanych rozwiązań. Jeśli nie musisz obsługiwać ogromnego ruchu lub chcesz uruchamiać kontener według harmonogramu, narzędzia typu AWS Lambda lub Google Cloud Functions mogą wystarczyć. Zwykle używa się ich jako komponentów w bardziej złożonych przepływach danych, środowiskach event-driven i backendowych API, ale mogą też pełnić rolę podstawowego API.

Przykładowy projekt, który może skorzystać z hostingu kontenerów serverless
Prosta funkcja w Pythonie lub usługa API, używana bezpośrednio przez klienta lub inne aplikacje, o niewielkim lub umiarkowanym zużyciu CPU i pamięci, bez długiego czasu działania.
Kluczem jest tutaj unikanie stosowania konteneryzowanego rozwiązania serverless dla aplikacji o znacznym ruchu — powyżej kilku milionów zapytań miesięcznie.