Jakie są korzyści z prowadzenia szefa kuchni zamiast serwera szefa kuchni?

33

Patrzę na zautomatyzowane rozwiązania wdrożeniowe dla mojego zespołu i od kilku dni gram z Chefem. Udało mi się uruchomić prostą aplikację internetową z bazy Red Hat VM za pomocą szefa kuchni-solo.

Naszym celem końcowym jest użycie Chef (lub innego systemu) do automatycznego wdrażania topologii aplikacji w chmurze podczas uruchamiania kompilacji. Nasz proces przebiegałby w następujący sposób:

  1. Nasz kod aplikacji internetowej, zależności i książki kucharskie są przechowywane w SCM
  2. Kompilacja jest wykonywana i tworzy jeden pakiet dla obrazów do pobrania i przetestowania
  3. Następnie silnik kompilacji wdraża nowe obrazy w chmurze, które uruchamiają klienta szefa kuchni w celu zainstalowania pakietów.
  4. Obrazy pobierają książki kucharskie z SCM lub serwera Chef i instalują wszystko, aby rozpocząć pracę

Jakie są korzyści i / lub przypadki użycia, aby uruchomić serwer szefa kuchni?

Czy są jakieś ważne korzyści z posiadania serwera szefa kuchni i zdobywania książek kucharskich od SCM w porównaniu do używania szefa kuchni solo i posiadania skryptu, który wyciągnie książki kucharskie z SCM?

linusthe3rd
źródło

Odpowiedzi:

67

Zamierzam zorientować tę odpowiedź tak, jakby pytanie brzmiało „jakie są zalety szefa kuchni-solo”, ponieważ to najlepszy sposób, jaki znam, aby uwzględnić różnice między podejściami.

Moje podsumowanie jest zgodne z innymi: użyj serwera szefa kuchni, jeśli chcesz zarządzać dynamicznym, zwirtualizowanym środowiskiem, w którym często będziesz dodawać i usuwać węzły. Serwer szefa kuchni jest również dobrym CMDB , jeśli go potrzebujesz. Użyj szefa kuchni solo, jeśli masz mniej dynamiczne środowisko, w którym węzły nie zmieniają się zbyt często, ale role i przepisy będą się zmieniać. Wielkość i złożoność środowiska jest mniej lub bardziej nieistotna. Oba podejścia bardzo dobrze się skalują.

Jeśli wdrażasz szefa kuchni solo, użyj cronjob z rsync, „git pull” lub innym idempotentnym mechanizmem przesyłania plików, aby zachować pełną kopię repozytorium szefa kuchni na każdym węźle. Cronjob powinien być łatwo konfigurowalny, aby (a) nie uruchamiał się wcale i (b) działał, ale bez synchronizacji lokalnego repozytorium. Dodaj katalog nodes / do swojego repozytorium szefów kuchni z plikiem json dla każdego węzła. Twoja współpraca z cronjob może być tak wyrafinowana, jak chcesz, jeśli chodzi o identyfikację odpowiedniego pliku węzłów (chociaż zalecałbym po prostu $ (nazwa hosta -s) .json. Możesz także utworzyć konto opscode i skonfigurować klienta z hostowanym szefem kuchni, jeśli nie ma innego powodu niż możliwość korzystania z noża do pobierania społecznościowych książek kucharskich i tworzenia szkieletów.

Podejście to ma kilka zalet, oprócz oczywistego „braku konieczności administrowania serwerem”. Kontrola źródła będzie ostatecznym arbitrem wszystkich zmian konfiguracji, repozytorium obejmie wszystkie węzły i listy uruchomieniowe, a każdy serwer będący w pełni niezależny ułatwi wygodne scenariusze testowania.

Serwer-szef wprowadza dziurę, w której używasz „wysyłania noża”, aby zaktualizować książkę kucharską, i musisz samodzielnie załatać tę dziurę (na przykład za pomocą haka po zatwierdzeniu) lub ryzykować, że zmiany strony zostaną po cichu nadpisane przez kogoś, kto „załaduje nóż” to przestarzały przepis z przestarzałego lokalnego repozytorium na swoim laptopie. Jest to mniej prawdopodobne w przypadku szefa kuchni-solo, ponieważ wszystkie zmiany zostaną zsynchronizowane z serwerami bezpośrednio z głównego repozytorium. Problemem jest dyscyplina i liczba współpracowników. Jeśli jesteś programistą solo lub bardzo małym zespołem, przesyłanie książek kucharskich za pośrednictwem interfejsu API nie jest bardzo ryzykowne. W większym zespole może się tak zdarzyć, jeśli nie wprowadzisz dobrych kontroli.

Dodatkowo, dzięki chef-solo możesz przechowywać wszystkie role, niestandardowe atrybuty i listy runów swoich węzłów jako pliki node.json w głównym repozytorium szefa kuchni. Dzięki serwerowi szefa kuchni role i listy Run są modyfikowane na bieżąco za pomocą interfejsu API. Z szefem kuchni solo możesz śledzić te informacje w ramach kontroli wersji. W tym miejscu wyraźnie widać konflikt między środowiskiem statycznym i dynamicznym. Jeśli twoja lista węzłów (bez względu na to, jak długa może być) nie zmienia się często, bardzo przydatne jest posiadanie tych danych w kontroli wersji. Z drugiej strony, jeśli często odradzasz nowe węzły i niszczysz stare (nigdy więcej nie widzisz nazwy hosta lub fqdn), utrzymywanie tego w kontroli wersji jest po prostu niepotrzebnym kłopotem, a posiadanie API do wprowadzania zmian jest bardzo wygodne. Serwer-szef kuchni ma również całe funkcje ukierunkowane na zarządzanie dynamicznymi środowiskami chmurowymi, takie jak opcja nazwy w „nożowym bootstrapie”, która pozwala zastąpić fqdn jako domyślny sposób identyfikacji węzła. Ale w środowisku statycznym funkcje te mają ograniczoną wartość, szczególnie w porównaniu z posiadaniem ról i list kontrolnych w kontroli wersji ze wszystkim innym.

Wreszcie, środowiska testowania receptur można skonfigurować w locie, prawie bez dodatkowej pracy. Możesz wyłączyć cronjobs działające na serwerze i wprowadzić zmiany bezpośrednio w jego lokalnym repozytorium. Możesz przetestować zmiany, uruchamiając szefa kuchni-solo, a zobaczysz dokładnie, jak serwer skonfiguruje się w produkcji. Po przetestowaniu wszystkiego możesz sprawdzić zmiany i ponownie włączyć lokalne cronjobs. Pisząc przepisy, nie możesz jednak korzystać z interfejsu API „Search”, co oznacza, że ​​jeśli chcesz pisać przepisy dynamiczne (np. Loadbalancery), będziesz musiał zhakować to ograniczenie, zbierając dane z plików json w twój katalog węzłów /, który prawdopodobnie będzie mniej wygodny i nie będzie zawierał niektórych danych dostępnych w pełnej CMDB. Po raz kolejny bardziej dynamiczne środowiska będą sprzyjać podejściu opartemu na bazie danych, mniej dynamiczne środowiska będą w porządku z plikami json na dysku lokalnym. W środowisku serwerowym, w którym szef kuchni musi wykonywać wywołania API do centralnej bazy danych, będziesz zależny od zarządzania wszystkimi środowiskami testowymi w tej bazie danych.

Ten ostatni można również wykorzystać w nagłych wypadkach. Jeśli rozwiązujesz krytyczny problem na serwerach produkcyjnych i rozwiązujesz go przez zmianę konfiguracji, możesz wprowadzić tę zmianę natychmiast w repozytorium serwera, a następnie przesłać ją w górę do serwera głównego.

To są główne zalety szefa kuchni solo. Są też inne, na przykład brak konieczności administrowania serwerem lub płacenia za gospodarza, ale są to stosunkowo niewielkie obawy.

Podsumowując: jeśli jesteś dynamiczny i wysoce zwirtualizowany, serwer-serwer zapewnia wiele wspaniałych funkcji (omówionych gdzie indziej), a większość zalet szefa-solo będzie mniej zauważalna. Istnieją jednak określone, często niewymienione zalety dla szefa kuchni-solo, szczególnie w bardziej tradycyjnych środowiskach. Pamiętaj, że wdrożenie w chmurze niekoniecznie oznacza, że ​​masz dynamiczne środowisko. Jeśli nie możesz na przykład dodać więcej węzłów do systemu bez wydania nowej wersji oprogramowania, prawdopodobnie nie jesteś dynamiczny. Wreszcie, z wysokiego poziomu, CMDB może być przydatny do dowolnej liczby rzeczy tylko stycznie związanych z administracją i konfiguracją systemu, takich jak księgowość i wymiana informacji między zespołami. Skorzystanie z samego serwera-szefa kuchni może być tego warte.

Goladus
źródło
Jak przechowujesz / rozpowszechniasz wrażliwe dane (tj. Klucze prywatne / hasła) za pomocą szefa kuchni-solo? Jak mogę go śledzić za pomocą kontroli wersji bez zapisywania go jako zwykłego tekstu?
Limbo Peng,
@LimboPeng Możesz przechowywać zaszyfrowane torby danych w repozytorium szefa kuchni. Musisz jednak przechowywać klucz szyfrujący na zewnątrz.
Willie Wheeler,
27

Ujawnienie: Pracuję dla Opscode.

Główną zaletą Chef Server nad Solo jest możliwość korzystania z wyszukiwania z twoją infrastrukturą. Klasycznym przykładem jest moduł równoważenia obciążenia z serwerami WWW. Moduł równoważenia obciążenia może automatycznie aktualizować swoją konfigurację, gdy serwery WWW są dodawane i usuwane z infrastruktury, po prostu je wyszukując. Solo jest po prostu tym, że pojedyncze komputery, podczas gdy Chef Server zapewnia możliwość zapytania o takie rzeczy jak „wszystkie maszyny z więcej niż 4 gigabajtami pamięci RAM” lub „master bazy danych”.

Serwer szefa daje również możliwość zarządzania infrastrukturą bez kopiowania tarballi, wizualizacji infrastruktury za pomocą konsoli zarządzania i zarządzania, które komputery są uruchomione, które wersje książek kucharskich z środowiskami. Są inne korzyści, ale te są poza moją głową. Jeśli chcesz wypróbować serwer szefa kuchni bez jego instalowania, po prostu zarejestruj konto Opscode Hosted Chef, pierwsze 5 węzłów jest bezpłatne.

mray
źródło
1
Dzięki, ta informacja pomaga TONOWI. Czy wiesz, jak przyjąć filozofie DevOps podczas korzystania z serwera szefa kuchni? Rozumiem przez to, że wszystkie nasze książki kucharskie żyją w SCM. Czy istnieje prosty sposób, aby serwer szefa kuchni aktualizował książki kucharskie, gdy dostarczamy nowy kod?
linusthe3rd
2
@ strife25 Zdecydowanie powinieneś mieć swoje książki kucharskie w systemie kontroli wersji. Jeśli nie masz na to ochoty, Opscode zaleca Git, ponieważ łatwo jest pracować z gałęziami i kamieniami dla rozproszonych drużyn. Możesz napisać haczyk po zatwierdzeniu, który przesyła książki kucharskie na serwer szefa kuchni. Nie tylko klonujesz książki kucharskie na serwerze szefa kuchni, ponieważ przesyłasz je za pośrednictwem interfejsu API i jest to bardzo celowe z założenia.
jtimberman
1

chef-server zarządza książkami kucharskimi i danymi konfiguracyjnymi twoich węzłów.

Dodajesz książki kucharskie do serwera szefa kuchni za pomocą narzędzia noża, a następnie dajesz każdemu węzłowi listę uruchomionych przepisów, aby pobierały książki kucharskie, których potrzebują, gdy węzeł konfiguruje się za pomocą klienta szefa kuchni. Ponieważ szef-klient działa w tle, twoje węzły będą okresowo sprawdzać, czy na twoim serwerze-szefie są zaktualizowane książki kucharskie.

chef-server przechowuje również twoje dane konfiguracyjne i zmienne, dzięki czemu możesz zmienić ustawienia, aby twoje węzły były automatycznie pobierane. Jest to dobre w przypadku bardziej dynamicznych ustawień, które nie powinny lub nie mogą być zakodowane w przepisach.

Andrew Vit
źródło