Ansible – Wystartuj z Infrastructure as Code w 30 Sekund. To Dziecinnie Proste!
Słyszałeś o Ansible, ale nie wiesz, jak zacząć? To banalnie proste. Zapomnij o opasłych książkach, wielogodzinnych tutorialach i latach praktyki.
Wszystko, czego potrzebujesz, aby wystartować z Ansible, to kilka minut poświęconych na przeczytanie naszego artykułu. Gotowy?
Ansible Krok Po kroku. Co To Jest i Jak Zacząć?
Ansible jest niezwykle elastycznym i zarazem prostym do opanowania narzędziem do automatyzacji zadań i procesów, które pozwoli Ci efektywnie zarządzać infrastrukturą fizyczną (np. serwerami, komputerami, urządzeniami sieciowymi, routerami), czy chmurą (AWS, Azure, i innymi).
Bezsprzeczną zaletą narzędzia jest jego bardzo (bardzo, bardzo, bardzo!) wysoka przystępność. Pracę z Ansible naprawdę da się zacząć w 30 sekund, zupełnie nie znając podstaw! Opanowanie wszystkich możliwości, jakie oferuje, wymaga 1-2 dni praktyki, ale już od pierwszej minuty poczujesz potęgę tego rozwiązania!
No dobrze, pora przejść od słów do czynów.
Przykład Konfiguracji Ansible w 30 Sekund. Prawdziwa Historia
Na forum naszej społeczności SysOps/Devops pojawiło się kiedyś następujące pytanie:
„Jak mógłbym przyjemnie zaktualizować oprogramowanie na kilku raspberry pi, które posiadam? Obecnie muszę się logować po ssh. Myślałem o jakimś skrypcie w bashu, który w pętli przejdzie po urządzeniach, słyszałem też o Ansible – ale jak to zrobić?”
A oto co napisałem w odpowiedzi:
pip install ansible echo -e ‘[grupa_rpi] \n rpiA \n rpiB` >> /etc/ansible/hosts ansible -m shell -a ‘tu wstaw swoją komendę instalacji’ grupa_rpi
Tyle! Stworzenie tej porady zajęło mi 30 sekund!!!
Oczywiście, powyższa komenda odnosi się do konkretnego przypadku i nie jest zoptymalizowana. Jednak moim celem było pokazanie możliwości wykonania skryptu w jednej linii i zaprezentowanie, z jaką łatwością możecie zastąpić komendy ssh modułem Ansible shell.
Parę sekund później uzupełniłem komentarz o 25-minutowe wideo (w języku ang.) Ansible 101 – on a Cluster of Raspberry Pi 2s przygotowane przez Jeffa Gerlinga, jednego z najbardziej aktywnych propagatorów Ansible w społeczności międzynarodowej. Dodałem go jako jeden z wielu przykładów na to, jak łatwo zacząć swoją przygodę z narzędziem.
Ansible oferuje Wam prostotę, wydajność i wygodę. Doprawdy żal z niego nie skorzystać.
Umiesz Liczyć? Licz Na Społeczność
Jeśli szukasz informacji na temat Ansible, nie jesteś zdany na siebie. Jest to jeden z najbardziej dynamicznych projektów na Github, z zaangażowaną i aktywną społecznością. Dzieje się tak pewnie dlatego, że to narzędzie proste w obsłudze, wszechstronne i przydatne. Warto w nie inwestować również dlatego, że ciągle się rozwija. Jeśli brakuje w nim jakiejś funkcjonalności, możesz być pewien, że niedługo się pojawi.
Jak Skorzystać z Pomocy Społeczności Ansible?
Ale w czym właściwie może Ci pomóc społeczność Ansible?
1. Pomoc przy rozwiązywaniu problemów
Po pierwsze, społeczność okazuje się nieoceniona zwłaszcza, kiedy stawiasz pierwsze kroki z Ansible. Ile razy ślęczałeś nad skryptami dniami i nocami, nie wiedząc, jak zautomatyzować jakiś proces? Używając Ansible, nie jesteś sam!
Jeśli masz jakiekolwiek pytanie, nie możesz poradzić sobie z jakimś problemem, to zarówno na forum globalnym jak i na naszym lokalnym „podwórku” uzyskasz pomoc zazwyczaj w ciągu 5-30 minut od zadania pytania (no dobra, w nocy czasem trzeba uzbroić się w większą cierpliwość 🙂 ).
To naprawdę jest potęga, której nie sposób przecenić!
2. Gotowe rozwiązania na wyciągnięcie ręki
To jeszcze nie wszystko. Powiedzmy, że chcesz zainstalować i skonfigurować jakiś program (nawet taki, którego nie znasz). Niespodzianka! Prawdopodobnie znajdziesz gotowy skrypt w Internecie! Nie musisz odkrywać koła na nowo, z Ansible oszczędzisz swój czas.
No dobrze, Ale Jak Najlepiej Zacząć Przygodę z Ansible?
Już odpowiadam.
Po pierwsze, czytaj dalej. Krok po kroku przeprowadzę Cię przez instalację Ansible i pierwsze komendy.
Po drugie, na samym końcu artykułu znajdziesz sporo superprzydatnych linków do wideo z meetupów SysOps/DevOps, które bardzo polecam.
Tyle Teorii, Pora na Ansible w Praktyce!
Ansible możemy zainstalować na wiele sposobów:
- Za pomocą managera paczek naszego systemu, np. Debian/Ubuntu:
apt-get install ansible
- Za pomocą managera paczek języka Python:
pip install ansible
- Pobierając Ansible bezpośrednio z Github.com – klonując repozytorium lub pobierając plik archiwum (np. zip).
UWAGA: Ja polecam instalację niezależną od naszego systemu w środowisku wirtualnym Pythona – virtualenv [Artykuł o virtualenv dla ciekawych]:
pip install virtualenv virtualenv nasz_venv source nasz_venv/bin/activate pip install ansible
Powyższy proces można sobie uprościć, używając przygotowanego przeze mnie na potrzeby szkoleń (i używanego w podobnej formie produkcyjnie w mojej firmie) środowiska dostępnego na github.com.
- Najpierw instalujemy wymagane pakiety, których używam w swojej pracy (zazwyczaj opcjonalne):
sudo apt-get install python-virtualenv libpq-dev python-all-dev libffi-dev
- Następnie klonujemy moje repozytorium:
git clone https://github.com/sirkubax/szkolenie3 cd szkolenie3 source environment.sh
- I już możemy wykonywać akcje. Oto najprostsza z nich:
ansible -m ping all
Co tu się właściwie stało?
Kilka słów wyjaśnienia odnośnie tego, co właśnie zrobiliśmy.
Kluczowe operacje wykonywane są na dwóch etapach, podczas instalacji pakietów dodatkowych oraz przy instalacji pliku environment.sh. To w nim tworzony jest katalog ze środowiskiem wirtualnym Pythona o nazwie venv, następnie ładowany jest on do kontekstu naszej konsoli source venv/bin/activate, po czym instalowany jest Ansible z zależnościami pip install -r requirements.txt.
Komentarz do virtualeny
Przy ponownym otwarciu terminala musimy załadować ponownie kontekst naszego środowiska wirtualnego scieżka_do_katalogu/venv/bin/activate. Tę linię można również dodać do naszego pliku terminala, np. ~/.bashrc .
Przykładowy wynik powyższej komendy powinien wyglądać tak:
# Ta komenda ‘pinguje’ localhost zdefiniowany w domyślnym inventory /etc/ansible/hosts $ ansible -m ping localhost # otrzymamy taki wynik localhost | SUCCESS => { "changed": false, "ping": "pong" }
Prawda, że to proste?
Gratulacje! Instalacja Ansible Zakończona Sukcesem!
Zainstalowałeś Ansible i sprawdziłeś komunikację ze wszystkimi serwerami w swojej infrastrukturze (domyślnie jest to localhost). Jeśli używałeś virtualenv, to dodatkowo masz jeszcze niezależną od systemu instalację Ansible, co samo w sobie ma wiele plusów. Ale o tym kiedy indziej?
Jasne, instalacja i konfiguracja Ansible to rzeczywiście pestka. Ale jak robić ciekawsze rzeczy, skomplikowane, wieloetapowe skrypty, automatyzację??
Wszystko po kolei.
Ansible – Zaawansowane Przykłady
Aby móc zmierzyć się z bardziej zaawansowanymi przykładami wykorzystania Ansible, musisz poznać kilka podstawowych pojęć:
- Moduł – komenda (podprogram), którą wykonujemy. W przykładzie powyżej użyliśmy modułu ping.
- Task – tak nazywamy użycie modułu w „skrypcie Ansible” zwanym playbook.
- Playbook – to plan wykonania, czyli nasz skrypt zawierający definicję hostów, zmienne i zbiór zadań (tasków), które będziemy uruchamiać.
Zobaczmy, jak może wyglądać przykładowy playbook, który ’przejdzie’ po naszych serwerach i wykona jakąś prosta akcję. Użyjemy banalnego przykładu sprawdzenia daty i miejsca na dysku i wypisania ich w naszym terminalu.
Językiem formatowania playbooków jest YAML [wikipedia Yaml]. Wymusza on odpowiednie wcięcia tekstu.
- hosts: all tasks: - name: "ping all" ping: - name: "execute a shell command" shell: "date; whoami; df -h;"
Przykład Ansible – Wyjaśnienie
Na wszystkich maszynach zdefiniowanych w naszym Inventory wykonujemy moduł ping (który zwraca pong jeśli komunikacja przebiega prawidłowo), a następnie sprawdzamy datę na maszynie – date, kim jesteśmy – whoami i zajęcie dysku za pomocą modułu shell.
Nic skomplikowanego – ale to dopiero początek…
Przy okazji padło tu kolejne pojęcie:
- Inventory – to zbiór naszych obiektów (maszyn, urządzeń, komputerów) + przydatne zmienne.
No dobrze, a jak to uruchomić?
Ano tak:
$ ansible-playbook sciezka/nazwa_playbooka.yml
Tutaj mała ciekawostka: powyższe moduły uruchamiane ręcznie z konsoli wyglądałyby tak:
$ ansible -m ping all $ ansible -m shell -a 'date; whoami' all
Czy warto więc pisać playbooki? Oczywiście. Wyobraź sobie skomplikowaną instalację oprogramowania składającą się z wielu etapów, z dodatkową logiką. Z poziomu konsoli jest to zadanie nie do odtworzenia. Dzięki playbookom możemy je wykonać dowolną liczbę razy.
Co dalej?
To dopiero początek drogi. Playbook jako zbiór zadań nabiera mocy dzięki temu, że można go uruchamiać wielokrotnie. Wspomniałem wyżej, że zadania w playbooku mogą mieć „logikę”.
Wyobraźmy sobie, że instalujemy serwery Apache i chcemy skonfigurować parametry (np. poziom logowania czy ilość przydzielonej pamięci) zależnie od tego, co zastaniemy na docelowym serwerze. Musimy wtedy jakoś sprawdzić ich wartość (przed wykonaniem playbooka lub dynamicznie w trakcie wykonania), a ten parametr – zmienną – umieścić w docelowej konfiguracji.
Zaznaczam, że to przykładowy i nieco bardziej zaawansowany playbook. Nie przejmuj się, jeśli niektóre rzeczy wydadzą Ci się skomplikowane, moim głównym celem było pokazanie Ci możliwości narzędzia, choć przyznam już w tym miejscu, że dokonałem pewnych uproszczeń (na prawdziwym środowisku produkcyjnym zrobiłbym to inaczej). Na przykład, osobiście nie lubię modułu lineinfile i zamiast niego polecam template, ale to już materiał na kolejny artykuł.
Poniżej załączam playbook z prostą instalacją Apache, lineinfile (do ustawienia poziomu logowania) + handler.
- hosts: apache become: True vars: apache2_log_level: "info" handlers: - name: restart apache service: name: apache state: restarted enabled: True notify: - Wait for instances to listen on port 80 - name: reload apache service: name: apache state: reloaded notify: - Wait for instances to listen on port 80 - name: Wait for instances to listen on port 80 wait_for: state: started host: localhost port: 80 timeout: 15 delay: 5 tasks: - name: Update apt cache apt: update_cache=yes cache_valid_time=7200 - name: Install packages apt: name={{ item }} with_items: - apache2 notify: - restart apache - name: Configure apache2 log level lineinfile: dest: /etc/apache2/apache2.conf line: "LogLevel {{ apache2_log_level }}" regexp: "^LogLevel" notify: - reload apache
Uruchomenie playbooka:
ansible-playbook playbooks/install_apache_example.yml
Wynik takiego playbooka może wyglądać tak (dla przypadku gdy serwer był uprzednio skonfigurowany).
PLAY [apache] ****************************************************************** TASK [Update cache] ************************************************************ Friday 02 March 2018 18:57:53 +0100 (0:00:00.060) 0:00:00.060 ********** ok: [mgmt2.muszynski.pro] TASK [Install packages] ******************************************************** Friday 02 March 2018 18:58:00 +0100 (0:00:06.167) 0:00:06.227 ********** ok: [mgmt2.muszynski.pro] => (item=[u'apache2']) TASK [configure apache2 log level] ********************************************* Friday 02 March 2018 18:58:01 +0100 (0:00:01.214) 0:00:07.441 ********** ok: [mgmt2.muszynski.pro] PLAY RECAP ********************************************************************* mgmt2.muszynski.pro : ok=3 changed=0 unreachable=0 failed=0
STOP! Pora na Ważny Komunikat: Webinar + Szkolenie
Liczba zastosowań Ansible oraz bogactwo jego funkcjonalności dostarczają materiału na niejeden artykuł. Można by poświęcić im wręcz całą serię wydawniczą. Nie wspomniałem na przykład w ogóle o szablonach i re-używalności, to jest o rolach. Przed nami także jeszcze inne bardzo ciekawe tematy takie jak czerpanie gotowych szablonów ze społeczności czy zarządzanie zmiennymi.
Biorąc pod uwagę powyższe, wspólnie z chłopakami z Chmurowiska postanowiliśmy przygotować PRAKTYCZNY WEBINAR, na który już teraz Cię zapraszamy. W jego trakcie pokażę Ci dużo więcej dobrych praktyk wdrażania automatyzacji w IT oraz traktowania infrastruktury i chmury jako kod. A jeżeli zechcesz zostać mistrzem Ansible i rozwijać skrzydła z moją pomocą, z przyjemnością przywitam Cię na moim 2-dniowym szkoleniu „Ansible w Chmurze – Droga Eksperta!”.
P.S. Ansible – linki, linki, linki
A oto i obiecane link do prelekcji z meetupów SysOps/DevOps:
- Dobre wprowadzenie do Ansible Kamil Grabowski – Ansible w praktyce – UW@IT 21.01.2015
- Przykład na to, jak można zacząć z Ansible w korporacji Łukasz Dajek, Maciej Raszplewicz – Jak budujemy DevOps w Aviva
- Megaciekawe zaawansowane przykłady Sergiusz Bazański – Kiedy chcesz, żeby ludzie mogli się włamać – SysOps/DevOps #5 + ich repozytorium
- Na koniec moja (trochę stara, ale bardzo obszerna) prelekcja Jakub Muszyński – Ansible – practical use-case, czyli czego nie powiedzieli Ci rodzice
- Oraz przykład na to, jak można dynamicznie budować infrastrukturę w AWS (w języku ang.) [#46] Digging Bitcoins/SiaCoins on spot instances – having fun in AWS – Jakub Muszyński
Zachęcam do obejrzenia i do zobaczenia na webinarze, ZAREJESTRUJ SIĘ na niego jak najszybciej!
Już 21 czerwca dowiesz się, jak możesz wykorzystać AI w Twojej firmie. Damian Mazurek i Piotr Kalinowski wprowadzą Cię w świat sztucznej inteligencji i LLM.
Przed nami nowy rozdział! Chmurowisko dokonało połączenia z polskim Software Mind – firmą, która od 20 lat tworzy rozwiązania przyczyniające się do sukcesu organizacji z całego świata…
Grupa Dynamic Precision podjęła decyzję o unowocześnieniu swojej infrastruktury. Razem z Oracle Polska prowadzimy migrację aplikacji firmy do chmury OCI.
Już 21 czerwca dowiesz się, jak możesz wykorzystać AI w Twojej firmie. Damian Mazurek i Piotr Kalinowski wprowadzą Cię w świat sztucznej inteligencji i LLM.
Zapisz się do naszego newslettera i
bądź z chmurami na bieżąco!
z chmur Azure, AWS i GCP, z krótkimi opisami i linkami.