Kontenery

menu icon

Kontenery

W tym przewodniku omówiono, jak ważne jest stosowanie kontenerów w przypadku przetwarzania w chmurze, pokazano najważniejsze korzyści oraz przedstawiono nowo powstały ekosystem powiązanych technologii — Docker, Kubernetes, Istio i Knative.

Czym są kontenery?

Kontenery to wykonywalne jednostki oprogramowania. Kod aplikacji wraz z jego bibliotekami i zależnościami jest w nich spakowany w uniwersalny sposób, aby umożliwić uruchamianie w dowolnym miejscu — na komputerze PC, w tradycyjnym środowisku IT lub w chmurze.

W tym celu kontenery wykorzystują swoistą wirtualizację systemu operacyjnego (OS), w ramach której funkcje systemu operacyjnego (w przypadku jądra Linux są to przestrzenie nazw i podstawowe konstrukcje cgroups) służą do separowania procesów i kontrolowania zasobów CPU, pamięci operacyjnej i pamięci masowej, do których dostęp mają te procesy.

Kontenery są małe, szybkie i przenośne, ponieważ w przeciwieństwie do maszyny wirtualnej nie muszą zawierać systemu operacyjnego gościa w każdej instancji, a zamiast tego mogą korzystać z funkcji i zasobów systemu operacyjnego hosta.

Kontenery po raz pierwszy pojawiły się kilkadziesiąt lat temu jako, na przykład, FreeBSD Jails czy AIX Workload Partitions, ale większość współczesnych programistów uznaje rok 2013, czyli wydanie platformy Docker, za początek ery nowoczesnych kontenerów.

Kontenery a maszyny wirtualne

Aby lepiej zrozumieć, czym jest kontener, można go porównać z tradycyjną maszyną wirtualną. W przypadku tradycyjnej wirtualizacji — niezależnie od tego, czy odbywa się ona w środowisku lokalnym, czy w chmurze — do wirtualizacji sprzętu fizycznego jest używany hiperwizor. Każda maszyna wirtualna składa się w takim przypadku z systemu operacyjnego gościa, wirtualnej kopii sprzętu koniecznego do działania systemu operacyjnego oraz aplikacji i powiązanych z nią bibliotek i zależności.

Zamiast wirtualizować podstawowy sprzęt, kontenery wirtualizują system operacyjny (zwykle jest to system Linux), dlatego każdy kontener zawiera tylko aplikację oraz jej biblioteki i zależności. Brak systemu operacyjnego gościa sprawia, że kontenery są tak lekkie, a tym samym szybkie i przenośne.

Dokładniejsze porównanie zawiera artykuł „Kontenery a maszyny wirtualne: jaka jest różnica?

Korzyści ze stosowania kontenerów

Główną zaletą kontenerów, w szczególności w porównaniu z maszyną wirtualną, jest zapewnienie poziomu abstrakcji, dzięki któremu są one lekkie i przenośne.

  • Lekkie: kontenery współużytkują jądro systemu operacyjnego maszyny, dzięki czemu nie trzeba korzystać z pełnej instancji systemu operacyjnego dla każdej aplikacji, a pliki kontenerów są niewielkie i potrzebują niewielu zasobów. Mniejszy rozmiar, w szczególności w porównaniu z maszynami wirtualnymi, pozwala na ich szybkie uruchamianie i lepszą obsługę aplikacji od początku przeznaczonych dla chmury, które są skalowane w poziomie.
  • Przenośne i niezależne od platformy: kontenery zawierają wszystkie odpowiednie zależności, dzięki czemu oprogramowanie może być pisane raz, a następnie uruchamiane bez konieczności ponownego konfigurowania na wielu laptopach, w chmurze i w lokalnych środowiskach przetwarzania.
  • Wsparcie dla nowoczesnych wzorców tworzenia oprogramowania i architektury: ze względu na spójność i przenośność wdrożenia na wielu platformach oraz niewielki rozmiar, kontenery świetnie wpisują się w nowoczesne wzorce tworzenia oprogramowania i architektury, np. tworzenie i eksploatację oprogramowania, rozwiązania bezserwerowe i mikrousługi, które polegają na regularnym wdrażaniu niewielkich ilości kodu.
  • Lepsze wykorzystanie: podobnie jak wcześniej maszyny wirtualne, kontenery umożliwiają programistom i operatorom lepsze wykorzystanie procesora i pamięci maszyn fizycznych. Jednak kontenery idą jeszcze dalej. Ponieważ umożliwiają także stosowanie architektur mikrousług, komponenty aplikacji mogą być wdrażane i skalowane z większą dokładnością. Jest to atrakcyjna alternatywa dla konieczności skalowania całej aplikacji monolitycznej, ponieważ jeden komponent nie radzi sobie z obciążeniem.

W niedawnej ankiecie IBM (PDF, 1,4 MB) programiści i dyrektorzy IT podali wiele innych korzyści z użytkowania kontenerów. Aby się z nimi zapoznać, skorzystaj z poniższego interaktywnego narzędzia:

Pobierz pełny raport Kontenery w przedsiębiorstwie (PDF, 1,4 MB)

Przypadki użycia kontenerów

Kontenery stają się coraz popularniejsze, zwłaszcza w środowiskach chmurowych. Wiele organizacji rozważa nawet użycie kontenerów zamiast maszyn wirtualnych jako platformy obliczeniowej ogólnego przeznaczenia dla aplikacji i obciążeń. Jednak wśród tych szerokich możliwości można wyróżnić kluczowe przypadki użycia, w których kontenery sprawdzają się wyjątkowo dobrze.

  • Mikrousługi: kontenery są małe i lekkie. To sprawia, że świetnie się sprawdzają w architekturach mikrousług, gdzie aplikacje są zbudowane z wielu luźno powiązanych mniejszych usług, które można wdrażać niezależnie.
  • Tworzenie i eksploatacja oprogramowania: połączenie mikrousług jako architektury i kontenerów jako platformy jest typowym fundamentem dla wielu zespołów, które korzystają z metodologii DevOps na potrzeby tworzenia, dostarczania i uruchamiania oprogramowania.
  • Hybrydowe środowisko wielochmurowe: ponieważ kontenery działają spójnie w dowolnym miejscu — na laptopach, w środowiskach lokalnych i w chmurze — stanowią idealną podstawową architekturę dla scenariuszy obejmujących wykorzystanie chmury hybrydowej i środowiska wielochmurowego, w przypadku których organizacje działają w wielu chmurach publicznych oraz we własnym centrum przetwarzania danych.
  • Modernizacja i migracja aplikacji: jedna z najczęściej spotykanych strategii modernizacji aplikacji ma swój początek w konteneryzacji, która pozwala na ich migrację do chmury.

Konteneryzacja

Aby wykorzystać kontenery, oprogramowanie musi być projektowane i pakowane w inny sposób — ten proces zwykle nazywa się konteneryzacją.

Proces konteneryzacji aplikacji obejmuje spakowanie aplikacji wraz z odpowiednimi zmiennymi środowiskowymi, plikami konfiguracji, bibliotekami i zależnościami oprogramowania. Wynikiem jest obraz kontenera, który można następnie uruchomić na platformie kontenerowej. Aby uzyskać więcej informacji, obejrzyj wideo „Konteneryzacja bez tajemnic” (08:09):

Orkiestracja kontenerów z Kubernetes

Gdy firmy zaczęły stosować kontenery na większą skalę — często w ramach nowoczesnych architektur od początku przeznaczonych dla chmury — prostota pojedynczego kontenera zaczęła kolidować ze złożonością zarządzania setkami (lub nawet tysiącami) kontenerów w systemie rozproszonym.

Aby sprostać temu wyzwaniu, wprowadzono orkiestrację kontenerów do zarządzania dużą liczbą kontenerów w trakcie całego ich cyklu życia. Obejmuje ona:

  • Udostępnianie
  • Nadmiarowość
  • Monitorowanie poprawności
  • Przydział zasobów
  • Skalowanie i równoważenie obciążeń
  • Przenoszenie między hostami fizycznymi

Utworzono wiele platform orkiestracji kontenerów (np. Apache Mesos, Nomad i Docker Swarm) w celu rozwiązania tych problemów. W 2014 roku firma Google wydała projekt Open Source Kubernetes, który szybko stał się najpopularniejszą platformą orkiestracji kontenerów i obecnie jest standardem używanym przez większość firm w branży.

Platforma Kubernetes umożliwia programistom i operatorom zadeklarowanie żądanego stanu ogólnego środowiska kontenerów za pomocą plików YAML, a następnie zajmuje się osiągnięciem i utrzymaniem tego stanu przez wdrażanie określonej liczby instancji danej aplikacji lub danego obciążenia, ponowne uruchamianie aplikacji w przypadku awarii, równoważenie obciążeń, automatyczne skalowanie, wdrażanie bez przestojów itp.

Aby dowiedzieć się więcej na temat platformy Kubernetes, obejrzyj poniższe wideo, w którym Sai Vennam ogólnie omawia tę platformę (10:59):

 

Obecnie projektem Kubernetes opiekuje się fundacja Cloud Native Computing Foundation (CNCF), która jest niezależną od dostawców grupą branżową działającą pod auspicjami fundacji Linux Foundation.

Istio, Knative i rozwijający się ekosystem kontenerów

W miarę jak kontenery zdobywają coraz większą popularność jako sposób pakowania i uruchamiania aplikacji, rozwija się także ekosystem narzędzi i projektów służących do zabezpieczania i zwiększania liczby zastosowań w środowisku produkcyjnym. Pomijając platformę Kubernetes, dwa najpopularniejsze projekty w ekosystemie kontenerów to Istio i Knative.

Istio

W miarę jak programiści zwiększają wykorzystanie kontenerów do tworzenia i uruchamiania architektur mikrousług, problemy z zarządzaniem wykraczają poza cykl życia pojedynczych kontenerów i zaczynają dotyczyć sposobu łączenia się ze sobą wielu małych usług — często nazywanych „siatką usług” — oraz relacji między nimi. Rozwiązanie Istio zostało zaprojektowane z myślą o ułatwieniu programistom zarządzania wyzwaniami związanymi z wykrywaniem, ruchem, monitorowaniem, bezpieczeństwem itp. Aby uzyskać więcej informacji o rozwiązaniu Istio, zapoznaj się z artykułem „Czym jest Istio?” i obejrzyj to wideo z objaśnieniem (05:06):

 

Knative

Architektury bezserwerowe również stają się coraz popularniejsze, zwłaszcza wśród społeczności rozwiązań stworzonych z myślą o chmurze. Ważną zaletą rozwiązania Knative jest możliwość wdrażania usług kontenerowych jako funkcji bezserwerowych.

Zamiast działać cały czas i odpowiadać w razie potrzeby (tak działa serwer), funkcję bezserwerową można „skalować do zera”, to znaczy, że może ona w ogóle nie działać, dopóki nie zostanie wywołana. Zastosowanie tego modelu do dziesiątek tysięcy kontenerów może zaoszczędzić ogromne ilości mocy obliczeniowej.

Aby uzyskać więcej informacji na temat rozwiązania Knative, obejrzyj to wideo „Czym jest Knative?”(07:58):

Kontenery i IBM Cloud

Usługi kontenerów IBM Cloud są utworzone w oparciu o technologie Open Source, które ułatwiają i przyspieszają wdrożenie chmury. Twórz aplikacje kontenerowe, korzystając z narzędzi do ciągłej integracji i ciągłego dostarczania (CI/CD). Orkiestruj kontenery z pomocą zarządzanych usług Red Hat OpenShift lub usług Kubernetes. Modernizuj istniejące aplikacje za pomocą kontenerowych komponentów Open Source i oprogramowania pośredniego IBM dostępnego w ramach produktów IBM Cloud Paks.

Dowiedz się więcej o kontenerach na platformie IBM Cloud.

Zarejestruj się, aby uzyskać identyfikator IBMid i załóż konto w IBM Cloud.