Automatyzacja wdrażania serwera

28

Uważam, że ciągle konfiguruję prawie identyczne serwery i VPS dla wielu moich klientów i może to być bardzo czasochłonne. Często jedyną rzeczą, która zmienia się między każdym wdrożeniem, jest inna witryna internetowa, która ma być obsługiwana. Czy istnieje prosty sposób na zautomatyzowanie tego wszystkiego i podjęcie nudnej monotonii konfiguracji 56 identycznych serwerów?

Serwery, które do tej pory wdrożyłem, to tylko Ubuntu, ale możliwe, że zacznę korzystać z innych systemów operacyjnych Linux, a nawet Windows. Do tej pory patrzyłem na Capistrano, ale wydaje się, że koncentruje się on na pisaniu małych programów rubinowych do wykonania zadania i nie mam żadnej wiedzy

Josh Hunt
źródło

Odpowiedzi:

20

Marionetka brzmi idealnie do tego, co próbujesz zrobić, z zastrzeżeniem, że na razie nie ma obsługi systemu Windows.

W twoim przypadku należy zdefiniować węzeł serwera pod względem wszystkich pakietów, które są identyczne na różnych komputerach. Następnie definiujesz poszczególne hosty jako węzły, które dziedziczą z serwera, i konfigurujesz dla niego określone unikalne elementy.

Marionetka jest deklaratywna - pozwala opisać twoje pudełka pod względem zasobów, które powinno posiadać każde pudełko. Więc jeśli chcesz ssh- piszesz klasę dla tego zasobu - a wewnątrz klasy możesz zawrzeć logikę o tym, jak ssh nazywa się nieco inaczej na FreeBSD w porównaniu z Ubuntu. Wie także, jak używać yumwewnątrz Redhata i apt-getwewnątrz dystrybucji opartych na Debianie oraz portsw BSD. Teraz w twoim węźle serwera będziesz miał po prostu linię podobną do include ssh- a marionetka zrobi właściwą rzecz i umieści SSH na maszynie bez konieczności pamiętania, czy to Ubuntu, Redhat czy FreeBSD.

Fajne jest to, że wszystkie elementy serwera znajdują się w jednym miejscu - i jeśli w dowolnym momencie dodasz definicję węzła serwera, WSZYSTKIE komputery odpowiednio zaktualizują swoją konfigurację.

W tej chwili zarządzam tylko trzema pudełkami za pomocą Puppet - ale to już się opłaciło. Po tygodniu spędzonym na ustawianiu pudełka, którego będziemy używać do prezentacji bodźca w eksperymencie, okazało się, że sterownik karty graficznej był zbyt stary w wersji Ubuntu, którą na niego włożyłem (8.04). Musiałem zainstalować najnowszą wersję Ubuntu (9.04), ale potem musiałem po prostu apt-get i uruchomić marionetkę - i wszystko, co spędziłem tydzień na konfiguracji, zostało przywrócone.

Puppet ma trochę krzywej uczenia się, ale udało mi się uniknąć nauki Ruby - wiem, że go używam, ponieważ tak napisano w Puppet - ale jak dotąd modyfikowałem przykłady w dokumentacja i przepisy na wiki . Inną wadą jest to, że marionetka zajmuje trochę czasu za pierwszym razem. Plusem jest to, że wszystko, co zmieniasz na wszystkich swoich komputerach, jest przechowywane w jednym miejscu - standardową praktyką jest utrzymywanie konfiguracji marionetek w systemie kontroli wersji - dzięki czemu zawsze możesz spojrzeć wstecz i zobaczyć, jak skonfigurowałeś serwery w przeszłości - lub wycofaj niektóre nieudane zmiany.

Wreszcie, oto krótkie wideo, które robi proste demo lalek, które szybko mnie rozpoczęło.

Paweł Iwanow
źródło
3
Digg.com używa marionetki do zarządzania swoimi serwerami, niektóre podstawowe przykłady można znaleźć na ich blogu: blog.digg.com/?p=335 blog.digg.com/?p=562
Adam Gibbins
Wierzę, że zespół administracyjny Fedory również używa marionetki.
Mei
9

Możemy użyć Cobbler i Puppet dla produkcji i automatyzacji konfiguracji obu maszyn rzeczywistych i wirtualnych.

Cobbler łączy DHCP, PXE boot i Kickstart, aby wdrożenie było niczym więcej niż dodaniem profilu maszyny i naciśnięciem przycisku zasilania. W przypadku maszyn wirtualnych koan polecenie wykonuje (w naszym przypadku) magię Xen, aby rozpocząć instalację - po dom0prostu piszę:

koan --system vps.fqdn --server cobbler --no-gfx

następnie virsh consoleobejrzyj budynek VPS bez żadnej interakcji.

Używamy RHEL i mamy kilka profili skonfigurowanych do partycjonowania dysków, konfigurowania sieci i instalowania pakietów podstawowych dla różnych klas serwerów. Cobbler obsługuje rasy Debian i Ubuntu, ale nigdy tego nie próbowałem. Na bok: inne interesujące zastosowania Cobblera obejmują uruchamianie memtest ISO i aktualizacji oprogramowania układowego HP .

Gdy nasze systemy zostaną zbudowane z Cobbler Puppet przejmie konfigurację aplikacji, demony systemowe, rejestrację skrzynki w RHN itp. Puppet działa jako demon, który okresowo sprawdza, czy konfiguracja systemu odpowiada zdefiniowanym manifestom - wiesz, że Twoje aktualizacje już minęły do wszystkich serwerów. To także świetny sposób, aby upewnić się, że urządzenie, które nie było potrzebne do konserwacji, ma prawidłową konfigurację przed przywróceniem do eksploatacji.

Puppet naprawdę jest niesamowity. Nie musisz kontrolować każdego aspektu swojej konfiguracji - zacznij od zarządzania czymś prostym, co musisz skonfigurować na każdym urządzeniu ( sudoersjest to przykład kanoniczny) i stamtąd. Upewnij się, że manifesty kukiełkowe również są wersjonowane; nic nie jest lepsze niż łatwość przywrócenia znanej dobrej konfiguracji bez konieczności pamiętania, co należy dostosować.

markdrayton
źródło
6

Obecnie, gdzie pracuję, musimy zarządzać częścią naszej farmy serwerów, która obejmuje nieco ponad 300 serwerów Linux. Obejmuje to głównie HP Proliants, a następnie IBM 3850, niektóre bloki IBM, VMware ESX i niektóre KVM dla naszych wewnętrznych serwerów zarządzania.

szewc

Patrzyliśmy na szewca, ale problem polegał na tym, że szewc jest bardzo specyficzny dla RHEL / Red Hat. Musimy co najmniej wspierać RHEL i SLES, a Ubuntu będzie następny.

marionetka

Zastanawialiśmy się nad marionetką, ale później zdecydowaliśmy się tego nie robić, ponieważ zależy to od Ruby, co oznacza, że ​​aktualizacja Ruby może potencjalnie uszkodzić nasz system zarządzania.

gorący drut

Hotwire jest tym, z czego korzystamy (opracowaliśmy wewnętrznie, ale jest oprogramowaniem typu open source) i robiliśmy to przez ostatnie kilka lat. Po pierwsze inwentaryzuje systemy, które mają zostać zbudowane, co oznacza inwentaryzację centrum danych, szafy, sprzętu, systemu operacyjnego, sieci itp., A po drugie wykonuje szybkie budowanie i wdrażanie. Po zbudowaniu systemu auto-inwentarz Hotwire utrzymuje ekwipunek w synchronizacji, a cfengine je utrzymuje. Hotwire wie o sprzęcie serwerowym, rozmawiając z danymi SMBIOS / DMI w Biosie przez python-dmidecode .

Punkty bonusowe polegają na tym, że łączy on proces inwentaryzacji i kompilacji w jeden, więc jest mniej do zarządzania, a funkcja inwentaryzacji na żywo jest świetna, ponieważ wiemy, że coś jest nie tak.

Wady polegają na tym, że interfejs użytkownika nadal wymaga dopracowania, a tu i tam pojawiają się błędy, ale rozwój jest wciąż gorący, a zgłaszane błędy są naprawiane stosunkowo szybko.

cfengine

Używamy cfengine, ponieważ poza nią i marionetką nie ma nic więcej. W rzeczywistości jest to dobre narzędzie, ale „dobre” tylko w zależności od tego, jak dobre są twoje polityki - jeśli ustawisz niebezpieczne polityki, wtedy mały błąd może spowodować wiele szkód. Na przykład, zgodnie z zasadami, nie „modyfikujemy” plików, albo je zastępujemy, albo nie. Również wszystkie zastąpione pliki mają nagłówek, dzięki któremu każda osoba, która je edytuje, wie, że zostanie zastąpione następnym razem (uruchamia się przez cron co godzinę).

Konfiguracja i wszystkie pliki wysyłane przez cfengine na serwery są również przechowywane w SCM, i używając haków po zatwierdzeniu, tam gdzie to możliwe, sprawdzamy składnię, a jeśli to się nie powiedzie, zatwierdzenie jest odrzucane. Jest to łatwe w przypadku ładnych aplikacji, takich jak Apache, ale nie tak łatwe w przypadku większości aplikacji korporacyjnych.

Kserkses
źródło
Zdecydowałeś się przeciwko Puppet, ponieważ to zależy od Ruby? Na tej podstawie możesz zdecydować się na prawie wszystko, ponieważ libc lub aktualizacja jądra może go zepsuć.
Cristian Ciupitu
2
Podnosisz punkt, ale ostatecznie jest to kompromis - o ile pakietów chcę się martwić przy następnej aktualizacji. Jeśli aktualizacja jądra / glibc pójdzie nie tak - zwykle spodziewałbyś się dowiedzieć prawie natychmiast, ponieważ jest to najbardziej podstawowy element systemu operacyjnego, jednak jeśli Ruby wyjdzie nieco inaczej, nie zauważysz tego, ale kiedy to zrobisz, możesz ma 300 serwerów już zaktualizowanych i działających w tej wersji, a teraz Puppet jest ofiarą. Ale znowu nie rzeźbię niczego w kamieniu; to tylko moje preferencje w tej sprawie.
Kserkses
3

Do automatyzacji instalacji w zależności od systemu docelowego:

  • Debian / Ubuntu: FAI lub disesesese
  • RedHat / Fedora: Kickstart
  • Novell / openSuSE: AutoYaST
  • Solaris: Jumpstart
  • Windows: unattended.sourceforge.net

Do zarządzania konfiguracją na dodatek sugerowałbym użycie marionetki.

Michael Prokop
źródło
2

Mam duży sukces ze Puppet , ale musisz napisać dużo konfiguracji.

Dave Cheney
źródło
2

Kolejny głos na Puppet tutaj. Używamy go w szerokim zakresie do przeprowadzania wszystkich instalacji serwera i aplikacji oraz zarządzania konfiguracją. Ponad 200 węzłów i coraz więcej. Obsługa systemu Windows jest najwyraźniej w fazie rozwoju, ale w jakim stanie nie jestem pewien.

Nadal przyglądamy się początkowej stronie ładowania systemu operacyjnego, ale jak wspomniano powyżej, Cobbler wygląda interesująco. Obecnie używamy kombinacji uruchamiania PXE z preseedingem Debiana / Ubuntu, ale nie jest to optymalne.

Mike Pountney
źródło
Hej Mike, czy myślisz, że możesz dodać do tego pytania marionetkę? Zrobiłbym to, ale nie mam wymaganego przedstawiciela
Paul Iwanow