Pracujemy nad sposobem wykonywania automatycznych aktualizacji naszych serwerów opartych na RHEL / RHEL.
Początkowy pomysł: za pomocą Puppet wyłączamy domyślne repozytoria i wskazujemy własne. Następnie używamy ensure => latest
pakietów, które chcemy automatycznie aktualizować.
Problem: Widzimy, że niektóre usługi uruchamiają się ponownie po aktualizacji (duh).
Pytanie: Czy ktoś ma jakieś porady na temat lepszego zautomatyzowania aktualizacji systemu Linux i strategii ograniczania automatycznego ponownego uruchamiania usług? Wolelibyśmy rozwiązanie obejmujące Puppet, ale jeśli potrzebujemy skorzystać z innej usługi, nie jest to przełom.
Edytować
Możliwe rozwiązanie: przesłałem rozwiązanie, które implementuje wiele z sugestii @ voretaq7 i @ewwhite. Wygląda na to, że na razie wybieram trasę. Jeśli masz inne sugestie, skomentuj lub prześlij odpowiedź.
źródło
Czy koniecznie jest problem z ponownym uruchomieniem usługi po aktualizacji pakietu? Przetestuj na małą skalę przed wdrożeniem, aby sprawdzić, czy występują jakieś problemy. Niedawno miałem brzydki problem z pakietem RPMForge z DenyHosts . W rzeczywistości zmienił lokalizację swoich katalogów konfiguracji i pracy między wersjami z ostatniej aktualizacji. To jest całkowicie niepożądane zachowanie. Zazwyczaj w ramach tej samej wersji RHEL nie ma zbyt wielu problemów, ale nigdy nie można być pewnym bez testowania i uważnego obserwowania efektów.
Inną opcją jest selektywna aktualizacja usług. Czy na przykład zawsze potrzebujesz najnowszych pakietów? Powraca to do zrozumienia przyczyn uruchamiania aktualizacji. Jaki jest prawdziwy cel?
Zaletą prowadzenia własnego repozytorium jest to, że możesz wystawiać wersje lub wdrożenia i zarządzać harmonogramem. Co się stanie, jeśli masz sprzętowego producenta urządzeń peryferyjnych lub oprogramowania, który wymaga RHEL 5.6 i złamałby się poniżej 5.7? To jedna z zalet zarządzania własnymi pakietami.
źródło
@Beaming Mel-Bin
Uproszczenie wyeliminuje potrzebę używania ssh do narzędzi pętli, aby uruchomić / zatrzymać marionetkę.
Przede wszystkim musisz zmienić swoje manifesty, aby zawierały zmienną o nazwie „noop”, której wartość pochodzi z ENC.
Więc miałbyś coś takiego w klasie:
Gdzie
noop_status
jest ustawiony w Twojej ENC. Po ustawieniu wartościnoop_status
natrue
, manifest będzie działał tylko w trybie noop.Jeśli masz 100 lub 1000 hostów, możesz użyć ENC, takiego jak Dashboard lub Foreman, który pozwala na masową zmianę parametrów wielu hostów, dziedzicząc je na poziomie „Grupy hostów” lub „Domeny”. Następnie można ustawić wartość „false” dla niewielkiej liczby hostów testowych, zastępując wartość grupy hostów.
Dzięki temu wszelkie zmiany zostaną zastosowane tylko do wybranych hostów.
Zmiana jednego parametru w centralnej lokalizacji może wpłynąć na dowolną liczbę hostów, bez potrzeby włączania / wyłączania marionetki za pomocą ssh dla narzędzi pętli. Możesz podzielić gospodarzy na wiele grup dla bezpieczeństwa / zarządzania.
Zauważ też, że zamiast na stałe kodować numery wersji pakietów w manifestach, możesz umieścić je w ENC. Podobnie jak powyżej, możesz selektywnie stosować zmiany i zarządzać wdrożeniami.
Jeśli chcesz uzyskać większą szczegółowość (i złożoność), możesz nawet mieć parametry według klas, itp
noop_status_apacheClass
.Może to być trudniejsze w zarządzaniu, jeśli prowadzisz
include
zajęcia w innych klasach.źródło
Możliwe rozwiązanie oparte na odpowiedzi @ voretaq7:
Numery wersji twardego kodu pakietów w
puppet
manifestach i utrzymuj pakiety w naszym własnym repozytorium.Kiedy potrzebujemy nowej wersji pakietu zrobić coś, co oferuje (np. Ulepszenia bezpieczeństwa, funkcje wymagane przez naszych klientów itp.), Pobieramy pakiet do repozytorium.
Przetestuj zaktualizowany pakiet na serwerze testowym.
Po przetestowaniu aktualizacji użyj czegoś takiego jak
func
lub,pssh
aby wyłączyćpuppet
agenta na dotkniętych węzłach.Zaktualizuj
puppet
manifesty, aby mieć pewność, że nowa wersja pakietu zostanie zainstalowana w dotkniętych węzłach.Na koniec uruchom
puppet agent --onetime && reboot
na serwerze za pomocąfunc
lubpssh
Skomentuj i daj mi znać, jeśli zauważysz jakieś braki w tym rozwiązaniu lub cokolwiek, co można by uprościć.
źródło