17 lipca 2020

Kontenerowe systemy operacyjne - porównanie (Container OS)

Pamiętam, jak kiedyś stawiałem FreeBSD na maszynie i486 DX jako bramka do neostrady z 1 CPU. To była niezła przygoda, bo maszynka ta działała kilka lat bezawaryjnie, system na niej również. Tak, to był czysty przypadek :-), bo w serwerowniach normalnie nie zdarzają się takie "cuda" :-) Ponadto instalacja na każdej maszynie oddzielnie to byłaby zwykła robota głupiego. Minęło od opisywanego wyżej dzieła >18 lat i doczekaliśmy się dojrzałej konteneryzacji, całe szczęście dla utrzymania rozwiązań w IT. 


Kontenery

Kontenery szybko stały się niezbędną częścią nowoczesnych centrów danych. Kontenery można budować na dowolnej bazie z wielu podstaw systemu operacyjnego. 

W jaki sposób więc wybrać kontener?

W kontekście wdrażania kontenera kierownicy ds. rozwoju systemów muszą wiedzieć, które cechy i funkcje systemu operacyjnego są krytyczne dla wydawanych aplikacji i czy istnieją inne czynniki - takie jak łatwość zarządzania i elastyczność konfiguracji - które skłoniłyby organizację do wybrania jednego systemu operacyjnego zamiast wielu. Oczywiście łatwo utrzymuje się stan wiedzy inżynierów, jak i stack technologiczny jeśli systemy operacyjne w nim są liczone w kilka a nie kilkanaście.

Jak wypada porównanie różnych systemów operacyjnych pod względem funkcji i podstawowych funkcji? Jak te różnice wpływają na sposób, w jaki będą obsługiwać aplikacje? Oto podstawowe pytania, którym przyjrzymy się na reprezentatywnym przykładzie trzech szerokich typów systemów operacyjnych:

  • Tradycyjne, w pełni funkcjonalne systemy operacyjne
  • Minimalne systemy operacyjne ogólnego przeznaczenia
  • Systemy operacyjne zbudowane specjalnie dla kontenerów

W każdej kategorii wybrałem dwa przykłady, które będą reprezentować wszystkie dystrybucje i produkty w grupie.

Po przeczytaniu tego artykułu powinniście mieć znacznie wyraźniejszy obraz różnic między typami systemów operacyjnych. Zakładam, że poprawi się zrozumienie, dlaczego programiści mogą wybrać jeden kontenerowy system operacyjny zamiast innego dla aplikacji kontenerowych i dlaczego mogą wspierać te wybory lub kwestionować je.


W pełni funkcjonalne systemy operacyjne


Co oznacza „w pełni funkcjonalny system operacyjny”? I dlaczego w kontekście wdrożenia kontenera wszystkie funkcje miałyby znaczenie? W tej sekcji przyjrzymy się, dlaczego ten sam system operacyjny, który może być używany w tradycyjnym wdrożeniu serwera, może być najlepszą odpowiedzią na platformę kontenerową.

Przede wszystkim trzeba wiedzieć, że te systemy operacyjne potrafią to wszystko. Jeśli aplikacja potrzebuje funkcji, istnieje prawdopodobieństwo, że któryś z nich ją będzie miała. Elastyczność ma jednak swoją cenę: te systemy operacyjne wymagają od systemu najwięcej, jeśli chodzi o pamięć masową, pamięć RAM i zasoby procesora. Funkcje te zwiększają również powierzchnię ataku systemu operacyjnego, zapewniając potencjalnym napastnikom znacznie więcej zakamarków, w których mogą wykonywać swoją pracę. Są to koszty, które należy ponieść, jeśli te funkcje są potrzebne aplikacjom. Czasami cena staje się bardzo wysoka, jeśli wymagana jest tylko niewielka liczba funkcji.

Te w pełni funkcjonalne systemy operacyjne mogą być najbardziej odpowiednie w środowisku, w którym wiele różnych aplikacji jest wdrażanych w kontenerach na jednej instancji systemu operacyjnego. W takich przypadkach szeroki zakres funkcji może być najbardziej ekonomicznym sposobem obsługi floty aplikacji.


Ubuntu

Ubuntu stał się domyślnym systemem operacyjnym na serwerze, w chmurze, a nawet na komputerze stacjonarnym dla wielu organizacji. Dobrze wspierany przez firmę Canonical, Ubuntu jest dostępny w wielu różnych formatach do pobrania z pakietami narzędzi, powłokami, funkcjami i zestawami funkcji niezbędnymi do wdrożeń obsługujących IoT, kontenery, serwery lub chmury.

Ubuntu przeniosło się w przestrzeń zajmowaną niegdyś wyłącznie przez Red Hat Linux: jest to bezpieczny wybór dla wdrożeń w przedsiębiorstwach, z obsługą i reputacją, które sprawiają, że wybór jest uznawany przez większość komitetów wykonawczych za „rozsądny”. Należy jednak pamiętać, że rozsądek nie przekłada się na najlepszy w każdych okolicznościach - to wciąż duży, pełny system operacyjny z wieloma zbędnymi preinstalowalnymi pakietami.


CentOS

Tam, gdzie Ubuntu stał się najbardziej zaawansowanym wyborem dla przedsiębiorstw spośród w pełni funkcjonalnych systemów operacyjnych, CentOS jest otwartą, kierowaną przez społeczność wersją innego „bezpiecznego” wyboru - Red Hata. CentOS kładzie nacisk na wsparcie społeczności i wkład w rozszerzający się zestaw funkcji i funkcji w systemie operacyjnym, jednocześnie budując stabilność swojego fundamentu Red Hat. Nie oznacza to, że CentOS nie jest używany przez duże organizacje - znajdziesz go na serwerach w laboratoriach krajowych i u głównych dostawców chmury. Ale Ubuntu ma tendencję do oferowania szybszych aktualizacji niż CentOS, który zawiera pakiety, które wydają się być starsze, ale bardzo dobrze przetestowane.


Minimalne systemy operacyjne


Kontenery powstały jako zbiory minimalnych funkcji zebranych razem w kompletną aplikację. Jakich funkcji w „pełnych” dystrybucjach Linuksa brakuje w tych minimalnych systemach operacyjnych - i czy ma to znaczenie dla Twojej aplikacji? Z drugiej strony, jakie są zalety opierania aplikacji na pakietach zredukowanych do absolutnego minimum?

Najlepsze odpowiedzi znajdują się na przecięciu wymagań aplikacji i funkcjonalności systemu operacyjnego. Bez przemyślanego przygotowania można utracić korzyści związane z rozmiarem i złożonością, których oczekuje się od minimalnych systemów operacyjnych, poprzez dodanie indywidualnych narzędzi, funkcji i apletów wymaganych dla określonych aplikacji.

W tej sekcji omówiono dwie dystrybucje, BusyBox i Alpine Linux, oraz korzyści, jakie mogą one przynieść w odpowiednich okolicznościach. Te dwa systemy operacyjne są ze sobą powiązane - Alpine jest oparty na BusyBox - ale istnieją kluczowe różnice, które mogą skłonić zespół do wybrania jednego z nich dla poszczególnych wdrożeń. Różnice te dotyczą nie tylko określonych zdolności, ale także społeczności wsparcia i ekosystemu każdego z nich.


BusyBox

BusyBox jest stosowany powszechnie we wdrożeniach kontenerów, ponieważ nie został zaprojektowany z myślą o kontenerach. Nazwany przez twórców jako „szwajcarski scyzoryk wbudowanego systemu Linux”, BusyBox miał być pojedynczym plikiem wykonywalnym o niewielkich rozmiarach, który zawierał wszystkie funkcje wymagane przez większość wbudowanych aplikacji. To zmusiło go do przyjęcia podejścia zbliżonego do kontenera do wdrożenia, zanim kontenery powstały.

BusyBox można wdrożyć przy użyciu Linuksa lub innych systemów operacyjnych POSIX jako podstawy. Łączy się z wieloma popularnymi narzędziami Linuksa w uproszczonej formie. Rezultatem jest kompaktowy, jednoplikowy plik wykonywalny, który zawiera wiele funkcji „pełnej” dystrybucji Linuksa, chociaż wiele opcji funkcjonalnych dostępnych w tych pełnych wersjach zostało pominiętych w BusyBox w imię zaoszczędzonego miejsca.


Alpine Linux

Jak wspomniano, Alpine Linux jest oparty na BusyBox, ale opiera się na wcześniejszej dystrybucji zarówno pod względem celu, jak i szczegółów. Tam, gdzie BusyBox jest zaprojektowany z niewielkimi rozmiarami, jako jedyny cel, Alpine Linux używa wzmocnionego jądra, aby dodać bezpieczeństwo do kompaktowych, prostych celów swojego poprzednika.

Alpine Linux ułatwia również programistom dodawanie funkcji. Opierając swoją dystrybucję na BusyBox i bibliotece musl, Alpine Linux daje programistom przewagę nad dodawaniem funkcji i budowaniem kompaktowych pakietów dystrybucyjnych. Jest to minimalny system operacyjny zdolny do tworzenia bardzo małych obrazów kontenerów do wdrożenia, a wzmocnione jądro sprawia, że ​​nadaje się on do zastosowań produkcyjnych, a także programistycznych.


Kontenerowe systemy operacyjne

System operacyjny kontenera jest dostarczany po wyjęciu z pudełka z wbudowaną automatyzacją i orkiestracją kontenerów. Są one zaprojektowane i zbudowane jako systemy operacyjne „hosta” - system operacyjny, na którym są hostowane systemy operacyjne kontenerów, takie jak Alpine i BusyBox. Dlaczego więc nie są one automatycznym wyborem dla każdego wdrożenia kontenera?

Kontenerowe systemy operacyjne wyróżniają się tym, że nie są po prostu oprogramowaniem obsługującym kontenery, ale oprogramowaniem wdrażanym przy użyciu kontenerów. Architektura oparta na „kontenerach do samego końca” może zapewnić poziom dostosowania do wdrożenia, który jest znacznie bardziej złożony niż tradycyjne wdrożenie systemu operacyjnego. Z drugiej strony, dla organizacji na wczesnym etapie przechodzenia na kontenery lub we wdrożeniach aplikacji, które przekraczają granice architektur kontenerów, architektura „całkowicie kontenerowa” może być pomostem za daleko, jeśli chodzi o komfort zarządzania.

Rancher OS i Container Linux to dwie główne opcje dla osób poszukujących kontenerowych systemów operacyjnych. Zrozumienie, co każdy system wnosi pozytywnego, pomoże programistom zrozumieć zalety, które posiadają, oraz sytuacje, w których są jedynym logicznym wyborem.


RancherOS

Każdy proces w RancherOS jest uruchamiany w oddzielnym kontenerze zarządzanym przez Docker. Optymalizacja i zależność od Dockera pozwala RancherOS być bardzo małym z bardzo krótkim czasem rozruchu. Oprócz podstawowych korzyści związanych z wydajnością istnieją jednak czynniki związane z wdrażaniem, które mogą przemawiać na korzyść RancherOS.

Usługi systemowe RancherOS są definiowane i konfigurowane przez Docker Compose. Ta zależność oznacza, że ​​tylko usługi potrzebne dla aplikacji są ładowane i wdrażane, co dodatkowo przyspiesza i upraszcza wdrażanie. Wdrażanie jest ponownie uproszczone dzięki integracji z cloud-init, która umożliwia zautomatyzowaną konfigurację i wdrażanie na szeroką skalę i z dużą szybkością.


CoreOS Container Linux

CoreOS Container Linux jest przeznaczony do wdrażania kontenerów w skali chmurowej. Teraz, jako część Red Hat, Container Linux jest zoptymalizowany pod kątem wdrożeń klastrów w publicznych lub prywatnych infrastrukturach chmurowych.

Container Linux jest wdrażany z jądrem i niezbędnymi narzędziami w jednym pliku wykonywalnym, a wszystkie inne narzędzia i funkcje są wdrażane w kontenerach.

Container Linux jest od dawna w powszechnym użyciu, a wsparcie jest dostępne do wdrażania w większości chmur publicznych. Przejęcie go przez firmę Red Hat nie spowolniło jego wdrażania i sprawiło, że niektóre organizacje są bardziej zadowolone z pomysłu wdrożenia na platformie. Container Linux jest rozpowszechniany z licencją typu open source i ma aktywną społeczność programistów.


Podsumowanie

Biorąc pod uwagę trzy szerokie typy systemów operacyjnych dostępnych do wdrażania kontenerów, który system operacyjny kontenera powinien wybrać zespół programistów? Jeśli jedynym celem konkretnego serwera jest hosting kontenerów, to systemy operacyjne kontenerów, takie jak RancherOS i Container Linux, mają wiele do polecania. Ich automatyzacja, szybkość wdrażania i spójna architektura kontenerów sprawiają, że są one logicznym wyborem dla tych, którzy chcą zoptymalizować środowisko hostingu kontenerów. Po przejściu o jeden poziom w górę do systemów operacyjnych dla samych kontenerów, wybory stają się bardziej zniuansowane.


Kiedy bierzemy pod uwagę zarówno aplikacje kontenerowe, jak i inne niż kontenerowe, nie ma wątpliwości, że tradycyjne wdrożenia Linuksa, takie jak Ubuntu i CentOS, mogą być używane jako platforma kontenerowa. Ich architektura oraz lista narzędzi i funkcji spowodują, że będą wolniej uruchamiać się i będą wymagały więcej zasobów systemowych, ale mogą wykonać zadanie, jeśli szybkość rozruchu i minimalne zużycie zasobów nie są kluczowymi kwestiami.


Pośrodku znajdują się minimalne systemy operacyjne, takie jak BusyBox i Alpine Linux. Mogą to być same w sobie solidne opcje kontenerów, ale naprawdę mogą się przydać, jeśli istnieją ograniczone zasoby aplikacje niebędące kontenerami, takie jak te dla IoT, które również należy uznać za część całego środowiska aplikacji.


Zrozumienie różnicy między możliwościami i ograniczeniami różnych typów systemów operacyjnych ma kluczowe znaczenie dla każdej produktywnej dyskusji na temat platformy systemu operacyjnego. W przypadku nowoczesnych systemów operacyjnych prawdziwa rozmowa nie powinna wtedy dotyczyć tego, który system operacyjny będzie działał, ale który będzie wykonywał pracę najbardziej wydajnie i efektywnie.