I dlaczego jest taki ważny dla uczenia maszynowego.
Sternik i kontenery
Jeśli śledzisz trendy technologiczne, naukę danych, sztuczną inteligencję czy uczenie maszynowe, prawdopodobnie natknąłeś się na termin Kubernetes (lub K8s). Stworzony przez Google Kubernetes to platforma do orkiestracji (koordynacji) kontenerów typu open source. Nazwa „Kubernetes” pochodzi z języka greckiego i oznacza „sternik” lub „kapitan”. Ale zanim zrozumiemy powód tych wszystkich odniesień morskich, musimy najpierw odpowiedzieć na pytanie: czym są kontenery?
Kontenery to pomysł, który eksplodował w 2013 roku wraz z utworzeniem Dockera. Ich stworzenie było motywowane wieloletnim problemem w tworzeniu oprogramowania - jak sprawić, aby oprogramowanie działało niezawodnie po przeniesieniu z jednego środowiska do drugiego. Takie środowiska mogą obejmować wszystko, od laptopów, serwerów w starym, dobrym, prywatnym centrum danych aż do maszyn wirtualnych w chmurze. Pakowanie aplikacji do kontenera oznacza, że efekt końcowy uruchomienia jej w dowolnym z tych środowisk będzie spójny (taki sam).
Jest to szczególnie ważne, ponieważ organizacje technologiczne odchodzą od monolitycznych wzorców architektury, takich jak architektura zorientowana na usługi (SOA), na rzecz bardziej luźno powiązanych podejść opartych na mikrousługach.
Potrzeba koordynatorów kontenerów
Kontenery rozwiązują dużą część problemu, ale nie są wystarczające, ponieważ są bardziej abstrakcją niż realnym bytem. Aby otrzymać działający produkt, nadal potrzebujemy środowiska wykonawczego kontenera - dodatkowej warstwy do koordynowania i przydzielania odpowiednich zasobów do działających kontenerów. Aby rozwiązać ten problem, ludzie z Docker stworzyli containerd, środowisko wykonawcze kontenera.
[cite]Dlaczego więc nie skorzystać z containerd?[cite] – pewnie się teraz pytasz sam siebie. Tak, możesz uruchomić maszynę wirtualną i użyć Dockera lub Docker Compose, aby uruchomić jeden lub więcej różnych kontenerów. Ale problem polega na tym, że w miarę jak architektury aplikacji stają się coraz bardziej złożone, musimy zarządzać takimi rzeczami, jak:- Niezawodność: nasza aplikacja musi spełniać standardy wydajności i zapewniać prawidłowe wyniki.
- Dostępność: nasza aplikacja powinna być dostępna operacyjnie przez określony procent czasu.
- Skalowalność: powinna istnieć możliwość płynnego skalowania w zależności od obciążenia pracą - najlepiej w sposób zautomatyzowany.
- Ciągłe wdrażanie: chcemy wdrażać nasze zmiany w środowisku produkcyjnym w szybki, ciągły sposób, bez zakłócania istniejących wdrożeń.
Tutaj pojawia się Kubernetes.
Sprawdź oferty pracy na TeamQuest
Morskie opowieści
Wyobraź sobie, że w naszym porcie prowadzimy firmę transportową i musimy rutynowo wysyłać wiele kontenerów do jakiegoś innego portu. Jednym ze sposobów byłoby użycie prostego, małego statku, który jest w stanie przewieźć kilka kontenerów. Jest w stanie szybko się przemieszczać i bezproblemowo przewozić te kontenery. Ma jednak też ograniczenia: niską autonomię (spędzasz więcej czasu na tankowaniu), większą szansa na zatonięcie wraz z pojemnikami oraz małą wagę (może przewozić np. tylko dwa kontenery na raz). Jeśli zamiast tego zdecydujemy się wykorzystać większy, pełnoprawny statek towarowy do przenoszenia naszych kontenerów, możemy to zrobić w znacznie bardziej niezawodny i skalowalny sposób: większa autonomia (mniej czasu spędzonego na tankowaniu), mniejsze prawdopodobieństwo zatonięcia i duża skala (może przewozić jednocześnie setki kontenerów).
Cechy charakterystyczne
Kubernetes jest właśnie takim pełnoprawnym statkiem towarowym. Został stworzony przez Google z myślą o takich podstawowych funkcjach:
- Replikacja - wdrażanie wielu wystąpień aplikacji
- Równoważenie obciążenia i wykrywanie usług - aby kierować ruch do tych replikowanych kontenerów
- Podstawowa kontrola wydajności i naprawa - system „samoleczenia”
- Planowanie - aby grupować wiele maszyn w jedną pulę i przydzielić do nich pracę
Ostatnio firmy zaczęły zdawać sobie sprawę, że w uczeniu maszynowym badania i rozwój odgrywają ogromną rolę. Ale jeśli za mało czasu, budżetu i wysiłku poświęci się na właściwe zaprojektowanie i wdrożenie systemów uczenia maszynowego w niezawodny, dostępny, wykrywalny i wydajny sposób, uzyskanie wszystkich korzyści staje się wyzwaniem. W myśleniu o systemach uczenia maszynowego z nastawieniem inżynieryjnym Kubernetes jawi się jako dobre rozwiązanie, aby sprostać tym wyzwaniom związanym z niezawodnością, dostępnością i czasem wejścia na rynek. Kubernetes zwiększa szanse, że system uczenia maszynowego zapewni oczekiwaną przez ich twórców wartość. Jednak konceptualizacja i wdrażanie architektury Kubernetes nie odbywa się z dnia na dzień, a zarządzanie klastrami Kubernetes wiąże się z dodatkowymi obowiązkami, w zakresie zarządzania, bezpieczeństwa, wsparcia, konserwacji i kosztów.
A o klastrze Kubernetes z Raspberry Pi czytaliście?