Ansible - szybkie wdrażanie usług

Piotr Kmita 2019-08-30

Ansible — co to jest?

Ansible to narzędzie służące do automatyzacji procesów administracyjnych, orkiestracji oraz zarządzania konfiguracją. Jest bezagentowy, co oznacza, że nie trzeba instalować żadnego agenta na serwerach klientów, co zapobiegaich przeciążeniu. Za jego pomocą możemy w krótkim czasie wdrożyć setki serwerów z dowolnie skonfigurowanym oprogramowaniem. Może to być skonfigurowany serwer hostingowy z cPanel lub DirectAdmin, a nawet pojedyncza usługa zainstalowana na tysiącach serwerów. W korzystaniu z tego narzędzia ograniczeniem jest tylko nasza wyobraźnia i czas, który możemy przeznaczyć na przygotowanie konfiguracji samego Ansible.

Jakie systemy mogą być zarządzanie przez Ansible?

Możemy zarządzać zarówno systemami Linux, jak i Windows. Ponadto, możliwe jest wykorzystanie go w urządzeniach sieciowych, co ułatwia edycję ustawień w przełącznikach.

Jak korzystać z Ansible?

Ansible możemy używać na dwa sposoby. Pierwszym z nich jest użycie komendy ad-hoc bezpośrednio z konsoli dla pojedynczych serwerów z wcześniej określonego inventory. Tym drugim może być użycie playbooka, który zawiera wszystkie rodzaje czynności do wykonania. Playbooki są stosowane głównie wtedy, gdy chcemy wdrożyć konkretną konfigurację lub zainstalować więcej usług.

Jeżeli chcemy wykonać tę samą komendę na wielu serwerach, możemy użyć do tego bezpośrednio komendy ad-hoc. Poniżej demonstruję jedną z prostszych komend oraz krótkiego playbooka zawartego w jednym pliku.

  1. Przykład komendy ad-hoc

    root@ansible ~ # ansible localhost -m shell -a "hostname"
    localhost | SUCCESS | rc=0 >>

    ansible-host.kylos.net.pl

  2. Przykład playbooka instalującego serwer Apache

    Instalacja httpd - playbook

    ---
    - hosts: localhost
     tasks:
      - name: Install httpd
       yum: name=httpd state=latest

    Wynik z uruchomienia playbooka

    [root@odin tmp]# ansible-playbook playbook.yml
    PLAY [localhost] ****************************************************************************************************************************************************************************
    TASK [Gathering Facts] **********************************************************************************************************************************************************************
    ok: [localhost]
    TASK [Install httpd] ************************************************************************************************************************************************************************
    changed: [localhost]
    PLAY RECAP **********************************************************************************************************************************************************************************
    localhost : ok=2 changed=1 unreachable=0 failed=0
  3. Pokazałem instalację tylko na jednym hoście (tj. na localhost). W dalszej części tego artykułu będę używał Ansible do instalacji w oparciu o serwery AWS. Możemy instalować na wszystkich zdefiniowanych hostach w naszym inventory, które może być statyczny lub dynamiczny, aby wyszukiwać wszystkie instancje np. w EC2. Statyczne inventory znajduje się domyślnie w pliku /etc/ansible/hosts.

  4. Przykładowo może wyglądać tak:

    Inventory

    [grupa-serwerow]
    serwer1.kylos.pl
    serwer2.kylos.pl ansible_port=2222 ansible_user=kylos

    [www]
    www[001:006].kylos.pl

    Jeśli połączenie do serwerów odbywa się z użyciem klucza ssh i mamy uprawnienia root, wtedy nie musimy nic konfigurować. Jeśli natomiast chcemy użyć innego użytkownika niż ten z którego obecnie korzystamy oraz port ssh to w inventory możemy użyć parametrów jak przy serwer2.kylos.pl.

Czym jest i jak działa Ansbile-Galaxy?

Ansible-Galaxy to publiczna biblioteka ról Ansibla stworzona przez społeczność. Jego zasoby są dostępne dla wszystkich, a rozwiązania zawarte w bibliotece mogą być wykorzystywane do wykonywania różnych administracyjnych zadań. Niestety, większość ról jest tylko pomocnicza, dlatego aby osiągnąć oczekiwane rezultaty, należy je odpowiednio dostosować.

Biblioteka znajduje się pod adresem https://galaxy.ansible.com. Jeśli użyjemy wyszukiwarki, dostępnej pod tym linkiem i wpiszemy słowo "apache", to prawdopodobnie jako pierwsze w wynikach wyszukiwania pojawi nam się poniższa rola:

https://galaxy.ansible.com/geerlingguy/apache

Wykorzystamy ją w dalszej części artykułu, aby zademonstrować instalacje serwera WWW opartego o Apache.

Aby zainstalować lub pobrać taką rolę, możesz wydać odpowiednie polecenie, na przykład:

ansible-galaxy install geerlingguy.apache

To i inne polecenia możecie znaleźć również bezpośrednio w dokumentacji danej roli w bibliotece.

Jak wykorzystać Ansible-Galaxy do instalacji serwera Apache?

W tej części skorzystamy z trzech serwerów uruchomionych w chmurze Amazon Web Services z systemem Amazon Linux. Na dwóch z tych serwerów zainstalujemy serwer www, a na trzecim nie dokonamy żadnych zmian.

W pierwszej kolejności ściągamy role (chyba, że zrobiliśmy to wcześniej) geerlingguy.apache:

ansible-galaxy install geerlingguy.apache

# ansible-galaxy install geerlingguy.apache
- downloading role 'apache', owned by geerlingguy
- downloading role from https://github.com/geerlingguy/ansible-role-apache/archive/3.0.0.tar.gz
- extracting geerlingguy.apache to /root/.ansible/roles/geerlingguy.apache
- geerlingguy.apache (3.0.0) was installed successfull

Użyjemy tutaj wcześniej zdefiniowanego inventory i skonfigurowanego Ansibla tak aby logował się bezpośrednio po kluczu na instancje po użytkowniku ec2-user i nadawał uprawnienia użytkownika root.
Do tego w konfiguracji ansible.cfg użyłem:

[privilege_escalation]
become=True
become_method=sudo

Nasze inventory wygląda teraz tak jak poniżej:

ansible_inventory

[all]
ansible00 ansible_host=54.211.109.9 ansible_user=ec2-user
ansible01 ansible_host=18.208.169.62 ansible_user=ec2-user
ansible02 ansible_host=35.170.202.224 ansible_user=ec2-user

Nasz playbook wygląda tak:

ansible-playbook.yml

---
- hosts: all
  roles:
   - role: geerlingguy.apache
     when: ( inventory_hostname == "ansible00" ) or ( inventory_hostname == "ansible01" )
  tasks:
   - name: Verify hosts with apache
     service: name=httpd state=running
     ignore_errors: yes

Teraz możemy przejść do uruchomienia playbooka wydając komendę:

ansible-playbook -i ansible_inventory ansible-playbook.yml


Poniżej przedstawiam zrzut ekranu z ostatnimi informacjami widocznymi na ekranie:
(kliknij na screen, aby otworzyć w nowej karcie)

Podsumowanie


Artykuł zawiera tylko częściowe ogólne informacje, które pomogą rozpocząć pracę z narzędziem. Aby uzyskać więcej szczegółów, zachęcamy do zapoznania się z dokumentacją narzędzia dostępną pod adresemhttps://docs.ansible.com, w której znajdziecie wszystkie wymagane informacje do prawidłowego użytkowania Ansibla.

Szukasz administratora serwerów?

Nic prostszego.

Sprawdź jak możemy Ci pomóc.

Pakiety administracji od 150 zł netto. 

Dowiedz się więcej

Mogą Cię również zainteresować

comments powered by Disqus