Czy jest jakiś powód, aby używać Puppet razem z Dockerem?

16

Jakiś czas temu wypróbowałem część OpO na DevOps i było całkiem fajnie, ale nie mam czasu i powodów, by wypróbować to w jakimkolwiek projekcie. Ale w zeszłym tygodniu zacząłem nową pracę, gdzie szef zapytał mnie, czy mogę skonfigurować serwer tak, aby tworzył coś w rodzaju środowiska przejściowego dla projektów firmowych. Oprócz tego zacząłem myśleć o migracji projektu, aby był bardziej DevOps, a nie tylko dev.

Udałem się z Dockerem, który jest dla mnie świetny i bardzo łatwy. Ale jakiś czas temu próbowałem Puppet, więc przychodzi mi na myśl pytanie: „Czy jest jakiś powód, aby używać Puppet z Dockerem?”. Docker wydaje się robić wszystkie rzeczy, które zrobiłby Puppet, ale w łatwiejszy sposób.

PS Jakiś czas temu w Hacker News był Consul, który jest fajną konfiguracją i odkrywaniem usług, więc nawet konfigurację można rozwiązać (i myślę też o tym).

Hauleth
źródło

Odpowiedzi:

18

Marionetka i doker mogą robić wiele takich samych rzeczy, jednak podchodzą do nich inaczej.

Puppet zarządza plikami + paczkami + usługami. (Nazywany trifecta). Docker hermetyzuje pliki binarne i pliki konfiguracyjne wewnątrz kontenera.

W chwili pisania tego tekstu doker jest nadal niestabilny i nie powinien być używany w produkcji. Wiele interfejsów API prawdopodobnie zostanie zmienionych do czasu wydania wersji 1.0.

Nawet gdy doker się ustabilizuje, przekształcenie każdego procesu i pliku konfiguracyjnego w kontenery dokujące będzie dużym przedsięwzięciem.

Z drugiej strony, marionetka jest stabilnym produktem i ma cały ekosystem narzędzi (heira, mcollective, facter, razor). Narzędzia te można wdrożyć szybko i bez obaw o uszkodzenie.

Gorąco polecam następujące zasoby.

Film o zarządzaniu stosami aplikacji za pomocą marionetki
https://www.youtube.com/watch?v=KSo_mcJxFIA

Podcast o tym, jak doker i marionetka mogą ze sobą współpracować
http://devopscafe.org/show/2014/1/23/devops-cafe-episode-46.html

Artykuł w marionetkowym blogu na temat integracji z dokerem
http://puppetlabs.com/blog/building-puppet-based-applications-inside-docker

Kolejny artykuł na blogu na temat współistniejących marionetek i dokerów
http://puppetlabs.com/blog/can-containers-and-configuration-management-co-exist

Moduł lalek do interakcji z dokerem
http://docs.docker.io/use/puppet/

Drobna korekta terminologii devops. Devops jest bardziej metodologią tworzenia oprogramowania, w której współpracują programiści i operacje, niż jakimkolwiek konkretnym narzędziem.

Aktualizacja

Obecnie moja firma używa zarówno marionetek, jak i dokerów. Oto świetna prezentacja przedstawiona na marionetkowym konkursie 2014 na temat tego, dlaczego warto używać marionetki kontra doker. Podane przez Jamesa Turnbulla, byłego pracodawcę puppetlabs i autora książki dokerów.

https://puppetlabs.com/presentations/using-docker-puppet-james-turnbull-kickstarter

Również dobry krótki samouczek wideo na temat dokera podany przez sysadmincasts.com

https://sysadmincasts.com/episodes/31-introduction-to-docker

Zalety dokerów:

  • Może szybko rozwinąć instancję
  • Łatwiej się nauczyć niż marionetka
  • Łatwe do zrobienia 0 przestojów

Wady dokerów:

  • Kontenery mają limit 10 GB podczas korzystania z backendu devicemapper
  • Małe zmiany konfiguracji zajmują dużo czasu, aby odbudować kontener
  • Korzystanie z rejestru dokerów, takiego jak hub.docker.com, quay.io, kosztuje (pieniądze z samoobsługowego rejestru dokerów są bardzo błędne i nie zawierają GUI)
  • Brak odpowiedniego systemu inicjującego. Niektóre aplikacje nie działają dobrze.
  • Brak precyzyjnej kontroli nad siecią
  • Aplikacje wymagające podpowłoki (patrząc na ciebie RVM + ruby) są bardzo trudne do prawidłowego działania
  • Nie można zarządzać hostami Windows, bez SLES lub innych mniej popularnych systemów operacyjnych
  • Obecnie orkiestracja dokerów jest bardzo młoda.
  • Obecnie nie można ustawić pliku /etc/resolv.conf w czasie kompilacji
  • Różne błędy, które musimy zamontować / etc / localtime i / dev / urandom, aby zamapować na katalogach localtime i urandom hostów.
  • Wydajność nie jest tak szybka (pomimo wszystkich twierdzeń, że doker powinien mieć 99% prędkości nagiego metalu, czasami jest o 30% wolniejszy niż inne maszyny).
  • Małe pojemniki wciąż mają narzuty w wysokości setek megabajtów. Wszystkie nasze pojemniki to wiele gigabajtów.

Puppet Pro:

  • Łatwy do skalowania
  • Współpracuje z istniejącymi serwerami (Windows, Linux, Sles)
  • Szybko wprowadzać małe zmiany
  • Silna społeczność innych użytkowników marionetek i modułów
  • Standaryzowany interfejs API do instalowania pakietów na wszystkich platformach

Wady marionetek:

  • Duże infrastruktury stają się bardzo złożone
  • Warunkowe zależności modułu tworzą kod spagetti
  • Większa waga

Obecnie używamy marionetki do zaopatrywania naszych kontenerów dokerów. Kontenery dokerów są używane do kompilacji Jenkins i są niszczone po każdej kompilacji. Działa dobrze i zapewnia nam spójne środowisko. Oznacza to, że musimy napisać kod tylko raz, a następnie odbudować maszyny Ubuntu, Sles i Centos. Przebudowa pojemników zajmuje około 15 do 30 minut i nadal jest procesem ręcznym. Docker jest świetny do rozwijania szybkich testów vm,

Krótko mówiąc, marionetka świetnie zarządza istniejącą infrastrukturą. Docker jest dobry, jeśli masz greenfield, który jest w 100% linux, ze stosem technologii, który można zamknąć w małych, efemerycznych instancjach. Chociaż niektóre funkcje pokrywają się, nie wykluczają się wzajemnie.

spuder
źródło
5
Uznałem tę odpowiedź za subiektywną i spekulacyjną. Nie sądzę, że tak naprawdę odpowiada, dlaczego można nadal używać Puppet obok / w połączeniu z Dockerem, kiedy Docker wydaje się, na wysokim poziomie, prostszym narzędziem do tego samego celu.
8bitjunkie
1
@ 7SpecialGems Zaktualizowano o więcej faktów.
spuder
1
wspaniale byłoby zobaczyć recenzję tej odpowiedzi na świecie w 2015 roku i jak się to zmieniło
Oliver Bayes-Shelton
Czy pytanie / odpowiedź jest nadal względne w 2019 r.? Co mogłem zmienić?
Md. Abu Taher,
2

Docker pomaga w inicjowaniu i początkowym konfigurowaniu kontenerów, ale uruchamia jednorazowe polecenia przy inicjalizacji kontenera.

Puppet jest najsilniejszy, gdy uruchomisz go jako demona, zapewnia on, że twoja konfiguracja pozostanie taka, jak ją określisz, więc na przykład, jeśli usługa przestanie działać, uruchomi ją ponownie.

Jedną z najlepszych rzeczy w (poprawnie zaprojektowanej) konfiguracji lalek jest to, że są idempotentne ; ma opisywać stan, w którym chcesz być, i niekoniecznie kroki, aby się do niego dostać.

Pozwala także na abstrakcję i parametryzację konfiguracji oraz na eksport parametrów utworzonych na jednym serwerze lub kontenerze i wykorzystanie ich w innym (np. Zebranie listy nazw hostów węzłów dla aplikacji monitorującej).

Powiedziałbym, że zdecydowanie służą innym, ale powiązanym celom. Obecnie patrzę na użycie istniejących manifestów marionetek do rozpoczęcia konfigurowania kontenerów, aby środowiska programistyczne bardziej przypominały środowiska produkcyjne.

xtrade
źródło