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.

9 maja 2020

Clonezilla - narzędzie OpenSource do kopiowania, klonowania dysków i partycji + backupów



W okolicy w roku 2000 kiedy poznawałem na co dzień system FreeDOS, FreeBSD oraz zalążek systemu Linux - a precyzyjniej MINIXa - używałem jeszcze wtedy Windows.

Bardzo wygodnym narzędziem do zamrażania stanu systemu był wtedy Norton Ghost.

Jego głównym zadaniem był backup (kopia) całego obrazu dysku lub partycji systemowej do pliku. Mając taki plik, można było odtworzyć system do stanu z momentu backupu. To nowatorskie narzędzie - jak na tamte czasy działające z własnym GUI w konsoli systemu DOS - pozwoliło po zainstalowaniu systemu obraz w sterowników do niego, zrobić kopię całego obrazu, która mogła być wykorzystywana wielokrotnie. Było to wtedy związane z tym, że rejestr systemu Windows łatwo się zaśmiecał wraz z instalacją oprogramowania.




Po około 20 latach okazało się, że zechciałem zrobić klon dysku inną metodą niż przy pomocy programu disk dump w skrócie dd.

Po drodze sprawdziłem GParted oraz gnome-disks, jednak te narzędzia służą do zarządzania dyskami i partycjami, nie specjalizują się w klonowaniu dysków, czy też partycji.




Jak wiadomo podszedłem do tego od razu tak, że poszukałem oprogramowania otwartego i moim oczom ukazał się obraz systemu operacyjnego Linux pod nazwą Clonezilla - dedykowana dystrybucja Linuxa do klonowania, kopiowania, backupowania dysków i partycji.

Zanim jednak użyłem dedykowanego narzędzie Clonezilla, postanowiłam próbować wykorzystać program disk dump w skrócie dd i zrzucić obraz systemu na którym pracuje.

Wiedziałem że będzie w domu skazane na niepowodzenie ale nie widziałem żadnego komunikatu z kernela Linuksa który zabezpiecza system w takich sytuacjach.

Najprostsze użycie:

dd if=/dev/sda of=/dev/sda bs=16MB



Oczywiście, jak się spodziewacie efektem ubocznym nie był sławetny blue screen, lecz alarm z jądra systemu Linux dotyczący naruszenia obszarów, które mapują fizyczny dysk na logiczny File system. Poniżej zrzut ekranu wraz z komunikatem:




Na tyle mi wystarczyło rozgrzewki potwierdzającej, że w systemie Linux są zabezpieczenia, które nie pozwalają w trakcie działania żywego systemu robić klon dysku. Na pewno nie taką prymitywną metodą z użyciem polecenia dd.

Każdy eksperyment daje nam pewność w hipotezie, którą sobie stawiamy. Ja zakładałem, że tak właśnie się to powinno zakończyć i wróciłem do softu Clonezilla.



Jak przebiega proces klonowania dysku z użyciem Clonezilla?

Na początku warto zorientować się, jakie oznaczenia w /dev mają dyski, które podłączyliśmy fizycznie do komputera. Ja wykorzystywałem adapter serwisowy dla dysku docelowego, źródłowy był w komputerze zamontowany.

Polecenia Linuxa, które odsłania nam listę urządzeń dyskowych to:


df -h - pokazuje dyski, partycje wraz z zajętością oraz podmontowane

lsblk - pokazuje urządzenia przenośne, pendrive lub karty SD

lsusb - pokazuje, czy nasz kabelek lub narzędzie do podłączenia dysku na USB jest widoczne.


Oczywiście warto wspomnieć o poleceniu dmesg, dzięki któremu w logu systemowym zobaczymy fakt fizycznego podłączenia dysku oraz nadaną ścieżkę dla dysku np: /dev/sdb.


Na wstępie pobieramy obraz systemu ISO dla Clonezilla z oficjalnej strony.

Po czym używając np: dd lub gnome-disks zapisujemy na pendrive lub innym dysku obraz z systemem backupującym Clonezila, z którego następnie uruchamiamy komputer. Naszym oczom pojawia się taki komunikat i po wybraniu w konfiguracji właściwych opcji (źródłowy dysk, docelowy dysk, czy kopiujemy MBR) wygląd klonowania przedstawiają poniższe zdjęcia:













Dla dysku źródłowego SSD na docelowy 320GB 5400 WD BLUE, proces trwał ok. 45 minut, na laptopie DELL z 4 core CPU i 16GB RAM.


Po wykonaniu klona, restartu i uruchomeniu z laptopa ze sklonowanego dysku, po ok. 10 minutach cały system wystartował pomyślnie i można go używać bez żadnych problemów.

Polecam narzędzie Clonezilla jako świetne i wygodne narzędzie warsztatowe do backupów dysków. Oczywiście, o czym nie wspomniałem, tak jak Norton Ghost to narzędzie potrafi zapisać obraz dysku do pliku, a nawet wykonywać przyrostowe backupy.

Warto nadmienić, że Clonezilla można zainstalować niezależnie oraz uruchomić z dysku jako Clonzilla Live, w powyżej opisanym przypadku używałem wersji Live z odrębnego dysku.

Jest jeszcze jedna ważna kwestia - Clonzilla potrafi zaszyfrować plik backupem :-) Powodzenia podczas buckupowania lub / i klonowania dysków / partycji.

19 marca 2020

Identicon, avatar, robohash i inne graficzne reprezentacje danych

Widzieliście nieraz ikonki generowane z automatu i być może zastanawia Was, czym są, jak powstają, czy ich ilość jest skończona. W tym wpisie postaram się nakreślić ogólnie zarys koncepcji kilku powszechnych:

Naturalnie w/w identyfikatory można wygenerować sobie przy pomocy kodu OpenSource (linki pod w/w nazwami). To nie jest koniec, jeśli chodzi o eksplorację indenticon, oto lista na githubie do wyników wyszukiwania implementacji identicons w różnych językach programowania.

Rozpocznę kilkoma wygenerowanymi przykładami, które przybliżą, o czym chciałbym tutaj napisać:







Jak niektórzy zdążyli zauważyć najbliższy branży IT identicon to wizualizacja odcisku klucza OpenSSH. Kiedy generujemy klucz, jak pamiętacie pojawia się taka jak w animacji powyżej tekstowa reprezentacja.
Wszelkie identicony mają na celu pokazać w postaci obrazka odcisk/odpowiednik klucza lub napisu, który wprowadza się na wejście.

Jak pewnie niektórzy kojarzą, domyślny avatar w githubie jest właśnie generowany takim sposobem. Projekt WordPress również ma swoje odpowiedniki.
Często mamy sytuację, w której chcemy w łatwy sposób rozróżnić osoby, których tylko imię lub pseudonim znamy - tutaj przydają się identikony. Prawdopodobnie najczęstszymi ich przykładami są różne osoby na różnych platformach dyskusyjnych, takich jak czaty, fora, strony wiki lub systemy śledzenia incydentów/problemów.

Punktem wyjścia do wizualizacji dowolnych danych jest często funkcja skrótu lub z ang. hashowanie. Hashowanie w tym kontekście ma na celu przedstawienie wartości stałej długości na podstawie zmiennej długości danych wejściowych. Ta reprezentacja stałej długości jest tylko dużą liczbą, która może być następnie wykorzystana jako punkt wyjścia do rozróżnienia różnych informacji.

W momencie, kiedy mamy już liczbę możemy w powtarzalny sposób stworzyć reprezentację na jej podstawie. I tak dzięki trickom programistycznym, artystycznej fantazji i oszukiwaniu wzroku można ukrywać ale też przekazywać informację wizualną ludziom. Jest taki dość znaczący rozdział psychologii oraz dziedzin pochodnych t.j. doświadczenie użytkownika (ang. User Experience / UX), gdzie tzw. Pre-attentive Processing jest wykorzystywany. Zakładamy, że człowiek posiada ograniczoną percepcję wzrokową i aparat wzroku działa w sposób specyficzny. To oznacza, że niektórymi cechami obrazu można na odbiór informacji wpływać świadomie lub podświadomie.
Czyli np. bazując na mieszaniu koloru, nasycenia barwy, jasności, formy, położenie przestrzenne i przesunięcia można zbudować dość atrakcyjne wizualizację i ikony. Jest też ogromna dziedzina (ikono)grafiki komputerowej, która bazuje zasadniczo m. in. na tych założeniach.

Z punktu widzenia realizacji i algorytmów używanych w identicons, są to sprytne kilku linijkowe przesunięcia bitów/maskowania/mieszania z losowaniem wartości. Istnieją też opcje losowania elementów identicon z listy kilku obrazków bazowych i składanie w całość t.j. tutaj w MonsterID:



Kolejnym wartościowym przykładem użycia identiconów są portfele wirtualnej waluty (kryptowaluty) Ethereum:



Moim faworytem ze względu na zainteresowanie robotyką oraz atrakcyjny wygląd są RoboHASHe. 
Istnieje wiele gotowych generatorów t.j. np: ten dla RoboHash.



Obliczmy liczbę różnych robotów, które możemy wygenerować:
- Istnieje 5 różnych części ciała
- Istnieje 10 różnych kształtów dla każdej części ciała
- Istnieje 10 różnych kolorów robota
- Istnieje 10 różnych kolorów tła
W sumie to 10⁵ * 10 * 10 = 10 000 000 różnych robotów. 
Nie jest to nawet blisko liczby różnych adresów, która wynosi ~ 2²⁵⁶ = 10⁷⁷. 
Chociaż prawdopodobnie niemożliwe jest wygenerowanie czegoś zbliżonego do 10⁷⁷ różnych, 
dobrze rozpoznawalnych, dobrze zapamiętywalnych identiconów na powierzchni 128x128 pikseli, 
tylko dlatego, że zdolność ludzi do przetwarzania obrazów jest ograniczona. 
Dlatego identicons nigdy nie może być pomiarem bezpieczeństwa 
i nigdy nie zastąpi potrzeby dokładnego sprawdzenia adresu przed potwierdzeniem krytycznego transferu. 
Chociaż ich entropia jest pomijalna w porównaniu do przestrzeni adresowej, 
aby szybko uzyskać przegląd historii transakcji lub rozróżnić własne konta, identicons są bardzo cenne.

Warto zdawać sobie sprawę, że w branży IT potrzeba jest matką wynalazców i tak też w przypadku identiconów było - po prostu ludzie nie wgrywali swoich avatarów/ikonek, przez co pustka została zapewniona twórczością artystów-programistów :-)

Jeśli posiadacie swoje patenty/algorytmy na identicony, zapraszam do umieszczania w komentarzach linków do kodu lub gotowych generatorów.



Materiały: