MENU

Jak zwiększyć niezawodność działania kontenerów

26 października 2017Architekci IT, CIO, Polecane tematy, Programiści

W krótkim czasie technologie kontenerowe – np. Docker – znalazły zastosowanie w przedsiębiorstwach, przede wszystkim jako sposób na tworzenie i obsługę nowych aplikacji. Dużą rolę odgrywa w tym wydajne zarządzanie, które umożliwia efektywne i bezpieczne używanie kontenerów w całym ich cyklu życia.

Kluczowe cechy kontenerów linuksowych można streścić w kilku zdaniach: zawierają one kod programu i niezbędne zależności w izolowanym pakiecie, który działa w pojedynczej instancji systemu-gospodarza. Odbywa się to bezpośrednio na fizycznym sprzęcie albo w maszynie wirtualnej, w lokalnym centrum danych albo w chmurze publicznej.

Kontenery wyraźnie różnią się od wirtualizacji opartej na hiperwizorze. Wirtualizacja wymaga łączenia maszyn wirtualnych z pełnym systemem operacyjnym, a to generuje dodatkowe obciążenia. Aby rozwiązać ten problem, kontener aplikacyjny zawiera już wszystkie potrzebne zależności, takie jak oprogramowanie pośrednie i środowisko uruchomieniowe. W rezultacie wiele kontenerów działających w jednym serwerze może współdzielić jądro systemu operacyjnego.

Przejście od tworzenia do użytkowania oprogramowania wymaga szeregowania kontenerów. Polega to m.in. na sprawdzeniu, jak kontenery są rozłożone w docelowych infrastrukturach i jakie zasoby są dla nich dostępne w istniejących systemach. Mogą to być serwery w lokalnym centrum danych, ale również w chmurze publicznej, a nawet w kilku chmurach publicznych, takich jak Amazon Web Services, Google Cloud i Microsoft Azure. Celem szeregowania kontenerów jest zagwarantowanie, że będą one mogły optymalnie wykorzystać dostępne zasoby.

Kontenery umożliwiają szybkie i ekonomiczne tworzenie oprogramowania, ponieważ można je łatwo przenosić między środowiskami rozwojowymi, testowymi i operacyjnymi. W ten sposób przedsiębiorstwa mogą rozwiązać wiele problemów organizacyjnych, które występują w zakrojonych na dużą skalę, konwencjonalnych projektach programistycznych.

Zoptymalizowana koordynacja zasobów i obciążeń roboczych

W odróżnieniu od standardowego oprogramowania monolitycznego – albo rozwiązań niestandardowych – aplikacja kontenerowa składa się z pewnej liczby wzajemnie niezależnych komponentów, które w większości mogą działać samodzielnie. Rozwiązanie do zarządzania kontenerami musi uwzględniać każdy z tych komponentów i ich wzajemne relacje. Poziom złożoności jeszcze się zwiększa, jeśli zespół IT postępuje zgodnie z metodologią DevOps, która zakłada powiązanie procesów tworzenia i eksploatacji oprogramowania.

Przejście od tworzenia do użytkowania oprogramowania wymaga szeregowania kontenerów. Polega to m.in. na sprawdzeniu, jak kontenery są rozłożone w docelowych infrastrukturach i jakie zasoby są dla nich dostępne w istniejących systemach. Mogą to być serwery w lokalnym centrum danych, ale również w chmurze publicznej, a nawet w kilku chmurach publicznych, takich jak Amazon Web Services, Google Cloud i Microsoft Azure. Celem szeregowania kontenerów jest zagwarantowanie, że będą one mogły optymalnie wykorzystać dostępne zasoby komputerowe, takie jak moc obliczeniową, pamięć, stacje SSD, dyski twarde i przepustowość sieci.

Zarządzanie cyklem życia kontenerów

Rozwiązanie do zarządzania kontenerami powinno nie tylko uruchamiać kontenery i gwarantować optymalne wykorzystanie zasobów – czyli wykonywać zadania wchodzące w zakres szeregowania kontenerów. Powinno również monitorować ich działanie, wykrywać i rozwiązywać problemy na wczesnym etapie oraz zapewniać dostępność. Obejmuje to m.in. ponowne uruchamianie kontenera, który przestał działać z jakiejkolwiek przyczyny, albo przenoszenie go w razie potrzeby do innego serwera w lokalnym centrum danych albo chmurze publicznej.

Kontenery wyraźnie różnią się od wirtualizacji opartej na hiperwizorze. Wirtualizacja wymaga łączenia maszyn wirtualnych z pełnym systemem operacyjnym, a to generuje dodatkowe obciążenia. Aby rozwiązać ten problem, kontener aplikacyjny zawiera już wszystkie potrzebne zależności, takie jak oprogramowanie pośrednie i środowisko uruchomieniowe. W rezultacie wiele kontenerów działających w jednym serwerze może współdzielić jądro systemu operacyjnego. W ten sposób przedsiębiorstwa mogą rozwiązać wiele problemów organizacyjnych, które występują w zakrojonych na dużą skalę, konwencjonalnych projektach programistycznych.

Na tym etapie bardzo przydatne są funkcje zapewniające kompleksową kontrolę kondycji kontenerów, które deweloperzy mogą bezpośrednio zintegrować ze swoim aplikacjami w postaci interfejsów API. Jest to możliwe na przykład dzięki oprogramowaniu do zarządzania bazującego na API, które pozwala administratorom infrastruktury zarządzać całym cyklem życia kontenerów, od przydzielania zasobów i konfigurowania kontenera do zarządzania aplikacją.

Bezpieczeństwo kontenerów

Kontenery aplikacyjne upowszechniają się w przedsiębiorstwach, co stwarza specyficzne problemy z bezpieczeństwem. Aby je rozwiązać, trzeba wdrożyć podstawowe zabezpieczenia jako część zarządzania kontenerami. Celem jest zapewnienie bezpieczeństwa obrazów i zawartości kontenerów w całym cyklu życia aplikacji. Przykładowo podczas tworzenia obrazów kontenerów ważne jest, aby używać tylko zaufanej treści, by można było łatwo określić pochodzenie wszystkich komponentów i bibliotek w obrazie, żeby używać izolowanych środowisk i wykonywać regularne skanowania pod kątem bezpieczeństwa.

Od samego początku należy wprowadzić zarządzanie rolami i uprawnieniami, które stanowi część rozwiązania do zarządzania kontenerami. Narzędzie to może w tym przypadku wykorzystywać rozwiązania LDAP (już używane w przedsiębiorstwie). Na początku definiuje się, którzy użytkownicy – w zależności od ich roli – mogą wykonywać czynności związane z kontenerem. Następnie określa się czynności, które może wykonywa kontener. Spektrum rozciąga się tutaj od pełnej izolacji do uprawnień superużytkownika, w którym to przypadku kontener ma dostęp do innych kontenerów i systemu operacyjnego w serwerze. Jednak byłby to raczej wyjątek niż reguła.

Skalowanie aplikacji i infrastruktury

Wykorzystując takie technologie i procesy, jak mikrousługi, kontenery i DevOps, działy IT mogą szybko i elastycznie reagować na nowe wymagania biznesowe. Jest to zasługą architektury mikrousługowej: aplikacje dzieli się na niewielkie, luźno połączone mikrousługi i umieszcza w postaci kontenerów w serwerach działających w przedsiębiorstwie albo w chmurze.

Jeśli chodzi o skalowanie – proces, który powinien być wspierany przez system zarządzania kontenerami – istnieją dwa różne jego typy:
• Skalowanie instancji kontenerów z daną aplikacją – trzeba np. zagwarantować, że w przypadku dużego obciążenia administrator, za pomocą rozwiązania do zarządzania kontenerami, będzie mógł ręcznie uruchomić większą liczbę instancji kontenerów w celu zaspokojenia bieżących potrzeb. Aby uzyskać skalowanie dynamiczne, można wykorzystać automatyczny mechanizm bazujący na zapisanych parametrach. Administrator może określić, że jeśli wystąpi konkretne obciążenie procesora, zostanie przekroczony limit pamięć masowej albo dojdzie do określonych zdarzeń, zostanie uruchomiona wstępnie określona liczba dodatkowych kontenerów.
• Skalowanie infrastruktury kontenerowej – musi być możliwe skalowanie aplikacji na platformie kontenerowej do setek instancji, na przykład poprzez rozszerzenie platformy na chmurę publiczną. Jest to znacznie bardziej skomplikowane niż uruchamianie nowych kontenerów w serwerach.

Problemy z bezpieczeństwem kontenerów
Aby je rozwiązać, trzeba wdrożyć podstawowe zabezpieczenia jako część zarządzania kontenerami. Celem jest zapewnienie bezpieczeństwa obrazów i zawartości kontenerów w całym cyklu życia aplikacji. Podczas tworzenia obrazów kontenerów ważne jest, aby:
• używać tylko zaufanej treści,
• łatwo określić pochodzenie wszystkich komponentów i bibliotek w obrazie,
• używać izolowanych środowisk,
• wykonywać regularne skanowania pod kątem bezpieczeństwa,
• wprowadzić zarządzanie rolami i uprawnieniami.

Zapewnienie trwałej pamięci masowej

Wprowadzenie mikrousług do architektury aplikacji wpływa również na zapewnianie pamięci masowej. Podczas pakowania i wdrażania aplikacji pamięć masowa jest zapewniana jako mikrousługa, która trafia do kontenera i staje się jego natywną pamięcią. Oznacza to, że zarządzanie pamięcią trwałą (natywną, kontenerową pamięcią masową) jest również zadaniem dla rozwiązania do zarządzania kontenerami. Używając np. rozwiązania Red Hat OpenShift Container Platform, administratorzy infrastruktury mogą zapewnić kontenerom aplikacyjnym trwałą pamięć, która jest zarządzana przez platformę koordynacji Kubernetes.

Kluczowe cechy kontenerów linuksowych można streścić w kilku zdaniach: zawierają one kod programu i niezbędne zależności w izolowanym pakiecie, który działa w pojedynczej instancji systemu-gospodarza. Odbywa się to bezpośrednio na fizycznym sprzęcie albo w maszynie wirtualnej, w lokalnym centrum danych albo w chmurze publicznej. Kontenery umożliwiają szybkie i ekonomiczne tworzenie oprogramowania, ponieważ można je łatwo przenosić między środowiskami rozwojowymi, testowymi i operacyjnymi.

Technologie kontenerowe – w szczególności kontenery linuksowe – zmieniły się z produktu niszowego w popularny trend na przestrzeni zaledwie kilku lat. Kluczową rolę odegrały tu kontenery linuksowe w formacie Dockera. Otwarty format Dockera jest wspierany przez wiele czołowych firm IT, takich jak Amazon, Google, Hewlett-Packard Enterprise, IBM, Microsoft i Red Hat. W ten sposób powstał standard branżowy ceniony również przez przedsiębiorstwa ze wszystkich sektorów, w których używa się kontenerów linuksowych do tworzenia oprogramowania.

Ponieważ tylu użytkowników i producentów oprogramowania używa kontenerów linuksowych, powstał bardzo dynamiczny rynek oparty na zasadach open source. Coraz więcej przedsiębiorstw stosuje architekturę mikrousługową i dostarcza aplikacje kontenerowe. Stwarza to nowe wymogi, które muszą być jak najszybciej implementowane w postaci nowych funkcji. Nie byłoby to możliwe w modelu zamkniętego kodu źródłowego, z tylko jednym producentem oprogramowania. To samo dotyczy rozwiązań do zarządzania kontenerami.

Według serwisu Github, w projekcie Kubernetes – który w wielu rozwiązaniach stanowi podstawę zarządzania kontenerami – uczestniczy ok. 1000 deweloperów zatrudnionych przez producentów oprogramowania i ich klientów. Nowe wersje i zawarte w nich innowacje ukazują się znacznie częściej, niż w przypadku oprogramowania zamkniętego. W tym drugim przypadku normą jest 12- lub 18-miesięczny cykl wydawniczy. W przypadku Kubernetesa są to 3 miesiące. Otwarte rozwiązania do zarządzania kontenerami mają zatem znaczną przewagę nad rozwiązaniami specyficznymi dla producenta, jeśli chodzi o innowacyjność i elastyczność.

Andreas Neeb
główny architekt rozwiązań dla branży usług finansowych w Red Hat

Artykuł ukazał się na łamach Magazynu ITwiz nr. 7-8/2017. Szczegóły dotyczące wydania wraz z formularzem dla osób zainteresowanych zakupem publikacji dostępne są na stronie: itwiz.pl/kiosk

Podobne tematy:

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

« »