Mamy wiele serwerów i nadal chcemy je wszystkie aktualizować. Rzeczywisty sposób jest taki, że którykolwiek z sysadminów przechodzi z serwera na serwer i robi aptitude update && aptitude upgrade
- wciąż nie jest fajny.
Szukam teraz rozwiązania, które jest jeszcze lepsze i bardzo inteligentne. Czy marionetka może to zrobić? Jak ty to robisz?
debian
puppet
update
remote-access
Dennis Wisnia
źródło
źródło
Odpowiedzi:
Możesz użyć
exec
takiego typu, jak:Szczerze mówiąc, sam tego nie próbowałem, ale myślę, że wystarczy utworzyć nowy moduł, który zawiera taką definicję exec.
apt-get upgrade
Komenda jest interaktywny. Aby działał cicho, możesz dodać opcję,-q=2
jak pokazano powyżej.źródło
touch
to w marionetkowym mistrzu.jeśli wszystkie hosty są debianem, możesz wypróbować pakiet aktualizacji nienadzorowanych.
http://packages.debian.org/sid/unattended-upgrades
Tutaj używamy marionetki do zarządzania naszymi wirtualnymi maszynami debiana, dzięki marionetce jesteśmy w stanie włączyć i zarządzać konfiguracjami bez aktualizacji na wszystkich serwerach.
Ostatnio nasz zespół testuje narzędzie mcollective do uruchamiania poleceń na wszystkich serwerach, ale do korzystania z mcollective potrzebne są umiejętności ruby.
[s] Guto
źródło
Polecam wybranie Puppet, facter i mCollective.
mCollective to bardzo fajny framework, w którym można uruchamiać polecenia na szeregu hostów (równolegle), używając factera jako filtra.
Dodaj do tego lokalny serwer proxy / pamięć podręczną, a będziesz dobrze skonfigurowany do zarządzania serwerami.
źródło
Użyj narzędzia stworzonego do uruchamiania jednego polecenia na wielu serwerach. I przez to nie mam na myśli, że terminale kazillion są otwarte przy użyciu Terminatora lub ClusterSSH, ale zamiast tego mam jeden terminal do serwera zarządzania z uruchomionym narzędziem odpowiednim do tego zadania.
W tym kontekście polecam func, Salt lub mCollective. Jeśli masz już Puppet, wybierz mCollective (ładnie integruje się z Puppet). Jeśli nie masz i masz starego Pythona na swoich komputerach, możesz cieszyć się func. Jeśli pytasz w nowym języku, spróbuj Salt. Wszystkie te narzędzia uruchamiają polecenie określone w wierszu poleceń asynchronicznie, co jest o wiele przyjemniejsze niż sekwencyjna pętla ssh lub nawet wykonywanie tych samych poleceń w wielu oknach Terminatora na wielu serwerach.
Na pewno pokochasz sól .
źródło
Sądzę więc, że istnieje wiele rzeczy, które przyczyniają się do dobrego rozwiązania:
Przepustowość : W zasadzie przychodzą mi na myśl dwie alternatywy oszczędzania przepustowości:
Administracja : skonfigurowałbym powłokę równoległą, taką jak PDSH , PSSH , GNU Parallel i wydałbym polecenie na wszystkich klientach, jeśli testowałem polecenie wcześniej na przykładowej maszynie. To mało prawdopodobne, że może zawieść na wszystkich innych. Alternatywnie możesz rozważyć zadanie crona na wszystkich klientach, ale wtedy może się ono nie powieść automatycznie, więc wolałbym pierwsze rozwiązanie.
Jeśli obawiasz się jednoczesności aktualizacji, możesz zaplanować swoje polecenia
at
Rejestrowanie : Podobnie jak w przypadku równoległych powłok, masz możliwość przekierowania danych wyjściowych. Połączę stderr i stdout i zapiszę je w pliku dziennika.
źródło
Moje własne równoległe opakowanie ssh: classh jest alternatywą dla różnych narzędzi ssh równoległych i klastrowych.
Może ci się to bardziej podoba lub nie. Są tylko trzy powody, o których tu wspominam:
subprocess.communicate()
metody Pythona --- więc można uzyskać przechwytywanie tylko około 64 000 stdout i osobno do 64 000 stderr, na przykład; również każdy zdalny proces, który próbuje odczytać ze swojego stdin, po prostu utknie w martwym punkcie do czasu zabicia lokalnego subporcesu ssh, automatycznie przez obsługę limitu czasu classh )Bardzo łatwo jest napisać własny skrypt w Pythonie, aby użyć classh.py jako modułu. Więc bardzo łatwo jest napisać coś takiego:
To wszystko. Na przykład w zagnieżdżonej zakończonej pętli można zebrać listę wszystkich, które zwróciły określony status wyjścia lub skanować w poszukiwaniu określonych komunikatów o błędach, i skonfigurować kolejne zadania, aby sobie z nimi poradzić. (Zadania będą uruchamiane jednocześnie, domyślnie 100 zadań w dowolnym momencie, aż do zakończenia każdego; więc proste polecenie na kilkuset hostach zwykle kończy się w ciągu kilku sekund, a bardzo złożony skrypt powłoki w jednym długim ciągu poleceń. powiedzmy, że około pięćdziesięciu wierszy ... może ukończyć kilka tysięcy hostów w około 10 minut ... około 10 tysięcy hostów na godzinę w moim środowisku, przy czym wiele z nich znajduje się międzykontynentalnie).
Może to być coś, co możesz wykorzystać jako środek ad hoc, dopóki nie zaimplementujesz konfiguracji marionetek i nie sprawdzisz testów ... a także bardzo przydatne do przeprowadzania niewielkich ankiet ad hoc u gospodarzy, aby zobaczyć, które odbiegają od twoich standardów w różne małe sposoby.
źródło
Odpowiedź przy użyciu exec jest bardzo pomocna.
Jednak zgodnie z instrukcją apt-get nie warto używać opcji -q = 2 w ten sposób (chociaż korzystałem z niej od lat bez problemów)
Sam korzystam ze skryptu od lat, uruchamiając apt-get w następujący sposób:
Rzeczy takie jak marionetka i inne narzędzia, o których ludzie wspominali, mogą działać, ale wydaje się, że to przesada, ponieważ w zasadzie naśladuje kilka poleceń wpisanych przez człowieka. Wierzę w użycie najprostszego narzędzia do konkretnego zadania, w tym przypadku skrypt bash jest tak prosty, jak to tylko możliwe, bez utraty funkcjonalności.
źródło
Od lat z radością aktualizuję i instaluję pakiety za pomocą apt-dater . Jest to lekkie i skuteczne narzędzie do zdalnego zarządzania pakietami. Wykorzystuje on
screen
,sudo
issh
.W przypadku zarządzania pakietami apt-dater może być łatwiejszym rozwiązaniem niż narzędzia do zarządzania konfiguracją.
apt-dater jest przydatny do scentralizowanego zarządzania pakietami w różnych wersjach GNU / Linux, takich jak Debian i CentOS.
źródło
możesz użyć tkaniny . Fabric to biblioteka Pythona (2.5–2.7) i narzędzie wiersza polecenia do usprawnienia korzystania z SSH do wdrażania aplikacji lub zadań administracyjnych w systemie.
źródło
użyj webmin ,, i użyj funkcji klastra webmin, w której możesz dodać wszystkie systemy do jednej konsoli webmin i wydać im dowolne polecenie lub kontrolować je wszystkie z jednego miejsca.
Lub
Użyj klastra ssh
Lub
PSSH
źródło
Innym rozwiązaniem, jeśli na wszystkich hostach działa Debian (lub pochodne), jest użycie pakietu cron-apt . Jednak, jak sugeruje dokumentacja, należy zachować ostrożność.
Obecnie używam cron-apt na kilkunastu serwerach do wykonywania wszystkich aktualizacji bezpieczeństwa automatycznie i bez nadzoru. Aby uniknąć niechcianych aktualizacji, używam cron-apt tylko na serwerach, na których działa stabilna dystrybucja Debiana i upewniam się, że skonfigurowałem swoje źródła apt, więc używaj nazwy dystrybucji, wheezy , a nie jej aliasu (stabilny).
Konkretna konfiguracja cron-apt, której używam, jest podsumowana w jednym pliku akcji:
/etc/cron-apt/action.d/5-install
Wszelkie inne aktualizacje są wykonywane ręcznie, przy użyciu ekranu lub innego najbardziej odpowiedniego rozwiązania, ponieważ może wymagać ręcznej interwencji podczas aktualizacji.
źródło