Bardziej znane systemy zarządzania konfiguracją (CM), takie jak Puppet i Chef, wykorzystują podejście oparte na ciągnięciu: klienci okresowo odpytują scentralizowanego mastera w celu uzyskania aktualizacji. Niektóre z nich oferują masterless podejścia, jak również (tak, push-based), ale stwierdza, że jest to „nie do produkcji” (Saltstack) lub „mniej skalowalne” (Lalek). Jedyny znany mi system oparty na push od samego początku to drugie miejsce Ansible.
Jaka jest szczególna zaleta skalowalności systemu opartego na ściąganiu? Dlaczego podobno łatwiej jest dodawać więcej suwaków niż agentów push?
Na przykład agiletesting.blogspot.nl pisze:
w systemie „pull” klienci kontaktują się z serwerem niezależnie od siebie, więc system jako całość jest bardziej skalowalny niż system „push”
Z drugiej strony Rackspace pokazuje, że mogą obsługiwać systemy 15K za pomocą modelu push.
infastructures.org pisze:
Przysięgamy, że zastosujemy metodologię ściągania dla utrzymania infrastruktury, przy użyciu narzędzia takiego jak SUP, CVSup, serwer rsync lub cfengine. Zamiast wypychać zmiany do klientów, każda indywidualna maszyna kliencka musi być odpowiedzialna za odpytywanie złotego serwera podczas rozruchu, a następnie okresowo, aby utrzymać swój własny poziom obrotów. Przed przyjęciem tego punktu widzenia opracowaliśmy obszerne skrypty push oparte na ssh, rsh, rcp i rdist. Problem, który znaleźliśmy w przypadku komend r (lub ssh) był następujący: po uruchomieniu skryptu opartego na komendach r w celu wypchnięcia zmiany na maszyny docelowe, istnieje prawdopodobieństwo, że jeśli masz więcej niż 30 hostów docelowych, jeden z nich będzie być w dowolnej chwili. Utrzymanie listy uruchomionych maszyn staje się koszmarem. W trakcie pisania kodu, aby to naprawić, skończysz z rozbudowanym kodem opakowania, aby poradzić sobie z: limity czasu od martwych gospodarzy; rejestrowanie i ponawianie prób martwych hostów; rozwidlanie i uruchamianie równoległych zadań, aby spróbować trafić do wielu hostów w rozsądnym czasie; i wreszcie wykrywanie i zapobieganie przypadkowi wykorzystania wszystkich dostępnych gniazd TCP na maszynie źródłowej we wszystkich wychodzących sesjach rsh. W dalszym ciągu masz problem z umieszczeniem wszystkiego, co właśnie zrobiłeś, w obrazach instalacyjnych dla wszystkich nowych hostów do zainstalowania w przyszłości, a także z powtórzeniem tego dla wszystkich hostów, które zginą i będą musiały zostać odbudowane jutro. Po kłopotach, jakie przeszliśmy, aby wdrożyć replikację opartą na poleceniach r, okazało się, że nie jest tego warte. Nie planujemy ponownie zarządzać infrastrukturą za pomocą komend r ani za pomocą żadnego innego mechanizmu wypychania w tym zakresie. Nie skalują się tak dobrze, jak metody oparte na ściąganiu. rozwidlanie i uruchamianie równoległych zadań, aby spróbować trafić do wielu hostów w rozsądnym czasie; i wreszcie wykrywanie i zapobieganie przypadkowi wykorzystania wszystkich dostępnych gniazd TCP na maszynie źródłowej we wszystkich wychodzących sesjach rsh. W dalszym ciągu masz problem z umieszczeniem wszystkiego, co właśnie zrobiłeś, w obrazach instalacyjnych dla wszystkich nowych hostów do zainstalowania w przyszłości, a także z powtórzeniem tego dla wszystkich hostów, które umrą i będą musiały zostać odbudowane jutro. Po kłopotach, jakie przeszliśmy, aby wdrożyć replikację opartą na poleceniach r, okazało się, że nie jest tego warte. Nie planujemy ponownie zarządzać infrastrukturą za pomocą komend r ani za pomocą żadnego innego mechanizmu wypychania w tym zakresie. Nie skalują się tak dobrze, jak metody oparte na ściąganiu. rozwidlanie i uruchamianie równoległych zadań, aby spróbować trafić do wielu hostów w rozsądnym czasie; i wreszcie wykrywanie i zapobieganie przypadkowi wykorzystania wszystkich dostępnych gniazd TCP na maszynie źródłowej we wszystkich wychodzących sesjach rsh. W dalszym ciągu masz problem z umieszczeniem wszystkiego, co właśnie zrobiłeś, w obrazach instalacyjnych dla wszystkich nowych hostów do zainstalowania w przyszłości, a także z powtórzeniem tego dla wszystkich hostów, które zginą i będą musiały zostać odbudowane jutro. Po kłopotach, jakie przeszliśmy, aby wdrożyć replikację opartą na poleceniach r, okazało się, że nie jest tego warte. Nie planujemy ponownie zarządzać infrastrukturą za pomocą komend r ani za pomocą żadnego innego mechanizmu wypychania w tym zakresie. Nie skalują się tak dobrze, jak metody oparte na ściąganiu. i wreszcie wykrywanie i zapobieganie przypadkowi wykorzystania wszystkich dostępnych gniazd TCP na maszynie źródłowej we wszystkich wychodzących sesjach rsh. W dalszym ciągu masz problem z umieszczeniem wszystkiego, co właśnie zrobiłeś, w obrazach instalacyjnych dla wszystkich nowych hostów do zainstalowania w przyszłości, a także z powtórzeniem tego dla wszystkich hostów, które zginą i będą musiały zostać odbudowane jutro. Po kłopotach, jakie przeszliśmy, aby wdrożyć replikację opartą na poleceniach r, okazało się, że nie jest tego warte. Nie planujemy ponownie zarządzać infrastrukturą za pomocą komend r ani za pomocą żadnego innego mechanizmu wypychania w tym zakresie. Nie skalują się tak dobrze, jak metody oparte na ściąganiu. i wreszcie wykrywanie i zapobieganie przypadkowi wykorzystania wszystkich dostępnych gniazd TCP na maszynie źródłowej we wszystkich wychodzących sesjach rsh. W dalszym ciągu masz problem z umieszczeniem wszystkiego, co właśnie zrobiłeś, w obrazach instalacyjnych dla wszystkich nowych hostów do zainstalowania w przyszłości, a także z powtórzeniem tego dla wszystkich hostów, które umrą i będą musiały zostać odbudowane jutro. Po kłopotach, jakie przeszliśmy, aby wdrożyć replikację opartą na poleceniach r, okazało się, że nie jest tego warte. Nie planujemy ponownie zarządzać infrastrukturą za pomocą komend r ani za pomocą żadnego innego mechanizmu wypychania w tym zakresie. Nie skalują się tak dobrze, jak metody oparte na ściąganiu. W dalszym ciągu masz problem z umieszczeniem wszystkiego, co właśnie zrobiłeś, w obrazach instalacyjnych dla wszystkich nowych hostów do zainstalowania w przyszłości, a także z powtórzeniem tego dla wszystkich hostów, które zginą i będą musiały zostać odbudowane jutro. Po kłopotach, jakie przeszliśmy, aby wdrożyć replikację opartą na poleceniach r, okazało się, że nie jest tego warte. Nie planujemy ponownie zarządzać infrastrukturą za pomocą komend r ani za pomocą żadnego innego mechanizmu wypychania w tym zakresie. Nie skalują się tak dobrze, jak metody oparte na ściąganiu. W dalszym ciągu masz problem z umieszczeniem wszystkiego, co właśnie zrobiłeś, w obrazach instalacyjnych dla wszystkich nowych hostów do zainstalowania w przyszłości, a także z powtórzeniem tego dla wszystkich hostów, które zginą i będą musiały zostać odbudowane jutro. Po kłopotach, jakie przeszliśmy, aby wdrożyć replikację opartą na poleceniach r, okazało się, że nie jest tego warte. Nie planujemy ponownie zarządzać infrastrukturą za pomocą komend r ani za pomocą żadnego innego mechanizmu wypychania w tym zakresie. Nie skalują się tak dobrze, jak metody oparte na ściąganiu. lub z dowolnym innym mechanizmem pchającym w tym zakresie. Nie skalują się tak dobrze, jak metody oparte na ściąganiu. lub z dowolnym innym mechanizmem pchającym w tym zakresie. Nie skalują się tak dobrze, jak metody oparte na ściąganiu.
Czy nie jest to problem implementacyjny zamiast architektonicznego? Dlaczego trudniej jest napisać wątkowego klienta push niż wątkowy serwer pull?
ansible-pull
.Odpowiedzi:
Problem z systemami opartymi na wypychaniu polega na tym, że musisz mieć pełny model całej architektury w centralnym węźle wypychającym. Nie możesz naciskać na maszynę, o której nie wiesz.
Oczywiście może działać, ale synchronizacja wymaga dużo pracy.
Używając rzeczy takich jak Mcollective, możesz przekonwertować Puppet i inne CM do systemu opartego na push. Zasadniczo konwersja systemu pull na system oparty na push jest banalna, ale nie zawsze jest to proste.
Jest także kwestia polityki organizacyjnej. System oparty na wypychaniu daje wszystkie ręce kontrolne centralnym administratorom. W ten sposób zarządzanie złożonością może być bardzo trudne. Myślę, że problemem skalowania jest czerwony śledź, albo podejdź do skali, jeśli spojrzysz na liczbę klientów. Pod wieloma względami push jest łatwiejszy do skalowania. Jednak konfiguracja dynamiczna mniej więcej implikuje, że masz przynajmniej ściąganą wersję rejestracji klienta.
Ostatecznie chodzi o to, który system pasuje do przepływu pracy i własności w organizacji. Zasadniczo systemy ciągnące są bardziej elastyczne.
źródło
W przypadku, gdy jest to interesujące dla kogokolwiek, wydaje mi się, że przynajmniej mogę dać raport z doświadczenia użytkownika, który po raz pierwszy użył funkcji Ansible po wyjęciu z pudełka w kontekście zarządzania łatkami w konfiguracjach wielu hostów systemów o kluczowym znaczeniu w chmurze Amazon. Aby zrozumieć moje uprzedzenia lub uprzedzenia, powinienem wyjaśnić, że preferuję Ruby na poziomie skryptów automatyzacji i w przeszłości przygotowałem projekty do używania konfiguracji marionetek master-agent dla projektu-Vpc. Więc moje doświadczenie przeczy wcześniejszym uprzedzeniom, jeśli takie były.
Moje ostatnie doświadczenia bardzo sprzyjały dynamicznemu wprowadzaniu do zmieniającej się posiadłości od kilkudziesięciu do setek serwerów, które można skalować w górę lub w dół, mogą być zakończone i odświeżone. W mojej sytuacji wystarczyło proste polecenie ad hoc Ansible 1.7. Jednak ze względu na skuteczność ustawienia AnsibleController (na t2.micro) dla Vpc w tym celu, w przyszłości zamierzam rozszerzyć tę technikę na bardziej złożone wymagania.
Wróćmy więc do pytania zadanego w tym wątku: plusy i minusy popychania w dynamicznie zmieniającej się posiadłości.
Założenia dotyczące rodzaju serwerów, na które celowałem, były następujące:
Mając na uwadze powyższe warunki, utworzenie obrazu maszyny AnsibleController w celu umieszczenia go w wielu wersjach VPC i skonfigurowania (z poświadczeniami) in situ na istniejących kontach serwera jest bardzo proste. Zautomatyzowane w ramach każdej instancji utworzonej z obrazu jest
Drugi przedmiot może być w razie potrzeby względnie wyrafinowany (poprzez strukturę informacji w ekwipunku Ansible). Ale jeśli nie jest potrzebne wyrafinowanie, oto bardzo prosty przykład skryptu do obliczania wszystkich instancji Amazon EC2 w każdym interwale cron i kierowania wyników do odpowiedniego pliku inwentarza (np. / Etc / ansible / hosts)…
Jedynym zastrzeżeniem dla przypadku użycia jest to, że polecenie patch powinno być idempotentne. Pożądane jest wstępne przetestowanie, aby upewnić się, że jest to spełnione, w ramach upewnienia się, że łatka robi dokładnie to, co jest zamierzone.
Podsumowując, zilustrowałem przypadek użycia, w którym dynamiczne wypychanie jest skuteczne w stosunku do wyznaczonych celów. Jest to powtarzalne rozwiązanie (w sensie zamknięcia w obrazie, który można wprowadzić na wielu kontach i regionach). Z mojego dotychczasowego doświadczenia wynika, że technika dynamicznego wypychania jest o wiele łatwiejsza do zapewnienia --- i rozpoczęcia działania --- niż alternatywy dostępne z dostępnych obecnie zestawów narzędzi.
źródło