Dlaczego warto używać Chef / Puppet zamiast skryptów powłoki?

81

Nowość w narzędziach Puppet i Chef. Wydaje się, że zadanie, które wykonują, można wykonać za pomocą skryptów powłoki. Być może było to zrobione w skryptach powłoki, dopóki się nie pojawiły.

Zgodziłbym się, że są bardziej czytelne. Ale czy są jakieś inne zalety w porównaniu ze skryptami powłoki poza tym, że są czytelne?

spoczynkowy
źródło

Odpowiedzi:

56

Język specyficzny dla domeny robi dużą różnicę w ilości pisanego kodu. Na przykład możesz argumentować, że nie ma dużej różnicy między:

chmod 640 /my/file

i

file { "/my/file":
    mode => 640,
}

ale między nimi jest duża różnica:

FILE=/my/file
chmod 640 $FILE
chown foo $FILE
chgrp bar $FILE
wget -O $FILE "http://my.puppet.server/dist/$FILE"
     # where the URL contains "Hello world"

i

file { "/my/file":
    mode => 640,
    owner => foo,
    group => bar,
    content => "Hello world",
}

Co się stanie, jeśli wget się nie powiedzie? Jak twój skrypt sobie z tym poradzi? A co się stanie, jeśli w twoim skrypcie jest coś, co wymaga $ FILE, aby był tam z poprawną zawartością?

Można argumentować, że można po prostu wstawić echo "Hello world" > $FILEskrypt, z wyjątkiem tego, że w pierwszym przykładzie skrypt musi zostać uruchomiony na kliencie, podczas gdy puppet kompiluje to wszystko na serwerze. Jeśli więc zmienisz zawartość, musisz ją tylko zmienić na serwerze i zmieni się ona na tyle systemów, ile chcesz ją zainstalować. A kukiełka automatycznie obsługuje zależności i przenosi problemy.

Po prostu nie ma porównania - odpowiednie narzędzia do zarządzania konfiguracją oszczędzają czas i złożoność. Im więcej próbujesz zrobić, tym więcej skryptów powłoki wydaje się niewystarczających i tym więcej wysiłku zaoszczędzisz, robiąc to z marionetką.

Paul Gear
źródło
9
@Paul Gear, nadmiernym uproszczeniem jest stwierdzenie, że narzędzia do zarządzania konfiguracją to droga w dłuższej perspektywie. Na przykład za pomocą AWS skrypt powłoki może zbudować serwer od zera, przeprowadzić kilka testów, a gdy upewnisz się, że instancje AWS są w porządku, zrób obraz. Następnie możesz wdrożyć ten obraz w środowisku podglądu lub środowiska testowego w celu przeprowadzenia dalszych testów. Po sprawdzeniu, czy obraz jest odpowiedni do swoich celów, możesz przejść do produkcji. Narzędzia do zarządzania konfiguracją wcale nie pomagają w tym scenariuszu.
Derek Litz,
Teraz, jeśli chcesz zarządzać setkami dedykowanych serwerów, z których ludzie korzystają na co dzień (i masz niewielką kontrolę nad tym, co robią, przez pomyłkę lub nie), tam należy użyć narzędzi do zarządzania konfiguracją.
Derek Litz,
6
To nie jest bardzo przekonujący przykład. Mógłbym zacząć od wget, a potem nie skończyłbym w dziwnym stanie. Czy plik jest jak transakcja, która zostanie wycofana, jeśli którykolwiek z kroków nie powiedzie się?
PSkocik
33

To będzie niepopularna opinia, ale systemy zarządzania konfiguracją niekoniecznie są lepsze. Czasami proste jest naprawdę najlepsze.

Istnieje pewna krzywa uczenia się i koszty administracyjne związane z wybranym systemem konfiguracji. W końcu wprowadzasz zależność. Podobnie jak w przypadku każdej automatyzacji, należy również zachować ostrożność, aby zachować bezpieczeństwo we wdrożonych konfiguracjach.

Miałem tylko kilka przypadków, w których wdrożyliśmy zarządzanie konfiguracją i utknęło. To było zawsze, gdy istniała duża liczba systemów z powtarzalną konfiguracją i potrzebą wykonania konfigurowalnych wdrożeń obcinarki plików cookie.

kenchilada
źródło
10
Gdy koszt zarządzania środowiskiem jest tak duży, że zarządzanie automatyką jest naprawdę tańsze. Jeśli łatwiej jest skryptować zmiany zarządzane w Git lub konfigurować w multipleksatorze ssh, robimy to. Najważniejsze dla mnie jest to, że monitoruję systemy i sprawdzam, czy wszystko działa zgodnie z oczekiwaniami. Tak długo, jak jestem powiadamiany, gdy coś jest źle skonfigurowane, nie jest tak ważne, jak to się konfiguruje.
kenchilada
10
@ewwhite "kiedy zdecydujesz się zautomatyzować vs. nie" xkcd.com/1205
MikeyB
3
Bardziej nowoczesne narzędzia, takie jak Ansible, mają znacznie mniej narzutów związanych z wdrażaniem / zarządzaniem niż Chef lub Puppet, nie wymagając od nich żadnych zależności (w szczególności Ansible jest bezagentowy). To naprawdę obniża poprzeczkę do adopcji.
GomoX
2
@ewwhite Automatyzujesz, kiedy chcesz, dla osobistej produktywności. Uczysz się przez automatyzację, nie uczysz się przez wykonywanie przyziemnych zadań. Uczenie się = wzrost wydajności i iteracyjne doskonalenie. Automatyzacja łączy się z tym, aby wytworzyć więcej pozytywów. To pozytywna śnieżka zamiast negatywna. Postęp techniczny a dług techniczny.
Derek Litz,
2
@ABB Nie, to nie jest dorozumiane. Nie wspominam nawet o skryptach powłoki, o automatyzacji jako ogólnej praktyce. Możesz automatyzować rzeczy za pomocą skryptów powłoki i uczyć się abstrakcji skryptów zamiast robić rzeczy ręcznie, co nie tylko pozwoli ci zaoszczędzić czas na ponownym wykonaniu tego zadania, ale także pozwoli uniknąć błędów. Powinieneś być w stanie napisać kolejny skrypt nieco lepiej niż ostatni. Pozytywna kula śnieżna ... Jeśli jednak jesteś ekspertem w pisaniu skryptów i nie piszesz czegoś, co kiedykolwiek uruchomisz, nie pomoże ci to w nauce ani oszczędzeniu czasu.
Derek Litz,
23

Odpowiedziałeś na swoje pytanie ...

Automatyzacja staje się coraz bardziej skalowalna i sformalizowana . Marionetka i szef kuchni są obecnie uważane za standardy (sprawdź ogłoszenia o pracę ).

Skrypty powłoki brukowane-razem mają swoje miejsce, ale oni nie skalowalne w kontekście ruchu devops. Czytelność jest tego częścią.

ewwhite
źródło
7
Czy skrypty powłoki są w jakiś sposób mniej sformalizowane? Czy cytowanie ogłoszeń o pracę przekonuje do kłótni? A devops jest dość wstydem, ponieważ jest niedożywiony jako programista. Link nie mówi tak naprawdę o skalowalności. Czy twierdzenie, że skrypty powłoki nie są skalowalne? Myślę, że Puppet jest interesujący, ale niekoniecznie z powodów w odpowiedzi.
Acumenus
Ogłoszenia o pracy odzwierciedlają prawdziwy rynek konkretnych umiejętności. Tak, korzystanie z zarządzania konfiguracją zgodnie z przeznaczeniem jest bardziej skalowalne, bardziej niezawodne i łatwiejsze do udokumentowania niż skrypty powłoki. Byłem w wielu środowiskach i większość skryptów, które widzę, nie są zbudowane w sposób, który można by uznać za „jakość produkcji” i były zorganizowane tak, aby obsługiwać wyjątki. Zobacz zaakceptowaną odpowiedź, aby zrozumieć, dlaczego.
ewwhite
1
„A devops jest dość wstydem, ponieważ nie jest w pełni wykorzystany jako programista”. To po prostu nieprawda. DevOps to specjalizacja programistyczna, podobnie jak Web Development. Nadal obowiązują wzorce i praktyki tworzenia oprogramowania. Powinieneś przeczytać o DevOps.
Chaim Eliyah,
13

Chef znacznie ułatwia zarządzanie i wersjonowanie konfiguracji złożonej infrastruktury, szczególnie w każdym środowisku chmury, w porównaniu do konieczności ręcznego ftp lub scp kilka skryptów powłoki zorganizowanych w niestandardowy sposób. W zależności od liczby zależności, którymi musisz zarządzać, wielkość tej wygranej może się znacznie różnić, co sprawia, że ​​decyzja o przejściu na rozwiązanie CM jest dla wielu osób nieoczywista.

Prawdziwą (często nieoczekiwaną) korzyścią Szefa Kuchni jest idempotencja . Możliwość upewnienia się o stanie zasobu niezależnie od kombinacji receptur uruchamianych z nakładającymi się zainteresowaniami jest ogromną zaletą w porównaniu z konfiguracją skryptu powłoki. Jeśli masz teraz skrypty powłoki do konfiguracji, zadaj sobie pytanie, ile z nich można uruchomić wiele razy bez niezamierzonych / niepożądanych konsekwencji?

Odpowiednie rozwiązanie CM pomaga zapewnić sukces na dużą skalę, upraszczając automatyzację między platformami i współpracę zespołu. Chociaż można to wszystko osiągnąć za pomocą dobrze zorganizowanej, odpowiednio utrzymywanej, wersjonowanej grupy skryptów powłoki; musisz zadać sobie pytanie „dlaczego”. Szef kuchni / Puppet i podobne technologie powstały, ponieważ grupa utalentowanych SysOps była zmęczona ciągłym rozwiązywaniem tych samych problemów i postanowiła dać nam lepszą opcję.

Kluczowe elementy:

  • Idempotencja
  • Łatwość zarządzania zależnościami (wersja)
  • Standaryzowana organizacja (akceptowana na poziomie branżowym)
  • Abstrakcja w celu oddzielenia zadań konfiguracji serwera od szczegółów na poziomie systemu
  • Zdolność do wykorzystania wiedzy społeczności (która gwarantuje przestrzeganie wszystkich powyższych zasad)
Matt Surabian
źródło
3
Idempotencja jest praktycznie niemożliwa w przypadku ss. Zależności są dobrze zarządzane przez yum / apt itp. Akceptacja jest nieistotna. Znajomość społeczności istnieje dla ss. Przyjmuję jednak do wiadomości, że nie trzeba kopiować wielu skryptów, a także centralnie konfigurować systemy. Słyszałem, że marionetka wymaga agenta po stronie klienta.
Acumenus
10

Nowoczesne narzędzia do zarządzania konfiguracją, takie jak Puppet i Chef, pozwalają określić stan systemu zamiast martwić się o działania niezbędne do uzyskania skonfigurowanego serwera.

Na przykład komenda chmod zakłada, że ​​plik istnieje, istnieje użytkownik będący jego właścicielem, że katalogi zostały utworzone itd. Dlatego twój skrypt musi uwzględniać wszystkie te warunki wstępne.

Stanowe narzędzia do zarządzania konfiguracją są prostsze: zależy Ci tylko na tym, aby plik miał odpowiednie uprawnienia. Problemem jest to, jak to osiągnąć.

Jon Jaroker
źródło
1
W rzeczywistości mój chmodnie zakłada, że ​​plik istnieje, ponieważ plik został utworzony przez skrypt lub przetestowany pod kątem istnienia.
Acumenus
9

Jeśli serwery są do dyspozycji lub masz powód, by stawać się więcej niż parą naraz, pełnowartościowy system CM znacznie lepiej zaspokoi twoje potrzeby niż seria skryptów powłoki.

Jeśli twoje potrzeby budowania są skromne (lub lubisz ręcznie wytwarzać organiczne serwery wolnego handlu z wolnego wybiegu), zachowaj prostotę.

Osobiście, intensywnie wykorzystując szefa kuchni na poprzednim koncercie, próbowałem „uprościć to” na tym koncercie, ale naprawdę brakowało mi prymitywów, abstrakcji i mocy, które zapewniał szef kuchni. Nawet jeśli dojdziesz do sytuacji, w której możesz uzyskać to, czego potrzebujesz, z kilku poleceń powłoki, możesz po prostu uruchomić te z blokiem „poleceń”, wprowadzając polecenia powłoki dokładnie tak, jak zapisujesz je w powłoce.

Powiedziawszy to, możesz uruchomić Chef bez serwera (szef kuchni solo), i jestem prawie pewien, że Puppet ma analog, w którym nadal możesz korzystać z książek kucharskich i przepisów innych bez uruchamiania centralnego serwera.

Kolejną korzyścią jest społeczność: jest wiele osób (z których wielu będzie mądrzejszych i / lub bardziej doświadczonych niż ty). Osobiście uwielbiam to, gdy ktoś inny wykonał dla mnie swoją pracę, często bardziej niż ja.

gWaldo
źródło
1

Stworzyłem strukturę automatyzacji serwera opartą na skryptach powłoki: https://github.com/myplaceonline/posixcube

Jestem pewien, że nie jestem pierwszym, który stworzył tego rodzaju projekt, ale nie mogłem znaleźć czegoś podobnego do moich potrzeb, więc pomyślałem, że inni mogą uznać to za przydatne. Miałem tylko doświadczenie z szefem kuchni, ale kiedy zacząłem rozglądać się za Ansible i innymi, chciałem spróbować skryptów powłoki i jak na razie podoba mi się wynik.

Kevin
źródło