@iamnat pod warunkiem, naprawdę miłe & zwięzłe wyjaśnienie. Pozwólcie, że spróbuję wyjaśnić nieco więcej szczegółów z pierwszych zasad. Może to być trochę długa i przedstawia pewne uproszczenie, ale powinno wystarczyć, aby ten pomysł był przekonywujący.
maszyny fizyczne
Jakiś czas temu, najlepszym sposobem rozmieszczania prostych aplikacji było po prostu kupić nowy serwer WWW, należy zainstalować swój ulubiony system operacyjny na nim i uruchomić tam swoje aplikacje.
Wady tego modelu są:
Procesy mogą kolidować ze sobą (bo oni dzielić procesora i systemu plików zasobów), a jeden może wpływać na wydajność tego drugiego.
Skalowanie tego systemu w górę/w dół również jest trudne, ponieważ wymaga wiele wysiłku i czasu podczas konfigurowania nowego fizycznego urządzenia.
Mogą występować różnice w specyfikacjach sprzętowych, wersjach systemu operacyjnego/jądra oraz wersjach pakietów oprogramowania maszyn fizycznych, które utrudniają zarządzanie tymi instancjami aplikacji w sposób niezagrażający sprzętowi.
Aplikacje, są bezpośrednio dotknięte przez fizyczne specyfikacji urządzenia, mogą wymagać konkretnego szczypanie, rekompilacji, etc, co oznacza, że administrator klastra musi myśleć o nich jak o wypadkach na poziomie poszczególnych maszyn. Dlatego takie podejście nie jest skalowane. Te właściwości powodują, że niepożądane jest wdrażanie nowoczesnych aplikacji produkcyjnych.
maszyn wirtualnych
Maszyny wirtualne rozwiązać niektóre problemy z powyższym:
- Zapewniają izolację nawet podczas pracy na tej samej maszynie.
- Zapewniają one standardowe środowisko wykonawcze (system operacyjny gościa) niezależnie od podstawowego sprzętu.
- Mogą one zostać przeniesione na inną maszynę (zreplikowane) dość szybko podczas skalowania (kolejność minut).
- Aplikacje zwykle nie wymagają rearchitekcji w celu przejścia z fizycznego sprzętu na maszyny wirtualne.
Ale wprowadzić jakieś własne problemy:
- zużywają duże ilości zasobów w prowadzeniu całej instancji systemu operacyjnego.
- Mogą one nie zacząć/zejść tak szybko, jak tego chcemy (kolejność sekund).
Nawet przy wirtualizacji wspomaganej sprzętem instancje aplikacji mogą powodować znaczne obniżenie wydajności w przypadku aplikacji uruchamianej bezpośrednio na hoście. (To może być problem tylko w przypadku niektórych aplikacji).
Pakowanie i rozpowszechnianie obrazów maszyn wirtualnych nie jest tak proste, jak mogłoby być. (To nie jest tak samo wadą tego podejścia, jak to jest z istniejących narzędzi do wirtualizacji.)
Kontenery
Potem, gdzieś wzdłuż linii, cgroups (control groups) zostały dodane do jądra Linuksa . Ta funkcja pozwala nam izolować procesy w grupach, decydować, jakie inne procesy i system plików widzą, i wykonywać rozliczanie zasobów na poziomie grupy.
Pojawiły się różne środowiska uruchomieniowe i silniki kontenerowe, dzięki którym proces tworzenia "kontenera", środowiska w systemie operacyjnym, podobnie jak przestrzeń nazw, która ma ograniczoną widoczność, zasoby itp., Jest bardzo łatwa. Typowe przykłady obejmują dokowanym, RKT, runC, LXC itp
dokowanym, zawiera na przykład procesem, który przewiduje interakcji takich jak tworzenie "obraz", wielokrotnego użytku jednostkę które można natychmiast uruchomić w pojemniku. Pozwala także intuicyjnie zarządzać poszczególnymi kontenerami.
Zalety pojemników:
- Są lekkie i uruchomić z bardzo małym obciążeniu, ponieważ nie posiadają własną instancję jądra/OS i są wyświetlane w górnej części jednego hosta OS .
- Oferują one pewien stopień izolacji między różnymi pojemnikami oraz możliwość narzucania limitów na różne zasoby zużywane przez nie (za pomocą mechanizmu cgroup).
- Oprzyrządowanie dookoła nich ewoluowało bardzo szybko, aby umożliwić łatwe tworzenie jednostek wielokrotnego użytku (obrazów), repozytoriów do przechowywania rewizji obrazów (rejestrów kontenerów) i tak dalej, w dużej mierze ze względu na dokowanie.
- Zachęca się, aby pojedynczy kontener uruchamiał pojedynczy proces aplikacji, aby go utrzymywać i dystrybuować niezależnie. Lekka natura pojemnika czyni to preferowanym i prowadzi do szybszego rozwoju dzięki rozłączeniu.
Istnieją pewne minusy, a także:
- Poziom izolacji warunkiem jest mniejsza niż w przypadku maszyn wirtualnych.
- Są one najłatwiejsze w użyciu z bezpaństwowymi 12-factor tworzonymi na nowo aplikacjami i niewielkimi problemami, jeśli ktoś próbuje wdrożyć starsze aplikacje, klastrowe rozproszone bazy danych i tak dalej.
- Potrzebują one potrzebują prymitywów orkiestracji i wyższego poziomu do skutecznego wykorzystania w skali.
Pojemnik Orkiestracja
Po uruchomieniu aplikacji w produkcji, jak złożoność rośnie, to wydaje się mieć wiele różnych składników, z których niektóre skalowanie w górę/w dół, jak to konieczne, czy może trzeba być skalowane. Same pojemniki nie rozwiązują wszystkich naszych problemów. Potrzebujemy systemu, który rozwiązuje problemy związane z rzeczywistych zastosowaniach na dużą skalę, takich jak:
- Networking między pojemnikami
- Równoważenie obciążenia
- Zarządzanie magazynowych przyłączonych do tych pojemników
- pojemniki Aktualizacja, ich skalowanie, rozkładanie ich przez węzły w klastrze z wieloma węzłami itd.
Gdy chcemy zarządzać grupą kontenerów, używamy silnika orkiestracji kontenera. Przykładami są: Kubernetes, Mesos, Docker Swarm itd. Zapewniają one wiele funkcji oprócz tych wymienionych powyżej, a celem jest zmniejszenie nakładu pracy w dev-ops.
GKE (Google Pojemnik Engine) jest gospodarzem Kubernetes na Google Cloud Platform. Pozwala to użytkownikowi po prostu określić, że potrzebuje on klastra kubernetes n-węzłów i naraża sam klaster jako zarządzaną instancję. Kubernetes is open source i jeśli ktoś chciał, można go również skonfigurować w Google Compute Engine, innym dostawcy usług w chmurze lub na własnych komputerach w ich własnym centrum danych.
ECS to zastrzeżony system zarządzania/organizowania kontenerów zbudowany i obsługiwany przez Amazon i dostępny jako część pakietu AWS.
1. LXC, systemd-nspawn – user2105103
Dziękujemy! Bardzo pomocne – JL1680