Co właściwie robi Kubernetes? [Zamknięte]

138

Kubernetes jest rozliczany jako „planista / koordynator ” klastra kontenerów, ale nie mam pojęcia, co to oznacza. Po przeczytaniu witryny Kubernetes i (niejasnej) wiki GitHub, najlepsze, co mogę powiedzieć, to to, że w jakiś sposób określa, jakie maszyny wirtualne są dostępne / mogą obsługiwać twój kontener Docker, a następnie wdraża je tam. Ale to tylko moje przypuszczenie i nie widziałem w ich dokumentacji żadnego konkretnego słownictwa, które by to potwierdzało.

Czym dokładnie jest Kubernetes i jakie konkretne problemy rozwiązuje?

smeeb
źródło
1
Biorąc pod uwagę, że wszystkie projekty w świecie docker-world (kubernetes / fleet / swarm / etc) mają trudności z wyjaśnieniem, co robią i co je wyróżnia, myślę, że my, użytkownicy, możemy zapewnić tylko nieco życzliwe pytanie ... pyta „jaka jest różnica między flotą a kubernetes”, a odpowiedź brzmi „możesz użyć floty do uruchomienia kubernetes”. Porażka. ;-)
Torsten Bronger
5
Myślę, że jest to całkowicie uzasadnione pytanie i wskazuje na pewne niedociągnięcia w dokumencie. Zamknięcie go jako zbyt szerokiego to krzywda. Najlepszym podejściem dla mnie było po prostu pobranie bazy kodu k8s i poszukanie tam, na przykład, aby dowiedzieć się, co to jest pod. To mi bardzo pomogło.
Beezer

Odpowiedzi:

115

Celem Kubernetes jest ułatwienie organizacji i planowania aplikacji w całej flocie maszyn. Na wysokim poziomie jest to system operacyjny dla twojego klastra.

Zasadniczo pozwala nie martwić się o to, na jakim konkretnym komputerze w centrum danych działa każda aplikacja. Ponadto zapewnia ogólne prymitywy do sprawdzania kondycji i replikowania aplikacji na tych maszynach, a także usługi do łączenia aplikacji z mikrousługami, dzięki czemu każda warstwa aplikacji jest oddzielona od innych warstw, dzięki czemu można je skalować / aktualizować / utrzymywać niezależnie.

Chociaż można zrobić wiele z tych rzeczy w warstwie aplikacji, takie rozwiązania są zwykle jednorazowe i kruche, znacznie lepiej jest rozdzielić obawy, gdy system orkiestracji martwi się, jak uruchomić aplikację, a ty martwisz się o kod, który tworzy Twoją aplikację.

brendan
źródło
3
Dzięki @brendan (+1) - Twoja odpowiedź zdecydowanie pomaga. Jedno pytanie uzupełniające: czy to nie jest to, co robi Apache Mesos? Czy Kubernetes i Mesos są dla siebie konkurentami? Jeśli nie, czy można ich używać razem (a jeśli tak, to w jaki sposób)? Dzięki jeszcze raz!
smeeb
2
@smeeb Mesos i Kubernetes uzupełniają się wzajemnie (ten ostatni jest obsługiwany jako framework Mesos). Mesos zapewnia bardziej wyrafinowane zarządzanie zasobami. Innymi słowy Kubernetes pozwala Mesos zdecydować, który host jest używany, na podstawie dostępnej pojemności. Mesos obsługuje inne frameworki. Jeśli przeczytasz dokumenty, zobaczysz, że Marathon to kolejny sposób na uruchomienie kontenerów w klastrze serwerów zarządzanych Mesos.
Mark O'Connor
18

Jak czytasz na jego stronie Github :

Kubernetes to system typu open source do zarządzania aplikacjami w kontenerach na wielu hostach, zapewniający podstawowe mechanizmy wdrażania, konserwacji i skalowania aplikacji.

Kubernetes to:

lean: lightweight, simple, accessible
portable: public, private, hybrid, multi cloud
extensible: modular, pluggable, hookable, composable
self-healing: auto-placement, auto-restart, auto-replication

Kubernetes opiera się na półtorej dekadzie doświadczenia w Google w zakresie obsługi obciążeń produkcyjnych na dużą skalę, w połączeniu z najlepszymi pomysłami i praktykami społeczności.

Dla mnie Kubernetes to narzędzie do orkiestracji kontenerów od Google. Ze względu na jego konstrukcję można zaimplementować kompatybilność z dowolnym silnikiem kontenera, ale myślę, że teraz jest to ograniczone do Dockera. W jego architekturze jest kilka ważnych pojęć:

Kubernetes działa z następującymi koncepcjami:

Klastry to zasoby obliczeniowe, na których są budowane kontenery. Kubernetes może działać wszędzie! Zobacz Przewodniki dla początkujących, aby uzyskać instrukcje dotyczące różnych usług.

Pody to połączona grupa kontenerów Docker ze współdzielonymi woluminami. Są to najmniejsze jednostki, które można wdrożyć, zaplanować i zarządzać nimi za pomocą Kubernetes. Pody można tworzyć indywidualnie, ale zaleca się użycie kontrolera replikacji, nawet jeśli tworzysz pojedynczy pod. Więcej o strąkach.

Kontrolery replikacji zarządzają cyklem życia podów. Zapewniają, że określona liczba zasobników jest uruchomiona w danym momencie, tworząc lub zabijając zasobniki zgodnie z wymaganiami. Więcej informacji o kontrolerach replikacji.

Usługi zapewniają pojedynczą, stabilną nazwę i adres dla zestawu podów. Działają jako podstawowe moduły równoważenia obciążenia. Więcej o usługach.

Etykiety służą do organizowania i wybierania grup obiektów na podstawie par klucz: wartość. Więcej o etykietach.

Masz więc grupę maszyn, która tworzy klaster, w którym są uruchamiane kontenery. Możesz także zdefiniować grupę kontenerów, które dostarczają usługi, w podobny sposób jak robisz to z innymi narzędziami, takimi jak fig (np. Webapp pod może być serwerem railsowym i bazą danych postgres). Masz również inne narzędzia, które zapewniają kilka kontenerów / zasobników usługi działającej w tym samym czasie, magazyn klucz-wartość, rodzaj wbudowanego modułu równoważenia obciążenia ...

Jeśli wiesz coś o coreos, to bardzo podobne rozwiązanie, ale od Google. Algo Kubernetes ma dobrą integrację z Google Cloud Engine.

Javier Cortejoso
źródło
2
Dzięki @jcortejoso (+1) - jednak mam kilka dodatkowych pytań, jeśli nie masz nic przeciwko: (1) mówisz, że Kubernetes jest podobny do CoreOS, ale od Google. Oznacza to, że Kubernetes i CoreOS rozwiązują ten sam problem. Ale z [własnej witryny Kubernetes] () mówi, że możesz zainstalować Kubernetes na CoreOS. Więc co to jest?!? Czy Kubernetes to to samo co CoreOS, czy też Kubernetes działa na CoreOS i rozwiązuje konkretny problem?
smeeb
1
Ponadto (2) nadal nie widzę tutaj wartości w „orkiestracji” Kubernetesa. Twierdzisz, że możesz użyć Kubernetes do zdefiniowania grupy kontenerów, które zapewniają usługę, co spowodowało, że zastanawiałem się nad dwiema osobnymi rzeczami: (2a) nie mógłbym po prostu zrobić tego typu klastrowania w warstwie aplikacji i umieścić moją aplikację za moduł równoważenia obciążenia nginx? I (2b) czy to wszystko, co jest potrzebne do „orkiestracji”? Dla mnie znowu wydaje się, że równoważenie obciążenia można łatwo osiągnąć w warstwie aplikacji. Myśli? Jeszcze raz dziękuję za wspaniałą odpowiedź!
smeeb
1
Jeśli kubernetes jest „lekki”, zastanawiam się, jakie byłoby najlepsze rozwiązanie.
Torsten Bronger
@smeeb Nie jestem zaznajomiony z nginx (więc wybacz moją naiwność), ale nie sądzę, by nginx zrestartował serwer, który uległ awarii; a jeśli maszyna (lub całe centrum danych) ulegnie awarii, nginx nie uruchomi ponownie aplikacji na innym komputerze. kubernetes upewni się, że zawsze masz gdzieś uruchomionych n „podów” i nie ma znaczenia gdzie i jak.
kgreenek
10

Kubernetes zapewnia prawie taką samą funkcjonalność jak interfejsy API Infrastructure as a Service, ale jest ukierunkowana na dynamicznie planowane kontenery zamiast maszyn wirtualnych i jako systemy Platform as a Service, ale z większą elastycznością, w tym:

  • montaż systemów magazynowych,
  • rozpowszechnianie tajemnic,
  • sprawdzanie stanu aplikacji,
  • replikowanie instancji aplikacji,
  • automatyczne skalowanie w poziomie,
  • nazewnictwo i odkrywanie,
  • równoważenie obciążenia,
  • aktualizacje kroczące,
  • monitorowanie zasobów,
  • dostęp do dziennika i przetwarzanie,
  • obsługa introspekcji i debugowania oraz
  • tożsamość i upoważnienie.

Jeśli korzystasz już z innych mechanizmów wykrywania usług, tajnej dystrybucji, równoważenia obciążenia, monitorowania itp., Możesz oczywiście nadal z nich korzystać, ale naszym celem jest ułatwienie przejścia na Kubernetes z istniejących systemów IaaS i PaaS, zapewniając to funkcjonalność.

https://kubernetes.io/docs/concepts/overview/what-is-kubernetes/#why-do-i-need-kubernetes-and-what-can-it-do

genialny
źródło