Ansible
Zastanawiając się jak sobie radzić z zarządzaniem wieloma serwerami naraz i aktualizować na nich aplikacje szukałem rozwiązania, które ułatwiło by mi pracę.
Korzystałem z narzędzia MCollective jak i Ansible. W tym artykule opiszę do czego można używać narzędzia Ansible, jak go zainstalować oraz jak wykonać instalacje lub aktualizacje serwera Apache na systemie CentOS 7.3.
Automatyzacja zadań pozwoli nam na wykonywanie wielu zadań jednoczenie na wielu serwach.
Po co korzystać z tego typu narzędzi?
Aby odpowiedzieć na to pytanie, trzeba poczuć taką potrzebę jak i chęć ułatwienia, przyspieszenia pracy.
Wyobraźmy sobie że posiadamy wiele serwerów, którymi musimy zarządzać samodzielnie lub w kilka osób. Załóżmy że jest ich 100. Sto serwerów z różnymi systemami operacyjnymi na których musimy zaktualizować jakąś usługę lub dodać klucz nowego administratora.
Jeśli w danym momencie posiadamy 2 administratorów, to każdy z nich musi zalogować się na 50 komputerów i zaktualizować na nich usługę. W przypadku logowania na każdą z maszyn oddzielnie i aktualizacja usługi serwera www (yum install httpd -y), może zejść do około 4 godzin.
Natomiast jeśli przygotujemy Ansible tak aby zrobił to po wydaniu jednego polecenia, możemy w tym czasie wykonywać inne zadania lub cieszyć się wolną chwilą. Reszta zrobi się sama i w przeciągu kilkunastu minut powinniśmy mieć zaktualizowany serwer www na wszystkich naszych serwerach.
Niestety na przygotowanie konfiguracji, może zejść do kilku godzin i jednorazowa aktualizacja może się nie zwrócić czasowo ale takie aktualizacje trzeba robić dość często i z pewnością ten czas zostanie zwrócony wielokrotnie.
Korzyści jakie płyną dzięki zastosowaniu narzędzia Ansible:
- Zmniejszenie problemu skali z utrzymanie dużej infrastruktury
- Disaster recovery. Szybsze przywracanie konfiguracji serwerów lub poszczególnych usług po awarii całego serwera.
- Wielokrotne zaoszczędzenie czasu na wykonywaniu rutynowych zadań takich jak: aktualizacji systemu i usług, instalacji kluczy publicznych nowych administratorów, zmian w konfiguracji serwera, itp
- Szybsze wdrażanie skomplikowanych środowisk
- Krótszy czas oczekiwania przez klienta
Instalacja Ansible na serwerze z systemem CentOS 7.3
Cała instalacja sprowadza się do wykonania poniższego polecenia i potwierdzenia instalacji wszystkich zależności:
yum install ansible
Podstawowa konfiguracja Ansible
Najważniejsze dla nas pliki konfiguracyjne znajdują się w katalogu /etc/ansible/
W pliku /etc/ansible/hosts możemy utworzyć własne grupy hostów, którymi chcemy zarządzać.
Ansible pozwala wykonywać zadania na wszystkich wpisanych serwerach za pomocą „all” lub poszczególnych grupach serwerów „nazwa_grupy”.
Grupę definiujemy wpisując ją w nawiasach kwadratowych przykładowo:
Możemy definiować również zakres adresów:
[webservers] server.example.com 192.168.0.1
192.168.0.[2:254] server[01:99].example.com
Jeśli serwer SSH nasłuchuje na innym porcie niż standardowy 22, to możemy go ustawić bezpośrednio na w pliku hosts tak samo jak sposób łączenia czy logowanie na innego użytkownika
server.example.com:2222 ansible_connection=ssh ansible_user=user1
Kolejnym ważnym plikiem konfiguracyjnym jest /etc/ansible/ansible.cfg w którym znajduje się domyślna konfiguracja Ansible.
Możemy w nim zdefiniować domyślny port do łączenia się Ansible, zamiast podawać go w pliku hosts dla każdego serwera jeśli domyślnie używamy innego portu na naszych serwerach
remote_port = 2222
Jeśli logowania na użytkownika root jest wyłączone, to w parametrze sudo_user możemy zdefiniować innego domyślnego użytkownika:
sudo_user = user1
Automatyzacja zadań
Po przejściu przez instalacje i podstawową konfiguracje Ansible, możemy przejść do wykonania prostych czynności na wszystkich zdefiniowanych serwerach.
Wykonamy polecenie ping dla wszystkich klientów i zweryfikujemy czy wszyscy są osiągalni:
ansible all -m ping
Przykładowy wynik:
192.168.0.1 | SUCCESS => { "changed": false, "ping": "pong" }
Natomiast aby poczuć moc tego narzędzia, wykonajmy prostą instalację serwera www na wszystkich naszych serwerach. Do tego będziemy używać połączenia po użytkowniku root z takim samym hasłem na wszystkich serwerach. W kolejnych artykułach o Ansible opiszemy inne sposoby logowania na serwerach. Domyślnie w konfiguracji jest podany użytkownik root także zostaje nam jedynie wymusić podanie hasło dla tego użytkownika. Aby to zrobić trzeba użyć parametru „-k” w poleceniu.
Do instalacji serwera www użyjemy parametru „-a”, pozwalającego na wykonanie komendy z poziomy serwera klienta:
ansible magnus -a "yum remove httpd -y" -k
Po wykonaniu tego polecenia dostaniemy wynik taki jakby był widoczny po uruchomieniu polecenia bezpośrednio na serwerze klienta z konsoli.
Podsumowanie
Jak na pierwsze spotkanie z narzędziem do automatyzacji zadań powyższa wiedza powinna pomóc w instalacji/aktualizacji usług za pomocą jednego polecenia. Na naszej stronie będą pojawiać się jeszcze artykuły związane z narzędziem do automatyzacji zadań Ansible gdzie zostaną przedstawione inne sposoby zarządzania i konfiguracji. Z pewnością zauważycie że wynik polecenia dla kliku serwerów staje się mało przejrzysty i może to Was zniechęcić. Aby poradzić sobie z tym problemem należy korzystać z tzw. skryptów „playbook” pisanych w języku „YAML”, które zostaną przez nas omówione w następnych artykułach.
Tutaj znajduje się link do strony głównej narzędzia Ansible