Ansible to szeroko stosowane narzędzie do zarządzania konfiguracją napisane w języku Python, które pomaga konfigurować pojedyncze lub wiele maszyn jednocześnie. Ansible może być używane do wykonywania następujących zadań
- Konfiguracja od zera pojedynczego lub wielu węzłów
- Deployments
- Zmiany konfiguracji
- Patching
- Zarządzanie usługami
- i wielu innych
Ansible jest powszechnie używane ze względu na swoją prostotę. Kod Ansible jest napisany w języku YAML, nie wymaga też instalacji agenta na zdalnej maszynie. Ansible używa portu 22 (SSH), aby połączyć się ze zdalną maszyną i dokonać niezbędnych zmian.
Każda maszyna, która może połączyć się ze zdalną maszyną na porcie 22, może stać się węzłem kontrolnym. Węzeł kontrolny jest miejscem, w którym można zainstalować Ansible, a węzeł zarządzany jest zarządzany przez węzły kontrolne.
Przyjrzyjmy się instalacji Ansible na węźle kontrolnym.
- Instalacja Ansible w systemie CentOS 7:
- Instalacja Ansible na CentOS 8:
- Instalacja Ansible na Ubuntu:
- Instalacja Ansible za pomocą Python PIP na CentOS, Debianie i Ubuntu:
- Konfigurowanie hostów kontrolera Ansible:
- Sprawdź połączenie węzła zarządzanego:
- host3 | SUCCESS => { „changed”: false, „ping”: „pong”}
- Zakończenie:
Instalacja Ansible w systemie CentOS 7:
Jako że Python jest jedynym warunkiem wstępnym do zainstalowania Ansible, zainstalujmy Pythona, wykonując poniższe polecenie.
$sudo yum install python3 -y
Aby zainstalować Ansible na CentOS 7, najpierw upewnij się, że repozytorium CentOS 7 EPEL jest zainstalowane. Wykonaj poniższe polecenie, aby zainstalować repozytorium epel.
$sudo yum install epel-release
Zaktualizuj systemowy indeks pakietów, wykonując poniższe polecenie update.
$sudo yum update -y
Gdy repozytorium jest zainstalowane, zainstaluj Ansible za pomocą menedżera pakietów yum. Wykonaj poniższe polecenie, aby zainstalować Ansible.
$sudo yum install ansible -y
Sprawdź, czy Ansible jest poprawnie zainstalowany i jaka jest jego wersja.
$ansible -v
Instalacja Ansible na CentOS 8:
Spójrzmy na kroki instalacji dla CentOS 8. Zainstalujmy pythona w systemie CentOS 8.
$sudo dnf install python3
Gdy python jest zainstalowany, zainstalujmy EPEL repo, wykonując poniższe polecenie.
$sudo dnf install epel-release -y
Zaktualizujmy systemowy indeks pakietów, wykonując poniższe polecenie update.
$sudo dnf update -y
Jesteśmy teraz gotowi do zainstalowania Ansible. Wykonaj poniższe polecenie, aby zainstalować Ansible.
$sudo dnf install ansible -y
Sprawdź, czy Ansible jest zainstalowany poprawnie i w jakiej jest wersji.
$ansible -v
Instalacja Ansible na Ubuntu:
Python jest obecnie domyślnym pakietem w większości dystrybucji Linuksa. Jeśli nie masz zainstalowanego pythona, wykonaj poniższe polecenie, aby zainstalować pakiet python.
$sudo apt-get install python3
Aby zainstalować Ansible w Ubuntu, najpierw zainstalujmy repozytorium, wykonując poniższe polecenie.
$sudo apt-add-repository ppa:ansible/ansible
Zaktualizuj systemowy indeks pakietów, wykonując poniższe polecenie update.
$sudo apt-get update -y
Teraz zainstaluj Ansible.
$sudo apt-get install -y ansible
Sprawdź, czy Ansible jest zainstalowany poprawnie i w jakiej jest wersji.
$ansible -v
Instalacja Ansible za pomocą Python PIP na CentOS, Debianie i Ubuntu:
Niezależnie od tego, jakiego systemu operacyjnego używasz, możesz zainstalować Ansible za pomocą instalatora pakietów Pythona. Wykonajmy poniższe polecenie, aby zainstalować python3-pip.
Dla CentOS 7 i poniżej:
$sudo yum install python3 python3-pip -y
Dla CentOS 8:
$sudo dnf install python3 python3-pip -y
Dla Ubuntu i Debiana:
$sudo apt-get install python3 python3-pip
Jak już mamy zainstalowanego pythona i pip, wykonajmy poniższe polecenie w dowolnym systemie operacyjnym, aby zainstalować Ansible.
$sudo pip3 install ansible
Sprawdź, czy Ansible jest poprawnie zainstalowane i jaka jest jego wersja.
$ansible -v
Konfigurowanie hostów kontrolera Ansible:
Musimy najpierw skonfigurować plik „hosts”, zanim zaczniemy komunikować się z innymi węzłami. Ten plik będzie miał wszystkie IP lub nazwy hostów zarządzanych węzłów.
Uwaga: Nie zawsze jest konieczne używanie pliku hosts do łączenia się z zarządzanymi węzłami. Ale wtedy za każdym razem, musimy użyć IP lub nazwę hosta serwera zarządzanego węzła podczas wykonywania każdego polecenia.
Utwórz plik (jeśli jeszcze go nie ma) z uprawnieniami roota wykonując poniższe polecenie:
$sudo touch /etc/ansible/hosts
Przed zapisem do pliku, spójrzmy i zrozummy przykładowy plik hosts:
alias ansible_ssh_host=your_node_server_ip
Plik hosts powinien być zgodny z powyższą składnią. Spójrzmy na każdy parametr.
: Ten parametr tworzy grupę. Wszystkie adresy IP węzłów zarządzanych lub nazwy hostów pod parametrem group_name będą należeć do tej samej grupy. Na przykład, jeśli mamy wiele serwerów internetowych w naszej infrastrukturze, możemy dodać wszystkie adresy IP lub nazwy hostów węzła zarządzanego tutaj.
alias: Ten parametr jest używany do nadania serwerowi węzła zarządzanego alias do identyfikacji serwera węzła zarządzanego. Na przykład, jeśli mamy wiele serwerów WWW w naszej infrastrukturze, możemy podać host1, host2, host3 jako alias. Główną zaletą podawania aliasu jest to, że gdy będziemy wykonywać polecenie Ansible w celu zmiany konfiguracji pojedynczego serwera, możemy użyć aliasu, aby zidentyfikować i wykonać wymagane zadanie na serwerze.
ansible_ssh_host=your_node_server_ip: Ten parametr skieruje alias na adres IP węzła zarządzanego lub nazwę hosta.
Będziemy używać CentOS 8 jako kontrolowanego węzła z Ansible. Jak wspomniano powyżej, Ansible używa 22 portu zdalnego hosta do połączenia.
Założymy, że adresy IP naszego serwera węzłów zarządzanych CentOS to 192.168.0.2, 192.168.0.3 i 192.168.0.4.
Aby umożliwić węzłowi kontrolera Ansible komunikację z węzłami zarządzanymi, musimy potwierdzić, że węzły zarządzane są dostępne na porcie 22, który jest portem SSH. Wykonaj poniższe polecenie, aby potwierdzić łączność jeden po drugim na wszystkich trzech zarządzanych węzłach z poziomu kontrolera.
$ssh [email protected]
$ssh [email protected]
$ssh [email protected]
Zostaniesz poproszony o podanie hasła użytkownika root wszystkich węzłów. Ansible działa bardzo sprawnie, jeśli masz skonfigurowane uwierzytelnianie bez hasła między kontrolerem Ansible a zarządzanymi węzłami. Przy użyciu różnych parametrów w poleceniu Ansible uwierzytelnianie za pomocą hasła również może działać.
Jako że skonfigurowaliśmy łączność ssh między kontrolerem Ansible a zarządzanymi węzłami, skonfigurujmy plik hosts, aby połączyć się ze wszystkimi zarządzanymi węzłami. Jak wspomniano wcześniej, możemy dodać wiele aliasów serwerów węzłów w jednej grupie. W tym przypadku dodajmy wszystkie trzy węzły i przypiszmy im aliasy odpowiednio jako host1, host2 i host3. Nasz plik hosts powinien wyglądać jak poniżej po dodaniu wszystkich zarządzanych węzłów. Wykonaj poniższe polecenie, aby edytować plik hosts, który utworzyliśmy wcześniej.
Otwórz plik z uprawnieniami roota wykonując poniższe polecenie:
$sudo vi /etc/ansible/hosts
Dodajmy poniższą konfigurację w pliku hosts.
host1 ansible_ssh_host=192.168.0.2
host2 ansible_ssh_host=192.168.0.3
host3 ansible_ssh_host=192.168.0.4
Tutaj dodaliśmy wszystkie adresy IP węzłów zarządzanych i aliasy w grupie o nazwie node_servers.
Spróbujmy teraz połączyć się z zarządzanymi węzłami z poziomu kontrolera Ansible.
$ansible -m ping node_servers
Powyższe polecenie używa modułu ping do połączenia się z grupą „node_servers”, którą zdefiniowaliśmy w pliku hosts powyżej.
Możesz napotkać błędy z różnych powodów.
- Ansible domyślnie spróbuje połączyć się z zarządzanym węzłem używając twojej bieżącej nazwy użytkownika, jeśli jej nie podałeś. Jeśli ten użytkownik nie istnieje na serwerze węzła, otrzymasz poniższy błąd.
- Jeśli port ssh 22 nie jest otwarty dla połączenia na zarządzanych węzłach. (Jak wspomniano wcześniej, Ansible łączy się na porcie ssh)
- Jeśli IP w pliku hosts jest nieprawidłowe.
Jeśli którykolwiek z powyższych warunków zawiedzie, otrzymasz poniższy błąd.
host1 | UNREACHABLE! => {
"changed": false,
"msg": "Failed to connect to the host via ssh.",
"unreachable": true
}
host2 | UNREACHABLE! => {
"changed": false,
"msg": "Failed to connect to the host via ssh.",
"unreachable": true
}
host3 | UNREACHABLE! => {
"changed": false,
"msg": "Failed to connect to the host via ssh.",
"unreachable": true
}
Specjalnie powiedzmy Ansible, że powinien łączyć się z zarządzanymi węzłami w grupie „node_servers” z użytkownikiem james. Utwórz katalog group_vars, jak wspomniano poniżej.
$sudo mkdir /etc/ansible/group_vars
Pliki w tym katalogu są specjalnie używane do konfigurowania zmiennych, których możemy używać w naszych playbookach Ansible.
Utwórzmy plik zmiennych dla naszej konfiguracji, wykonując poniższe polecenie:
$sudo vim /etc/ansible/group_vars/node_servers.yml
Dodaj poniższy kod do pliku:
---
ansible_ssh_user: james
Plik YML zawsze zaczyna się od „—” w pierwszej linii. Zapiszmy i zamknijmy ten plik, gdy skończymy. Teraz Ansible będzie zawsze używać użytkownika james dla grupy node_servers, niezależnie od bieżącego użytkownika, którego używasz do uruchomienia polecenia.
Sprawdź połączenie węzła zarządzanego:
Teraz, gdy mamy skonfigurowane nasze hosty i wystarczająco dużo szczegółów konfiguracji, aby umożliwić nam pomyślne połączenie z naszymi węzłami zarządzanymi, możemy wypróbować to samo polecenie, które uruchomiliśmy wcześniej.
$ansible -m ping servers
Ansible zwróci dane wyjściowe takie jak to:
host1 | SUCCESS => {
"changed": false,
"ping": "pong"
}
host2 | SUCCESS => {
"changed": false,
"ping": "pong"
}
host3 | SUCCESS => { „changed”: false, „ping”: „pong”}
To jest podstawowy test, aby upewnić się, że Ansible ma połączenie ze swoimi zarządzanymi węzłami.
Zakończenie:
Nie jest konieczne używanie systemu operacyjnego CentOS dla zarządzanych węzłów. Możesz użyć tej samej konfiguracji testowej, której użyliśmy powyżej, dla CentOS, RedHat, Ubuntu i każdej innej dystrybucji Linuksa.
.