Ansible, będący otwartym projektem Red Hata opartym na języku Python, jest szeroko wykorzystywaną platformą do zarządzania ustawieniami i automatyzacji w IT.
Jego wszechstronność przejawia się w kompatybilności z większością współczesnych systemów operacyjnych, w tym Linux, Windows i macOS. Do definiowania konfiguracji systemów wykorzystuje deklaratywny język YAML (YAML Ain’t Markup Language).
Ansible, obok innych nowoczesnych platform do zarządzania konfiguracją, wywołał rewolucję w automatyzacji IT i wpłynął na standardy branżowe. Narzędzia do zarządzania konfiguracją stały się nieodłącznym elementem zestawu narzędzi DevOps i są kluczowe dla każdego nowoczesnego cyklu życia procesów IT. Ma to zastosowanie do każdego środowiska infrastruktury, niezależnie od tego, czy jest ono oparte na lokalnej infrastrukturze, hybrydzie, czy w chmurze. Ansible to nie tylko narzędzie dla DevOps, ale również wsparcie w automatyzacji wielu codziennych zadań administratora systemu.
Jedną z zalet Ansible jest brak konieczności stosowania agentów i niewielka bariera wejścia. Wystarczy dostęp SSH do docelowej maszyny oraz obsługa Pythona, która jest już standardowo zainstalowana w większości współczesnych systemów operacyjnych. Ponadto, jako lekkie narzędzie, może być wdrażane i wykorzystywane zarówno w nowatorskich, jak i starszych systemach.
Zastosowania Ansible
Orkiestracja
Ansible jest preferowanym narzędziem do organizowania różnorodnych zadań związanych z administracją systemem i wdrożeniami. Playbooki umożliwiają stosowanie tych samych schematów orkiestracji w różnych projektach, a dane konfiguracyjne oparte na YAML pozwalają na przechowywanie i wersjonowanie infrastruktury w repozytorium Git lub innej platformie kontroli wersji.
Wdrażanie aplikacji
Niezależnie od tego, czy jest to aplikacja o prostej strukturze, czy rozbudowane, wielowarstwowe wdrożenie, Ansible pozwala na zautomatyzowanie całego cyklu wdrażania aplikacji.
Bezpieczeństwo i zgodność
Ansible może także wspierać w zapewnieniu bezpieczeństwa systemów zgodnie z wytycznymi organizacji i standardami branżowymi. Umożliwia działanie na tysiącach serwerów, tworzenie audytów oraz naprawę luk w zabezpieczeniach, dając administratorowi pełną kontrolę nad środowiskiem.
Przyjrzyjmy się teraz kilku typowym zadaniom administratora systemu, które można zautomatyzować za pomocą Ansible.
Kopiowanie plików z systemu lokalnego lub zdalnego
Administratorzy systemów często kopiują pliki między katalogami. Pliki konfiguracyjne często muszą być kopiowane na serwery zdalne, a niekiedy konieczne jest przeniesienie plików z jednej lokalizacji zdalnej do innej.
Moduł kopiowania Ansible umożliwia wykonywanie tych zadań w playbooku.
Administratorzy systemów regularnie monitorują stan zarządzanych serwerów i wykonują zdefiniowane działania zgodnie z polityką organizacji. Jednym z takich zadań jest sprawdzanie czasu pracy serwera. Ansible umożliwia łatwe pobieranie i wyświetlanie wartości czasu sprawności. Poniżej przedstawiono przykład kopiowania konfiguracji NTP z systemu lokalnego na serwer zdalny za pomocą modułu kopiowania:
--- - hosts: all gather_facts: no become: yes tasks: - name: Copy a new ntp configuration file and back up the original, if it differs copy: src: ./ntp.conf dest: /etc/ntp.conf owner: root group: root mode: '0644' backup: yes
Konfigurowanie dodatkowych zadań cron
Konfigurowanie zadań harmonogramowych do wykonywania rutynowych czynności jest elementem zarządzania serwerem. Można zaplanować automatyczne tworzenie kopii zapasowych, aktualizacje, audyty itp. w określonych porach dnia lub miesiąca, zwiększając produktywność.
cron to jedno z narzędzi w systemie Linux, które wspiera planowanie, a Ansible może pomóc w dodawaniu lub modyfikowaniu tych zadań. Poniższy przykład ilustruje, jak łatwo ustawić zadanie rsync jako root na wybranych lub wszystkich serwerach za pomocą Ansible.
--- - hosts: all gather_facts: no become: yes tasks: - name: Deploy cron job cron: name: "Set rsync job" user: root minute: "5" hour: "4" job: "rsync -avz /path/to/folder1 /path/to/folder1 2>&1"
Zarządzanie dyskami i systemami plików
Ansible może być wykorzystywany do zarządzania dyskami, układami partycji, systemami plików i ich montowaniem, w tym /etc/fstab na serwerach Linux. Obsługuje to specjalny moduł Ansible. Poniżej znajduje się przykład, który tworzy partycję na dysku o pojemności 100 GB, formatuje ją za pomocą systemu plików ext4, tworzy nowy katalog do montowania partycji i montuje ją w zadanym katalogu. Wpis w /etc/fstab jest także generowany, montując partycję tymczasowo lub na stałe, zależnie od ustawień modułu.
--- - hosts: all gather_facts: no become: yes tasks: - name: Create a partition parted: device: /dev/sdb number: 1 part_end: "100%" state: present - name: Format new partition filesystem: fstype: ext4 dev: /dev/sdb1 - name: Create mount directory file: path: /data state: directory - name: Mount partition mount: path: /data src: /dev/sdb1 fstype: ext4 state: mounted
Gromadzenie logów serwera
Przechowywanie logów w odpowiednim miejscu jest niezbędne dla bezpieczeństwa, audytu i analizy. Ansible umożliwia gromadzenie dzienników z różnych serwerów w środowisku korporacyjnym i ich łatwe przechowywanie w określonej lokalizacji. Poniższy przykład pokazuje, jak to osiągnąć:
--- - hosts: all gather_facts: no become: yes tasks: - name: Find logs find: paths: /var/log/ patterns: '*.log' recurse: yes register: _logs - name: Fetch logs fetch: src: "{{ item.path }}" dest: /tmp/logs with_items: "{{ _logs.files }}"
Instalacja i usuwanie pakietów i oprogramowania
Pakiety są często instalowane na żądanie użytkownika lub jako część konfiguracji serwera. Może być także konieczne usunięcie pakietów, które nie są już potrzebne lub zawierają błędy. Ansible pozwala łatwo instalować i usuwać pakiety bez konieczności ręcznego wykonywania poleceń na każdym serwerze. Poniżej przedstawiono przykład instalacji i usunięcia pakietu dla serwerów Linux Ubuntu i RHEL/CentOS.
--- - hosts: ubuntu gather_facts: no tasks: - name: Install lsof utility apt: pkg: lsof state: latest sudo: yes - name: Remove ARP Scan utility apt: pkg: arp-scan state: absent sudo: yes --- - hosts: centos gather_facts: no tasks: - name: Install lsof utility yum: pkg: lsof state: latest sudo: yes - name: Remove ARP Scan utility yum: pkg: arp-scan state: absent sudo: yes
Zarządzanie użytkownikami
Użytkownicy i grupy tworzą podstawową strukturę, w oparciu o którą systemy oparte na Unix/Linux zarządzają dostępem i uprawnieniami. W dużej organizacji zarządzanie użytkownikami i grupami może być sporym wyzwaniem, nawet przy wsparciu automatyzacji.
Dzięki Ansible administrator systemu dysponuje potężnym narzędziem do tworzenia, modyfikowania i usuwania użytkowników i grup, z różnymi opcjami obsługiwanymi przez system operacyjny.
Poniżej przedstawiono prosty przykład, pokazujący tworzenie i usuwanie użytkowników i grup za pomocą Ansible. Po uruchomieniu tego poradnika, docelowe serwery będą miały utworzone grupy A i B z określonymi identyfikatorami GID, a użytkownik 1 zostanie usunięty, jeśli istnieje. Nowy użytkownik bez powłoki zostanie utworzony jako użytkownik2 z określonym UID, przypisanymi grupami i zablokowanym hasłem.
--- - hosts: all gather_facts: no become: yes tasks: - group: gid: 12310 name: groupA state: present - group: gid: 12311 name: groupB state: present - user: name: user1 state: absent - user: name: user2 uid: 12427 shell: /bin/false password_lock: yes groups: groupA, groupB
Zarządzanie usługami
Usługi to procesy działające w tle, które zapewniają pewne funkcjonalności, takie jak sshd dla połączeń SSH. Ansible umożliwia zarządzanie usługami systemowymi i użytkownika, na przykład ich uruchamianie, zatrzymywanie i ponowne uruchamianie. Poniżej znajduje się przykład podręcznika, który pokazuje, jak to zrobić:
--- - hosts: all gather_facts: no become: yes tasks: - name: Restart ssh daemon service: name: ssh state: restarted - name: Restart sssd daemon service: name: sssd state: stopped - name: Restart httpd daemon service: name: httpd state: started
W powyższym przykładzie usługa SSH zostanie ponownie uruchomiona, podczas gdy usługa SSSD zostanie zatrzymana. Usługa httpd zostanie uruchomiona na końcu. Ponieważ Ansible jest idempotentny, każda usługa, która już działa lub jest zatrzymana, nie zostanie zmieniona podczas ponownego uruchomienia, a jedynie jej stan. Należy pamiętać o sprawdzeniu nazwy usługi, ponieważ różne dystrybucje Linuksa używają różnych nazw, nawet dla tej samej usługi, takiej jak ssh i sshd.
Podsumowanie 👨💻
Ansible ułatwia pracę administratorom systemów, umożliwiając automatyzację powtarzalnych i czasochłonnych zadań, a także redukując ryzyko błędów ludzkich i wysiłek. Dodatkowo pozwala na przechowywanie danych konfiguracyjnych w scentralizowanym repozytorium kodu, takim jak Git, umożliwiając współpracę wielu użytkowników i śledzenie każdej akcji.
Aby dowiedzieć się więcej o Ansible i jego rozbudowanym zestawie modułów, zapoznaj się z jego dokumentacją.