Spis treści
Skalowalność, efektywność wykorzystania zasobów, szybkość działania oraz niski koszt – oto niektóre z zalet jakie daje konteneryzacja. Poniżej wyjaśniamy na czym polega cały proces i co Twój biznes może dzięki niemu zyskać.
Scenariusz numer 1: Twoja nowa aplikacja pracuje bez zarzutu lokalnie, ale tuż po wdrożeniu na serwerze sypie błędami jak z rękawa. Przyczyn takich problemów może być wiele: inna wersja bibliotek, brak kompatybilności systemu operacyjnego, błędy w konfiguracji serwera.
Scenariusz numer 2: Twój zespół chce szybko wdrożyć niezbędną poprawkę do jednej z funkcji aplikacji. Niestety oznacza to konieczność wyłączenia jej w całości, co oznacza dotkliwą dla użytkowników przerwę w dostępności oprogramowania. A jeśli po wdrożeniu poprawki cała aplikacja przestanie działać?
Scenariusz numer 3: Twoja aplikacja bije rekordy popularności, a obecna infrastruktura nie jest w stanie szybko reagować na potrzeby użytkowników. Zdarzają się przerwy w dostępności, rosną koszty infrastruktury, a zespół developerów nie nadąża z dodawaniem niezbędnych poprawek.
Takich scenariuszy może być dużo więcej, ale za każdym razem remedium pozostaje to samo – przesiadka na kontenery.
Czym jest konteneryzacja?
Konteneryzacja w świecie IT czerpie pełnymi garściami z idei kontenerów stosowanych w branży logistycznej. To nic innego, jak wirtualny zasobnik mieszczący najczęściej aplikację lub jej część, wraz z zestawem plików niezbędnych do uruchomienia kodu.
Co warte podkreślenia, aplikacja w takim zasobniku nie jest już tak mocno zależna od rodzaju i konfiguracji infrastruktury. Może być w prosty sposób przenoszona, powielana i wdrażana w różnych środowiskach (on premise, w chmurze publicznej, chmurze hybrydowej, etc.).
Wracając do analogii z branży transportowej, fizyczny kontener łatwiej przenieść ze statku na wagon kolejowy lub naczepę ciężarówki i bezpiecznie dostarczyć jego zawartość do punktu docelowego.
Co można przenieść do kontenerów?
W branży IT kontenery umożliwiają odejście od tradycyjnej monolitycznej struktury tworzenia aplikacji. Dzielą je na mniejsze i łatwiejsze do zarządzania elementy – tzw. mikrousługi (ang. microservices). Dzięki temu każda z nich (np. funkcja w konkretnej aplikacji) może być łatwiej zaktualizowana, bezpieczniej przetestowana i szybciej wdrożona przez zespół DevOps. To szczególnie ważne kiedy standardem jest zapewnienie stałej dostępności do oferowanych usług i rozwiązań.
W środku takiego kontenera znajduje się zatem właściwy kod aplikacji lub jej części, a do tego wymagane biblioteki, procesy, zależności, pliki binarne oraz sam silnik służący do uruchomienia zawartości zasobnika. Pewnie zastanawiasz się czym kontenery różnią się od maszyn wirtualnych? Wbrew pozorom, to nie ta sama technologia, a jedna z nich nie zastępuje drugiej.
Konteneryzacja kontra wirtualizacja
W typowej architekturze wirtualizacji wszystko zaczyna się od najniższego poziomu infrastruktury, czyli fizycznego serwera. Na drugim poziomie zainstalowany jest system operacyjny gospodarza (tzw. host OS). Nad nim działa oprogramowanie nadzorujące pracę właściwych maszyn wirtualnych (tzw. hypervisor).
Więcej o maszynach wirtualnych przeczytasz w artykule: Maszyny wirtualne. Czym są, jak działają i w jakim celu się ich używa?
Hypervisor przydziela maszynom wirtualnym zasoby fizycznego serwera (pamięć RAM, przestrzeń dyskową na dane, moc obliczeniową procesorów). Odpowiada też za instalację i utrzymanie wirtualnych systemów operacyjnych (tzw. guest OS). Niestety system operacyjny wirtualnej maszyny oraz hypervisor zużywają zasoby sprzętowe fizycznego serwera. Klasyczna wirtualizacja jest bardziej zasobożerna niż konteneryzacja, co w efekcie pozostawia mniej mocy obliczeniowej dla aplikacji.
Tymczasem w architekturze konteneryzacji znika konieczność istnienia hypervisora oraz wirtualnych systemów operacyjnych, niejako duplikujących działanie systemu, na którym pracuje fizyczny serwer. Szybkość działania aplikacji w środowisku kontenerowym jest przez to dużo szybsza. Nie trzeba czekać na uruchomienie hypervisora i załadowanie systemu maszyny wirtualnej. Aplikacja w kontenerze startuje niemal natychmiast, a odpowiada za to jeden silnik kontenerowy, który obsługuje wszystkie kontenery w danej instancji.
Dodatkowo poszczególne kontenery stanowiące składowe większej aplikacji mogą się ze sobą bezpiecznie komunikować.
Istnieje jeszcze jedna różnica między wirtualizacją, a konteneryzacją – pierwsza z nich skupia się na wirtualizacji warstwy sprzętowej, natomiast druga odpowiada za wirtualizację platformy systemowej.
Konteneryzacja – zalety i wady
Wśród największych zalet konteneryzacji należy wymienić następujące:
- Mobilność. W kontenerze mieści się wszystko czego potrzebuje dana aplikacja (kod źródłowy, biblioteki, środowisko uruchomieniowe). Można go swobodnie przenosić i uruchamiać w różnych środowiskach, niezależnie od rodzaju i konfiguracji infrastruktury.
- Efektywne zużycie zasobów. Przez usunięcie warstwy systemu operacyjnego zapotrzebowanie takiego kontenera na zasoby jest dużo mniejsze. Rozmiar typowej maszyny wirtualnej liczy się w gigabajtach, podczas kiedy rozmiar typowego kontenera to kwestia megabajtów.
- Szybkość. Stworzenie, uruchomienie, replikacja i skasowanie kontenera trwa zazwyczaj sekundy. Podobne operacje na maszynie wirtualnej zajmują dużo więcej czasu oraz konsumują więcej zasobów, co przekłada się też na koszty usługi. Zespoły developerskie mogą pracować sprawniej nad nowymi funkcjami oraz aktualizacjami.
- Skalowalność. Środowisko kontenerowe wygrywa też w konkurencji skalowania poziomego z wirtualnymi maszynami. Zależnie od zapotrzebowania można błyskawicznie uruchamiać dodatkowe instancje, a ich inteligentnym zarządzaniem zajmuje się oprogramowanie do orkiestracji.
Konteneryzacja niesie też ze sobą pewne wyzwania i nie stanowi rozwiązania wszystkich problemów. Oto najpoważniejsze, o których powinieneś wiedzieć:
- Kiedy wydajność to podstawa. Konteneryzacja tworzy dodatkowy poziom złożoności, którego nie ma w przypadku uruchamiania aplikacji bezpośrednio na serwerze. O ile faktycznie może zwiększyć ogólną wydajność i jest lepsza w skalowaniu poziomym od maszyn wirtualnych, o tyle wymaga dokładnej analizy interakcji z systemem operacyjnym i zasobów jakimi dysponujesz.
- Bardziej do chmury niż lokalnie. Jeśli tworzysz oprogramowanie, które będzie pracować głównie w trybie lokalnym, np. w środowisku desktopowym, konteneryzacja może nie mieć sensu.
- Wyższe bezpieczeństwo, ale większym kosztem. Konteneryzacja może podnieść poziom bezpieczeństwa aplikacji, jednak wymaga dodatkowych nakładów i wiedzy dotyczącej właściwej konfiguracji środowiska. Poziom ryzyka zależy od stopnia wykorzystania technologii, dlatego zanim podejmiesz się zadania konteneryzacji przeprowadź audyt środowiska pracy.
Narzędzia niezbędne do konteneryzacji
Aby rozpocząć wdrażanie konteneryzacji w swoim biznesie, na start potrzebujesz platformy kontenerowej. Kiedy liczba kontenerów stopniowo zacznie rosnąć, przyjdzie czas na narzędzie do orkiestracji, czyli dyrygenta, który przejmie na siebie automatyzację wdrażania, skalowania i zarządzania większą liczbą kontenerów. Grupuje wszystkie pojemniki w wygodne do zarządzania i przeszukiwania jednostki logiczne nazywane klastrami.
Jedną z najpopularniejszych platform kontenerowych jest funkcjonujący od 2013 roku Docker. To narzędzie typu open-source, które w dużym uproszczeniu odpowiada za tworzenie plików z obrazem konkretnej funkcji lub aplikacji (Docker Image), uruchamianie jej za pomocą silnika (Docker Engine), a także zarządzania rojem (swarm) węzłów i kontenerów (Docker Swarm). Docker początkowo zaprojektowany dla Linuksa działa też w środowisku Windows oraz MacOS.
Aby sprawnie zarządzać rosnącą liczbą kontenerów Dockera potrzebujesz narzędzia do orkiestracji. Tu na scenę wchodzi Kubernetes, opracowane na własne potrzeby Google Cloud Platform rozwiązanie open-source, które od 2014 roku jest rozwijane przez Cloud Native Computing Foundation. Kubernetes automatyzuje wdrażanie i zarządzanie klastrem kontenerów Dockera w środowisku chmurowym.
W Google Cloud Platform za usługę orkiestracji kontenerów odpowiada Google Kubernetes Engine (w skrócie GKE). Jeśli chcesz wiedzieć o nim więcej, obejrzyj nasz webinar: Google #Kubernetes Engine w praktyce – jak wdrożyć aplikację do GKE?
W miarę skalowania środowiska kontenerowego i rosnącej liczby klastrów Kubernetesa do zarządzania, będziesz potrzebować innego wyspecjalizowanego narzędzia, takiego jak Rancher.
Docker, Kubernetes, Rancher – co wybrać?
Wybór między Dockerem, Kubernetesem i Rancherem zależy w głównej mierze od skali działalności biznesu i rozmiaru środowiska poddanego konteneryzacji.
Na najniższym poziomie mamy Dockera (platformę kontenerową), który odpowiada za tworzenie i kasowanie pojedynczych kontenerów. Poziom wyżej znajduje się Kubernetes (narzędzie do orkiestracji kontenerów). Sprawdza się ono najlepiej w zarządzaniu zasobami pojedynczego klastra kontenerów. Za to Rancher został zaprojektowany do zarządzania wieloma klastrami Kubernetesa w rozproszonym środowisku Jest zatem rozwiązaniem przeznaczonym do konteneryzacji w największej skali.
Wśród usług Google Cloud odpowiednikiem Ranchera jest Google Cloud Anthos. To kompleksowa platforma do zarządzania wdrożeniami aplikacji (zarówno w kontenerach, jak i na maszynach wirtualnych) w środowisku hybrydowym i multi-cloud.
Dowiedz się, jak czerpać z Kubernetesa więcej, dzięki chmurze Google. Pobierz naszego darmowego ebooka: Kubernetes as a Service. Przewodnik po Google Kubernetes Engine oraz tutoriale GCP.
Czytaj też:
- Compute Engine – maszyny wirtualne w chmurze Google
- Cloud Run – błyskawiczne wdrażanie aplikacji w chmurze Google
- Kubernetes vs. Docker Swarm – porównanie platform do orkiestracji