Która orkiestracja kontenerów jest dla Ciebie najlepsza?

Podczas uruchamiania aplikacji kontenerowych przed zespołami informatycznymi (IT) pojawia się wiele możliwości, uwzględniających wszystkie poziomy wiedzy technicznej.

Wybór jednego może być trudny, biorąc pod uwagę, że po dokonaniu wyboru prawdopodobnie nie będziesz migrować do innej opcji w najbliższym czasie.

Ten post porównuje dwie ważne opcje: Amazon Elastic Container Service (ECS) i Kubernetes.

Obie są wydajnymi platformami w domenach orkiestracji kontenerów i zarządzania mikrousługami. A tuż przed przejściem dalej odświeżenie na pojemnikach nie zaszkodzi. Kontenery zostały spopularyzowane w celu ułatwienia tworzenia, promowania i wdrażania kodu w wielu środowiskach. Są to abstrakcje na warstwach aplikacji, opakowujące kod z niezbędnymi zależnościami, bibliotekami i ustawieniami środowiska w pakiet wykonywalny.

Podczas gdy głównym celem korzystania z kontenerów jest uproszczenie procesu wdrażania kodu, zarządzanie tysiącami kontenerów staje się coraz większym wyzwaniem. Potrzebny jest inny mechanizm do wdrażania wysoce niezawodnych wdrożeń, skalowania aplikacji zgodnie z obciążeniem, wymiany niezdrowych kontenerów na nowe, równoważenia obciążenia i udostępniania portów.

Tutaj z pomocą przychodzi orkiestracja kontenerów. Oprócz tego potrzebne są środki do obsługi kontenerów i zarządzania ich ogólną infrastrukturą. Dostępnych jest wiele narzędzi do rozwiązania tego problemu, ale ograniczmy się do kilku.

Ten artykuł porównuje ECS i Kubernetes, podkreślając zalety każdego z nich, i kończy się wskazówką dotyczącą wyboru właściwego na podstawie twojego projektu.

Co to jest Amazon ECS?

Amazon ECS to usługa orkiestracji kontenerów, która usprawnia wdrażanie, zarządzanie i skalowanie aplikacji kontenerowych. Zasadniczo definiujesz swoją aplikację i jej wymagane zasoby. Następnie Amazon ECS uruchamia, monitoruje i skaluje Twoją aplikację w różnych opcjach obliczeniowych, jednocześnie umożliwiając integrację innych potrzebnych usług AWS. Na przykład możesz sprawdzić stan i programowo zmodyfikować swoje klastry.

ECS umożliwia wdrażanie aplikacji za pośrednictwem grupy serwerów, zwanych klastrami, przy użyciu definicji zadań i wywołań interfejsów aplikacji (API).

Przeczytaj także: Jakich instancji AWS EC2 powinieneś użyć?

Zalety Amazon ECS

  • Tradycyjny ECS – Ta wersja została uruchomiona w 2015 roku i jest zasilana przez Amazon EC2, aby łatwo uruchamiać kontenery Dockers w chmurze. Tradycyjny ECS zapewnia podstawową kontrolę nad opcjami EC2, pozwalając na elastyczność. Oznacza to, że wybierasz typy instancji, które chcesz uruchomić w swoim kontenerze. Model dodatkowo łączy Cię z innymi usługami AWS, których możesz używać do monitorowania i rejestrowania aktywności w instancjach EC2.
  • Fargate ECS – wydany w 2017 r. do uruchamiania kontenerów bez konieczności zarządzania podstawowymi opcjami obliczeniowymi EC2. Fargate stosuje inne podejście, obliczając wymagany procesor i pamięć. Jeśli chcesz szybko uruchamiać obciążenia, może to być najlepsza opcja, ponieważ nie musisz się martwić o podstawowe opcje obliczeniowe.
  • Uproszczone architektury aplikacji — ECS to dobra opcja dla aplikacji z niewielką liczbą mikrousług (takich, które mają niewiele zależności zewnętrznych lub mają kilka ruchomych części) działających niezależnie.
  • Łatwe monitorowanie i rejestrowanie — możesz łatwo zintegrować ECS z narzędziami do rejestrowania i monitorowania AWS, takimi jak CloudWatch. Nie musisz konfigurować widoczności obciążeń kontenerów, co pozwala zaoszczędzić trochę czasu.
  • Łatwa krzywa uczenia się – ECS jest łatwy do nauczenia. Hostowany Kubernetes zyskuje większą popularność niż tradycyjne modele, takie jak smaki KOPS i Kubeadm.
  • Infrastruktura bezserwerowa – ECS umożliwia uruchamianie kontenerów bez konieczności zarządzania maszynami wirtualnymi; wdraża kontenery, będąc wolnym od interwencji człowieka.
  • Wbudowane zabezpieczenia – domyślnie Amazon ECS jest zabezpieczony i kaskadowo stosuje środki bezpieczeństwa poprzez izolowany mechanizm sieciowy Virtual Private Cloud.
  • Ograniczenia ECS

  • Ograniczona pamięć masowa – pamięć zewnętrzna jest ograniczona wyłącznie do Amazon, aż do Amazon EBS.
  • Ograniczenia dotyczące walidacji – ECS jest produktem opartym na Amazon, dlatego jest niedostępny dla publicznych wdrożeń poza Amazon.
  • Uzależnienie od dostawcy – ECS jest stronniczy; może zarządzać tylko utworzonymi przez siebie kontenerami.
  • Niedostępność kodu ECS – Znaczna część kodu ECS nie jest publicznie dostępna. Narzędzia takie jak AWS Blox (platforma do tworzenia niestandardowych harmonogramów) mają bardzo małą część swoich baz kodu jako open source.
  • Co to jest Kubernetes?

    Kubernetes, powszechnie nazywany K8s, to oprogramowanie typu open source do automatyzacji wdrażania, skalowania i administrowania aplikacjami kontenerowymi.

    Wykorzystując 15 lat doświadczenia w obsłudze obciążeń produkcyjnych Google (łącząc najlepsze pomysły i praktyki społeczności), K8s grupuje kontenery aplikacji w jednostki logiczne, które można łatwo odkrywać i którymi można zarządzać.

    Ponadto podstawowe funkcje K8s, takie jak równoważenie obciążenia, trwała pamięć masowa, automatyczne wycofywanie aplikacji kontenerowych, sekrety, samonaprawianie klastrów Kubernetes i zarządzanie konfiguracją.

    Przeczytaj także: Pierwsze kroki z Kubernetes: wprowadzenie dla początkujących

    Zalety Kubernetesa

  • Open source (bez uzależnienia od dostawcy) — niezależnie od tego, czy działa lokalnie, czy w chmurze, możesz używać Kubernetes bez zmiany architektury strategii orkiestracji. W przeciwieństwie do tradycyjnego oprogramowania, które wiąże się z pewnymi opłatami licencyjnymi, K8s jest darmowy i ma otwarte oprogramowanie. Jakby tego było mało, klastry K8 działają w chmurach publicznych i prywatnych, zapewniając zasoby wirtualizacji na obu podmiotach.
  • Wysoka elastyczność — K8s to doskonałe rozwiązanie, jeśli Twoje aplikacje wymagają wysokiej dostępności przy jednoczesnym wspieraniu wydajności i skalowalności. Ta cecha jest taktycznie przydatna w aplikacjach generujących wysokie przychody. Mówiąc najprościej, jest to szczegółowa kontrola nad obciążeniami. W przypadkach, gdy chcesz przełączyć swoje aplikacje na bardziej wydajne platformy, K8s nie ogranicza się do blokad dostawców, takich jak ECS.
  • Wysoka dostępność – jak wspomniano powyżej, projekt K8 jest nastawiony na zapewnienie dostępności aplikacji i ich potrzebnej infrastruktury, co czyni go niezbędną funkcją dla kontenerów w trakcie produkcji. W przypadku wysokiej dostępności istnieje kilka technik:
    • Kontrole kondycji i samonaprawianie – Kubernetes chroni Twoje aplikacje przed awariami poprzez regularne inspekcje węzłów. Jeśli kapsuła lub pojemnik zostanie zgnieciony z powodu błędu, K8s automatycznie korzysta z zamiennika.
    • Równoważenie obciążenia i kierowanie ruchu – jeśli chodzi o kierowanie ruchu, K8 będą wysyłać żądania tylko do odpowiednich kontenerów. A dzięki równoważeniu obciążenia K8s rozdziela obciążenia między pody, równoważąc zasoby dla kilku przypadków, takich jak przerwy w działaniu, przypadkowy szczytowy ruch lub przetwarzanie wsadowe. Ponownie, jeśli chcesz, możesz także użyć zewnętrznych systemów równoważenia obciążenia.
  • Skalowalność obciążenia — chociaż wspomniano powyżej, podzielmy to dalej. K8s wykorzystuje swoje zasoby, aby zapewnić efektywne skalowanie w następujących kryteriach.
    • Automatyczne skalowanie — ta funkcja umożliwia automatyczne dostosowywanie liczby uruchomionych kontenerów zgodnie z wykorzystaniem procesora i innymi wskaźnikami procesora.
    • Skalowanie ręczne – Za pomocą tej funkcji możesz skalować liczbę uruchomionych kontenerów za pomocą wiersza poleceń lub interfejsu.
    • Kontroler replikacji — to narzędzie umożliwia określenie liczby podów, które pasują do specyfikacji klastra; jeśli jest ich mało, zaczyna się od nowa, a jeśli jest ich zbyt wielu, kończy je.
  • Zaprojektowany do wdrożenia — K8s został specjalnie zaprojektowany, aby przyspieszyć proces tworzenia, testowania i dostarczania oprogramowania. Oto niektóre z oferowanych funkcji:
    • Automatyczne wycofywanie i wdrażanie — możesz chcieć wdrożyć nowe konfiguracje lub aktualizacje aplikacji podczas opracowywania. K8s pozwala na realizację procesu bez przestojów aplikacji. W przypadku awarii K8 automatycznie przywracają poprzednią wersję.
    • Wdrożenia Kanaryjskie — możesz skorzystać z tej funkcji, testując nowe wdrożenia w środowisku produkcyjnym równolegle do poprzedniej wersji; K8s umożliwia zmniejszanie ostatniej wersji aplikacji przy jednoczesnym zwiększaniu najnowszej wersji.
    • Zróżnicowana obsługa języków programowania i frameworków — niezależnie od tego, czy znasz języki programowania Go, Java czy .Net, Kubernetes obsługuje wiele języków programowania i frameworków. Jeśli aplikacja może działać na kontenerze, działa na K8.
  • Wykrywanie usług — każdy programista chce, aby wszystkie świadczone usługi miały sposób komunikowania się ze sobą. Jednak model działania K8s polega na ciągłym tworzeniu i niszczeniu kontenerów, co powoduje, że niektóre usługi nie istnieją w poszczególnych lokalizacjach. W tradycyjnym rozwoju rejestr usług byłby przystosowany do śledzenia lokalizacji tych usług. K8s rozwiązuje ten problem poprzez natywną koncepcję usług, która umożliwia grupowanie zasobników i bezproblemowe wykrywanie usług. Tak więc K8s zapewnia adresy IP dla wszystkich podów, przydziela nazwy DNS dla każdego zestawu podów, a następnie równoważy ruch ładowania w każdym zestawie podów. Ta architektura generuje środowisko, w którym wykrywanie usług jest wyodrębniane z każdego kontenera.
  • Tętniąca życiem społeczność – K8s jest wspierana przez tętniącą życiem społeczność z tysiącami programistów korzystających z jej usług. W chwili pisania tego tekstu ponad 100 milionów programistów używa K8 do odkrywania, wnosząc 330 milionów projektów. Społeczność nie wykazuje oznak spowolnienia i zachęca do współpracy między programistami.
  • Ograniczenia Kubernetesa

  • Stroma krzywa uczenia się — Aby rozpocząć pracę z Kubernetes, musisz zrozumieć jego krajobraz. Poza tym dostarczenie kompleksowego rozwiązania wymaga uwzględnienia różnych technologii i usług. A ponieważ technologie uzupełniające znacznie się różnią (czasami niektóre rozwiązania pochodzą z dominacji systemu UNIX, podczas gdy inne są nowymi technologiami o niskim stopniu rozpowszechnienia), zastanawianie się, które z nich uwzględnić, może być gorączkowe. Musisz także dowiedzieć się, w jaki sposób wszystkie komponenty pasują do siebie, aby zapewnić bardziej kompleksowe rozwiązanie poszczególnych problemów. Dokumentacja jest dostępna, ale musisz zrozumieć, jak świadczyć te usługi i zarządzać nimi.
  • Rozróżnianie funkcji i projektów — Zrozumienie różnic między projektami i funkcjami może być trudne. Chociaż możesz łatwo uzyskać porady dotyczące zarządzania projektami, możesz nie uzyskać wyraźnego rozróżnienia między funkcjami a projektami społecznościowymi.
  • Wiedza wykraczająca poza Kubernetes – Kubernetes to zaawansowana platforma. Przy całej tej złożoności dostarczania rozwiązań prawdopodobnie napotkasz pewne zamieszanie, zwłaszcza jeśli jesteś w tym nowy. Jednak organizacje nadal chcą dostarczać rozwiązania (takie jak magazyny danych jako usługa), wzmacniając krzywą uczenia się. Jeśli korzystasz z takich usług w swoim produkcie, musisz poszerzyć swoją wiedzę poza Kubernetes.
  • Zarządzanie Kubernetes jest trudne – Dotarcie do środowiska produkcyjnego z K8s to jedno. Będziesz musiał zapewnić wszystkie wymagane zasoby, aby Twoje aplikacje mogły nim zarządzać. Będziesz także musiał obsłużyć wszystkie zabezpieczenia i zintegrować je ze swoją infrastrukturą. Będziesz także potrzebować wiedzy specjalistycznej na wysokim poziomie, aby skutecznie przetwarzać i obsługiwać jego narzędzia. Będziesz potrzebować dogłębnej wiedzy, aby zarządzać klastrami Kubernetes, monitorować i rozwiązywać problemy z klastrami oraz wspierać je na dużą skalę.
  • Porównanie ECS i Kubernetes

    Oto bezpośrednie porównanie pokazujące różnice:

    RóżnicaKubernetesAmazon ECSADefiniowanie aplikacjiAplikacje są wdrażane poprzez łączenie podów, węzłów i usług.Wdrażanie aplikacji ma formę zadań. Zadania to instancje kontenerów – na przykład kontenery Docker działające na instancjach ECS. Wdrażanie Skomplikowane, ponieważ musisz ręcznie wdrażać i konfigurować klastry. Łatwe wdrażanie za pomocą konsoli AWS. Obsługa węzłów (liczba maszyn) 5000 węzłów na klaster. 1000 węzłów na klaster .KonteneryDo 300 000 kontenerów na klaster.Ograniczenie ze względu na wykorzystywaną pojemność infrastruktury.Równoważenie obciążeniaPody są udostępniane przez usługi używane jako równoważniki obciążenia za kontrolerami ruchu przychodzącego.Dostępne dwa równoważniki obciążenia; ELB-Application lub Network.PricingFree.ECS jest bezpłatny, ale trzeba zapłacić za zasoby EC2.OptymalizacjaDobrze zoptymalizowany dla jednego dużego klastra.Wstępnie skonfigurowany z wymaganiami i wymaganiami dotyczącymi kontenerów.Autoskalowanie Definiujesz parametry autoskalowania podczas budowania wdrożeń.Korzystasz z usług monitorowania, takich jak CloudWatch do automatycznego skalowania na podstawie procesora, pamięci i parametrów niestandardowych.Kontrola kondycji Dostępne są dwie kontrole kondycji: gotowość i żywotność.Osiągane dzięki usługom monitorowania, takim jak CloudWatch.Wykrywanie usługWprowadzane za pomocą zmiennych środowiskowych lub DNS.Osiągane za pomocą usług monitorowania — CloudWatch.Vendor-lock wNie.Tak.

    Przypadki użycia ECS i Kubernetes

    Oto jak technologia konteneryzacji ECS i Kubernetes rewolucjonizuje branże:

    ECS INC International podkreśla liczne przypadki użycia, w których technologia ECS została wdrożona. W nowoczesnych urządzeniach medycznych znajdziesz zrewolucjonizowane metody leczenia pacjentów i techniki podawania leków. Istnieje wiele narzędzi, takich jak elektroniczne inhalatory, medyczne automatyczne wstrzykiwacze i pompy infuzyjne.

    W domenie IoT mamy inteligentne urządzenia domowe. Jeśli przeniesiesz uwagę na przemysł motoryzacyjny, mamy inteligentne samochody elektryczne, które zapewniają lepsze wrażenia z jazdy i ulepszone środki bezpieczeństwa, takie jak wspomagane układy hamulcowe.

    Jak dotąd to wierzchołek góry lodowej; możesz sprawdzić więcej zastosowań ECS, które nie ograniczają się do technologii bezprzewodowych, urządzeń do noszenia i zastosowań przemysłowych.

    Z drugiej strony Kubernetes ma swój udział w praktycznych zastosowaniach. Po pierwsze, chmura IBM oferuje funkcje prywatne, publiczne i hybrydowe w szerokim zakresie środowisk wykonawczych.

    Spotify, gigant w dziedzinie strumieniowego przesyłania muzyki, wykorzystuje technologię Kubernetes, aby ułatwić bezproblemowe operacje, do 10 milionów żądań na sekundę. Chociaż są to rzeczywiste przypadki użycia, K8s obsługuje więcej funkcji w architekturze mikrousług, natywnych funkcjach sieciowych w chmurze, uczeniu maszynowym i przestawianiu cyklu życia oprogramowania.

    Ostatnie słowa

    Po przejrzeniu tego przewodnika masz solidny przegląd zalet i wad wyboru ECS lub K8. Kluczem do wyboru właściwej opcji jest kilka argumentów. Będziesz musiał rozważyć koszty, ograniczenia usług i koszty talentów.

    Jeśli chcesz skorzystać z bezpłatnej usługi, K8s będzie Twoim wyborem numer jeden. Będziesz jednak potrzebował solidnego talentu lub umiejętności, aby poradzić sobie ze złożonością, która się z tym wiąże. Chociaż K8s nie ma ograniczeń związanych z uzależnieniem od dostawcy, będzie wymagać dogłębnego zrozumienia działania platformy. Z drugiej strony ECS ma szybkie konfiguracje.

    Następnie zapoznaj się ze szczegółowym przewodnikiem na temat Kubernetes vs. Docker.