Kontenery i Kubernetes to bardzo gorące tematy, bo pozwalają programistom skupić się na swoich aplikacjach, bez zamartwiania się o infrastrukturę, na której zostaną dostarczone. Pomimo iż OpenStack nie zastąpił AWS, jest to niewątpliwie udane rozwiązanie w przestrzeni otwartej infrastruktury. Oto, co powinieneś o nich wiedzieć i dlaczego są dla siebie ważne.

O co chodzi z kontenerami?

Jeśli siedzisz w branży IT dłużej niż kilka ostatnich lat, koncepcja kontenerów nie powinna być ci obca, bo mówi się o tym od początku tego millennium. Jednak koncepcja naprawdę zaczęła zyskiwać popularność w 2014 roku wraz z wydaniem Docker 1.0 – a hasło stało się rzeczywistością.

Mówiąc w skrócie, kontenery to technologia, która pozwala programistom szybko tworzyć gotowe do użycia autonomiczne aplikacje z podziałem na komponenty, które mogą być uruchamiane, testowane i aktualizowane niezależnie od siebie. Umożliwia także stworzenie w pełni funkcjonalnego środowiska programistycznego do pracy z innymi komponentami aplikacji lub systemu.

Aby lepiej zrozumieć istotę tej nowej technologii, warto ją porównać z platformami maszyn wirtualnych. Podczas gdy hypervisor wykorzystuje całe urządzenie, kontenery tworzą abstrakt jądra systemu operacyjnego. Oznacza to, że kontenery nie wymagają bezpośredniego dostępu do fizycznego sprzętu. Dzięki temu pozwalają na znacznie mniejsze zużycie zasobów i znacznie lepszą ekonomikę – jest to jedna z głównych różnic między kontenerami a maszynami wirtualnymi.

Słychać czasem głosy, że tworzenie i uruchamianie kontenerów było możliwe zanim pojawił się Docker, ale wymagało wielu hacków i było koszmarem. Piękno Dockera polega na tym, że ułatwił on konteneryzację. Oznacza to, że wszystko sprowadza się do kilku poleceń.

Korzyści z używania kontenerów

  1. Łatwość użycia
    Kontenery pozwalają programistom, administratorom systemów, architektom i praktycznie każdemu tworzyć pakiety na swoim laptopie i uruchamiać je w niezmienionej postaci w dowolnej publicznej lub prywatnej chmurze. Przyspiesza to cykl DevOps, umożliwia superszybkie wdrażanie nowych usług w dowolnym miejscu, a ostatecznie ułatwia życie wszystkim użytkownikom kontenerów.
  2. Szybkość i wydajność
    Ze względu na fakt, iż kontenery są izolowanymi jednostkami kodu działającymi na jądrze systemu operacyjnego, są bardzo lekkie, bo biorą mniej zasobów. Tak więc, gdy programiści chcą utworzyć i uruchomić nowy kontener na platformie Docker, mogą to zrobić w ciągu kilku sekund, podczas gdy tworzenie i uruchamianie maszyn wirtualnych może potrwać dłużej, ponieważ muszą one za każdym razem uruchamiać pełny wirtualny system operacyjny.
  3. Modularność i skalowalność
    Kontenery ułatwiają rozbicie funkcjonalności aplikacji na poszczególne komponenty. Na przykład, programista może chcieć, aby jego baza danych MongoDB działała w jednym kontenerze, a jego serwer RabbitMQ w innym, podczas gdy jego aplikacja Ruby znajduje się w jeszcze innym kontenerze. Docker łączy te kontenery, tworząc aplikację, co ułatwia skalowanie lub w przyszłości aktualizowanie komponentów niezależnie od siebie.

Nic dziwnego, że wszyscy są zainteresowani wykorzystaniem Dockera tak szybko jak to możliwe, ale bez względu na to, jak użyteczne są kontenery, bez odpowiedniego systemu zarządzania, ich korzyści nie zostaną w pełni wykorzystane.

Kubernetes wita

Pierwotnie stworzony przez Google, Kubernetes 1.0 został wydany w 2015 roku. Wkrótce potem, Google nawiązało współpracę z Linux Foundation, aby stworzyć Cloud Native Computing Foundation (CNCF) i przekazało Kubernetes jako technologię seed dla organizacji. Podstawowym celem CNCF jest promowanie technologii kontenerów.

Kubernetes znany także jako K8s (nazwa powstała w analogiczny sposób jak I14N dla internacjonalizacji, czy L10N dla lokalizacji), to oprogramowanie zarządzające klastrami typu open-source do uruchamiania i zarządzania kontenerami Dockera na dużą skalę. Pozwala to programistom skupić się na swoich aplikacjach i nie martwić się o podstawową infrastrukturę, która je dostarcza. Kubernetes może działać na wielu platformach w chmurze publicznej, takich jak AWS, GCE czy Azure, na bazie struktury Apache Mesos, a nawet lokalnie na Vagrant (wykorzystanego do VirtualBox, Hyper-V, AWS czy innych platform wirtualizacji).

O co chodzi z Kubernetes?

Aby lepiej zrozumieć istotę oprogramowania zarządzającego klastrami, wyobraź sobie, że masz ważną aplikację biznesową działającą na wielu węzłach z setkami kontenerów. W świecie bez Kubernetesa, musisz ręcznie aktualizować dziesiątki czy setki kontenerów za każdym razem, gdy zespół wprowadzi nową funkcję aplikacji. Wykonanie tego ręcznie zajmuje dużo czasu i jest podatne na błędy, a ty doskonale wiesz, czym są błędy dla biznesu.

Kubernetes został zaprojektowany w celu zautomatyzowania uruchamiania, skalowania i obsługi kontenerów aplikacji. Klasyfikuje on ściśle powiązane kontenery aplikacji do grup funkcjonalnych, pods, w celu łatwego zarządzania i wykrywania. Ponad infrastrukturą pod-ów, Kubernetes zapewnia kolejną warstwę, która pozwala na planowanie i zarządzanie usługami kontenerów. Ale w jaki sposób kontener wie, na którym komputerze ma wystartować? Kubernetes sprawdza to w harmonogramie. Co się stanie, jeśli kontener się zawiesi? Kubernetes tworzy nowy. Za każdym razem, gdy potrzeba wdrożyć nową wersję aplikacji, Kubernetes dba o wdrożenie, automatyzuje i upraszcza codzienną pracę z kontenerami.

Korzyści z używania Kubernetesa

  1. Jest przenośny
    Filozofię tworzenia aplikacji w chmurze można podsumować jednym słowem – przenośność. To naczelne hasło CNCF, więc przenośność jest również główną cechą Kubernetesa, która eliminuje blokowanie infrastruktury i zapewnia programistom pełną elastyczność w uruchamianiu Kubernetesa na dowolnej infrastrukturze i w dowolnej chmurze.
  2. Jest rozszerzalny
    Rozszerzalność była jednym z podstawowych założeń podczas projektowania Kubernetesa, więc daje on wolny wybór przy wyborze systemów operacyjnych, środowisk wykonawczych kontenerów, silników pamięci, architektur procesorów lub platform chmurowych. Pozwala także programistom integrować własne aplikacje w API Kubernetes, a także skalować lub wdrażać nowe innowacyjne funkcje za pomocą narzędzi Kubernetes.
  3. Jest samonaprawczy
    Kubernetes nieustannie monitoruje kontenery i dokonuje napraw, chroniąc swoją kontenerową aplikację przed wszelkimi błędami, które mogą wpływać na niezawodność. W ten sposób zmniejsza obciążenie operatorów i poprawia ogólną niezawodność systemu. Poprawia to również szybkość rozwoju oprogramowania, ponieważ czas i praca, którą developerzy poświęcaliby na rozwiązywanie problemów, mogą zostać wykorzystane na rozwój nowych lub ulepszanie istniejących funkcji.

Hej! Jestem OpenStack i praca ze mną nie należy do najłatwiejszych

Jeśli dotąd OpenStack nie obił się o twoje uszy, to w wielkim skrócie jest to otwarty system operacyjny w chmurze, wykorzystywany do tworzenia środowisk prywatnych i publicznych chmur. Składa się z wielu współzależnych mikroserwisów i zapewnia gotową do produkcji warstwę IaaS (Infrastructure as a Service) dla aplikacji i maszyn wirtualnych. Monitorowanie OpenStacka jest jednym z priorytetów Dynatrace.

Skomplikowany pomimo wielu nakładów, OpenStack ma obecnie około 60 komponentów, określanych również jako „usługi”, z których sześć to podstawowe komponenty, kontrolujące najważniejsze aspekty chmury. Istnieją również komponenty obliczeniowe, do tworzenia sieci i zarządzania pamięcią masową w chmurze, obsługi tożsamości, a także zarządzania dostępem. Dzięki temu projekt OpenStack ma na celu stworzenie otwartej alternatywy dla wielkich dostawców usług w chmurze, takich jak AWS, Google Cloud, MS Azure czy DigitalOcean.

Przyczyny gwałtownego wzrostu popularności OpenStack są dość proste. Ponieważ oferuje oprogramowanie typu open source dla firm, które chcą wdrożyć własną infrastrukturę chmury prywatnej, jest ona silna tam, gdzie większość publicznych platform chmury jest słaba. Być może największą zaletą korzystania z OpenStack jest interfejs API neutralny dla dostawcy. Otwarty interfejs API usuwa problem zastrzeżonego, pojedynczego dostawcy, który blokuje firmy i zapewnia maksymalną elastyczność w chmurze.

OpenStack i Kubernetes mogą być świetną kombinacją ponieważ rozwiązują podobne problemy, ale na różnych warstwach stosu. Używając ich razem, zespoły DevOps mogą mieć więcej swobody w tworzeniu natywnych aplikacji w chmurze niż kiedykolwiek wcześniej.

Ale czy…

Kontenery + Kubernetes + OpenStack są platformą przyszłości?

Obserwujemy, że niezależnie od tego, jak ważne są dla naszych klientów bezpieczeństwo i kontrola, niekoniecznie chcą oni używać tylko OpenStack. Można bowiem uzyskać o wiele więcej:

  • łatwość wdrożenia (oczekiwana od dostawców chmury publicznej);
  • zarządzanie i kontrola (oczekiwana od chmur prywatnych);
  • efektywność kosztową (oczekiwana wszędzie);
  • elastyczność wyboru najlepszego miejsca do uruchomienia dowolnej aplikacji;
  • skalowalność;
  • niezawodność;
  • bezpieczeństwo.

Najczęściej, firmy większe od startupów chcą korzystać z „hybrydowych” możliwości. Chcą kontrolować infrastrukturę lokalną, ale w razie potrzeby skalować ją do chmury publicznej. Wiemy jednocześnie, że nie zawsze jest tak łatwo w pełni czerpać korzyści z hybrydowych scenariuszy. Niestety, przenoszenie obciążeń między infrastrukturami nadal jest dość trudnym zadaniem.

W tym miejscu Kubernetes może być bardzo przydatny, ponieważ obsługuje zarówno chmury prywatne, jak i publiczne. Użytkownicy Kubernetesa mogą uwolnić prawdziwą potęgę hybrydowej infrastruktury.

Powrót do podstaw: kontenery

Pamiętasz nasze rozważania nt. kontenerów na początku artykułu? Ich zalety polegają na tym, że pozwalają:

  • uruchamiać konteneryzowane aplikacje na OpenStack, lub
  • konteneryzować własne usługi OpenStack za pomocą Dockera.

Kubernetes dla odmiany pozwala korzystać z obu tych sposobów.

Korzyści z używania OpenStacka na Kubernetesie

Dzięki świetnej obsłudze natywnych aplikacji w chmurze, Kubernetes może ponownie sprawić, że OpenStack będzie wydajniejszy. Może on włączać aktualizacje i wdrożenia nowych komponentów i funkcji OpenStack, poprawiając w ten sposób ogólne zarządzanie cyklem życia OpenStack. Ponadto, użytkownicy OpenStack mogą korzystać z infrastruktury samonaprawczej, dzięki czemu OpenStack jest bardziej odporny na awarie podstawowych usług i poszczególnych węzłów obliczeniowych. Wreszcie, uruchamiając OpenStack na Kubernetesie, użytkownicy mogą również czerpać korzyści z wydajności zasobów, które są dostarczane z infrastrukturą opartą na kontenerach. Projekt Kolla w ramach OpenStack może być tutaj bardzo pomocny. Zapewnia gotowe do produkcji kontenery i narzędzia do wdrażania chmury OpenStack, które są skalowalne, szybkie i niezawodne.

Korzyści z uruchamiania Kubernetesa na OpenStacku

Poprzez wdrożenie K8 na OpenStacku, użytkownicy Kubernetes uzyskują dostęp do solidnej platformy do wdrażania i zarządzania aplikacjami. Ponieważ coraz więcej przedsiębiorstw wykorzystuje model oparty na chmurze, stają oni przed wyzwaniem zarządzania architekturami hybrydowymi zawierającymi chmury publiczne, prywatne, kontenery i maszyny wirtualne. OpenStack nigdy nie słynął ze swojej interoperacyjności – dla większości jest to zła wiadomość. Wprowadzając kontenery i Kubernetesa, użytkownicy mają swobodę wyboru najlepszego środowiska chmury do uruchomienia dowolnej aplikacji lub części aplikacji, zachowując jednocześnie skalowalność, kontrolę i bezpieczeństwo. Kubernetes może zostać wykorzystany przy użyciu Magnum, usługi API OpenStack, dzięki czemu dostępne są w systemie OpenStack najwyższej klasy zasoby mechanizmów orkiestracji kontenerów. Dzięki temu pod-y Kubernetesa otrzymują wszystkie zalety współdzielonej infrastruktury.

Podsumowanie

Firmy oczekują wielu rzeczy, ale „korzystanie z jednej infrastruktury chmury i bycie w niej zamkniętym” nie jest ich priorytetem. Zamiast tego, chcą czerpać korzyści z chmury publicznej (np. łatwość wdrażania), chmury prywatnej (np. bezpieczeństwo) i bardziej niż kiedykolwiek, chcą szybszego wprowadzenia aplikacji czy usług na rynek. Dlatego coraz częściej zmierzają w kierunku technologii i praktyk opartych na chmurze.
Konfiguracja i efektywne wykorzystanie architektur hybrydowych jest nadal trudnym zadaniem. Większość infrastruktur w chmurze – w tym OpenStack – nie została zaprojektowana, aby umożliwić łatwe przenoszenie obciążeń między nimi.

Jest Docker, który ułatwił wszystkim konteneryzację. Jest Kubernetes, który zautomatyzował pracę z kontenerami. Jest również OpenStack, który zaoferował neutralną dla sprzedawców, bezpieczną, produkcyjną warstwę IaaS dla aplikacji kontenerowych.
Łącząc Dockera, Kubernetesa i OpenStack, przedsiębiorstwa mają szansę w pełni wykorzystać zalety hybrydowych architektur, by osiągnąć większą elastyczność i szybciej wdrażać innowacje.

 

Copyright: Dynatrace

Autor oryginału: Katalin Varga