Kontenery, czyli wykonywalne jednostki oprogramowania, zyskują coraz większą popularność w branży software development. Architekci rozwiązań IT i developerzy, którzy wzięli udział w badaniu fundacji CNCF „Cloud Native Survey 2020” do najważniejszych korzyści płynących konteneryzacji zaliczyli zwiększoną skalowalność i krótszy czas wdrożenia (51%) oraz wyższą dostępność (44%).
Co to jest konteneryzacja?
Kontener to samodzielny pakiet oprogramowania, który zawiera wszystkie komponenty niezbędne do uruchomienia aplikacji: kod źródłowy, środowisko uruchomieniowe, narzędzia i biblioteki systemowe oraz pliki konfiguracyjne. Taki kontener można następnie uruchomić w dowolnym miejscu — na komputerze, w tradycyjnym środowisku IT lub w chmurze.
Jest to możliwe, ponieważ kontenery wykorzystują wirtualizację systemu operacyjnego maszyny, na której się znajdują. W ramach takiego rozwiązania OS rozdziela procesy i kontroluje zasoby procesora, pamięci operacyjnej oraz masowej, do których dostęp mają kontenery.
Powyższa architektura jest źródłem największych zalet konteneryzacji, do których należą:
- Wydajność – Kontenery umożliwiają lepsze wykorzystanie procesora i pamięci, ponieważ współużytkują jądro systemu operacyjnego maszyny fizycznej, a same potrzebują niewielu zasobów;
- Skalowalność – Rozbudowane i wymagające aplikacje mogą być dzielone na mikroserwisy, co zapewnia im stabilne działanie nawet przy znacznym obciążeniu;
- Przenośność – Kontenery zawierają wszystko, co jest potrzebne do uruchomienia znajdującego się w nich kodu, dzięki czemu oprogramowanie może zostać napisane raz, a następnie być uruchamiane bez konieczności ponownego konfigurowania na różnych środowiskach czy infrastrukturze;
- Separacja instancji – Kontenery są od siebie oddzielone, co pozwala na wprowadzanie zmian w jednym z nich, bez zaburzeń w sąsiadujących z nim;
- Wsparcie rozwoju i zmian – Wprowadzanie nowych funkcjonalności wymaga wyłączenia jedynie aktualizowanej części systemu. Dzięki swojej lekkości, szybkości i niewielkiemu zużyciu zasobów są doskonałym rozwiązaniem w testowaniu oprogramowania.
Konteneryzacja a wirtualizacja
W przypadku tradycyjnej wirtualizacji — niezależnie od tego, czy odbywa się ona w środowisku lokalnym, czy w chmurze — wirtualizowany jest sprzęt fizyczny z pomocą hypervisora (nadzorcy). Każda maszyna wirtualna (VM) składa się z systemu operacyjnego (OS), wirtualnej kopii sprzętu koniecznego do jego działania oraz aplikacji i powiązanych z nią zależności.
Zamiast sprzętu kontenery wirtualizują system operacyjny, dlatego każdy kontener zawiera tylko kod oraz biblioteki i zależności. Brak własnego OS sprawia, że kontenery są “lżejsze” od maszyn wirtualnych – dzięki temu zużywają znacznie mniej zasobów oraz pozwalają na szybsze uruchamianie aplikacji.
Współdzielenie systemu operacyjnego z hostem czyni je podatnymi na tzw. “ucieczkę z kontenera”. Oznacza to, że osoba niepowołana może uzyskać dostęp administracyjny nie tylko do danego kontenera, ale też do samej maszyny i wszystkich pozostałych kontenerów znajdujących się na niej. W przypadku maszyn wirtualnych problem ten niemalże nie występuje, ponieważ są one od siebie odizolowane, a przejęcie praw administratora dotyczy jedynie tej konkretnej VM.
Na szczęście ucieczka z kontenera składa się z wielu etapów i można ją powstrzymać na każdym z nich, a zabezpieczenia kontenerów są stale rozwijane. Warto jednak pamiętać, że takie ryzyko istnieje.
Konteneryzacja w praktyce
Dzięki swojej strukturze kontenery stanowią doskonałą podstawę pod architekturę mikroserwisów, czyli podejście do tworzenia aplikacji podzielonych na wiele modułów. Każdy moduł ma ściśle określony cel i może być łączony z innymi mikroserwisami tworząc spójną całość.
Oprogramowanie zbudowane z wielu oddzielnych, ale współdziałających “cegiełek” łatwo jest rozwijać i utrzymywać. W takiej architekturze awaria jednej części nie powoduje zatrzymania całości – jedynie danej funkcjonalności. Tym samym mikroserwisy utrzymują stałą dostępność usług, nie narażając firm na straty finansowe, a także znacznie ułatwiają rozwój aplikacji.
Kontenery to jednak nie tylko “opakowanie” dla mikroserwisów. Można je zastosować również w poniższych scenariuszach:
- Modernizacja i migracja aplikacji – Konteneryzacja umożliwia migrację do chmury nawet starszego oprogramowania.
- Internet rzeczy – Ponieważ kontenery dostarczają oprogramowanie w postaci łatwych do wdrożenia, przenośnych pakietów, są idealnym sposobem na instalację i aktualizację aplikacji działających na urządzeniach IoT.
- Continuous Integration and Delivery (CI/CD) – Kontenery umożliwiają DevOps częstsze dostarczania pewnych, przetestowanych i sprawdzonych zmian w kodzie, ułatwiając implementację praktyk CI/CD, czyli ciągłej integracji i ciągłego dostarczania.
Kontenery w chmurze
Korzystanie z kontenerów zapewnia wiele korzyści, ale wiąże się też z potencjalnymi trudnościami. Ponieważ jest to młoda technologia, zainteresowane organizacje nie zdobyły jeszcze wszystkich niezbędnych do korzystania z niej kompetencji.
Doskonałym rozwiązaniem dla firm zainteresowanych wdrożeniem konteneryzacji jest skorzystanie z kontenerów w chmurze. Ich dostawcy oferują wsparcie w zakresie konteneryzacji na wielu poziomach:
- Centrum danych – Odpowiednie warunki klimatyczne, fizyczne zabezpieczenia oraz redundancję na poziomie sprzętu, sieci, energii i personelu
- Fizyczny sprzęt – Infrastruktura klasy Enterprise,
- Wirtualizacja i konteneryzacja – Wsparcie w zakresie tworzenia oraz optymalizacji środowisk pod kontenery,
- Administracja – Profesjonalne monitorowanie i zarządzanie.
W ciągu kilku najbliższych lat konteneryzacja wpisze się w krajobraz IT na dobre – wskazuje na to między innymi badanie firmy IBM, w którym 79% respondentów (developerzy i CTO) uważa, że kontenery będą stanowiły część długofalowej strategii rozwoju. Już teraz warto sprawdzić ich możliwości w chmurze – bez wątpienia zwiększą zwinność polskich firm i przygotują je na dalszy rozwój.