Хочется чего-то интересного, а интересно что-то автоматизировать в плане обслуживания.
Ansible
– инструмент в задачу которого будет управление всеми другими узлами через единый центр, взаимодействие осуществляется через SSH
соединение, либо с использованием логина и пароля, либо с помощью публичного ключа.
Пояснение по работе Ansible:
- через файл
hosts
происходит инвентаризация удаленный узлов, с которыми предстоит работа - через файл
playbook
(файла с расширениемYAML
) все также опираясь на файл инвентаризации (файлhosts
), но описывается список действий, к примеру: установить, обновить, переместить и т.д.
За основу беру свои заметки:
Что понадобится? несколько систем на с которыми центральная система будет взаимодействовать посредством Ansible
, у меня это будет
VM: Ubuntu 20.04 Server
Hostname: srv-us2004b
VM2: Ubuntu 18.04 Server
Hostname: srv-us1804c
IP: 172.33.33.133
VM3: Ubuntu 18.04 Server
Hostname: srv-us1804d
IP: 172.33.33.128
Шаг №1:
Обновляю систему Ubuntu 20.04
на самую последнюю версию установленных пакетов из дефолтных репозитариев:
ekzorchik@srv-us2004b:~$ sudo rm -Rf /var/lib/apt/lists && sudo apt-get update && sudo apt-get upgrade -y
Шаг №2:
Текущая версия приложения Ansible
в дефолтных репозитариях Ubuntu 20.04 Server:
ekzorchik@srv-us2004b:~$ apt-cache show ansible | grep Version Version: 2.9.6+dfsg-1 ekzorchik@srv-us2004b:~$ ekzorchik@srv-us2004b:~$ sudo apt-get install -y ansible ekzorchik@srv-us2004b:~$ sudo apt-get remove --purge -y ansible
Шаг №3:
Но использовать будут самую последнюю доступную в подключаемых репозитариях:
ekzorchik@srv-us2004b:~$ sudo apt-add-repository ppa:ansible/ansible ekzorchik@srv-us2004b:~$ apt-cache show ansible | grep Version Version: 4.9.0-1ppa~focal -> самая последняя актуальная для моего дистрибутива Version: 2.9.6+dfsg-1 ekzorchik@srv-us2004b:~$ ekzorchik@srv-us2004b:~$ sudo apt-get install -y ansible
Шаг №4:
На узлах в качестве учетной записи использую логин ekzorchik
и дабы команды с правами суперпользователя исполнялись, изменяю файл visudo:
ekzorchik@srv-bionic:~$ sudo visudo ekzorchik ALL=(ALL) NOPASSWD:ALL
Шаг №5:
Копирую публичный ключ с Ubuntu 20.04 Server
на узлы с которыми буду взаимодействовать:
ekzorchik@srv-us2004b:~$ ssh-keygen -t rsa ekzorchik@srv-us2004b:~$ ssh-copy-id -i ~/.ssh/id_rsa.pub ekzorchik@172.33.33.133 ekzorchik@srv-us2004b:~$ ssh-copy-id -i ~/.ssh/id_rsa.pub ekzorchik@172.33.33.128 sudo nano /etc/ssh/sshd_config PubkeyAuthentication yes sudo service ssh restart
Проверяю что могу подключаться без ввода пароля:
ekzorchik@srv-us2004b:~$ ssh -l ekzorchik 172.33.33.133 "uname -a" Linux srv-bionic 4.15.0-128-generic #131-Ubuntu SMP Wed Dec 9 06:57:35 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux ekzorchik@srv-us2004b:~$ ssh -l ekzorchik 172.33.33.128 "uname -a" Linux srv-bionic 4.15.0-136-generic #140-Ubuntu SMP Thu Jan 28 05:20:47 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux ekzorchik@srv-us2004b:~$
Шаг №6:
Изменяю под кем ansible
будет взаимодействовать с узлами и указываю какой приватный ключ использовать:
ekzorchik@srv-us2004b:~$ sudo nano /etc/ansible/ansible.cfg #remote_user = root remote_user = ekzorchik private_key_file = /home/ekzorchik/.ssh/id_rsa #порой переданная строка с консоли ни с первого раза отрабатывает, значит нужно увеличить таймаут: timeout=20 #deprecation_warnings = True deprecation_warnings=False
После не забываем сохранить внесенные изменения.
Шаг №7:
Создаю дефолтную копию инвентаризованного файла hosts:
Синтаксис хостов внутри файла hosts
[group] IP DNS DNS[001:006].polygon.local DNS-[001:006].polygon.local ekzorchik@srv-us2004b:~$ sudo mv /etc/ansible/hosts /etc/ansible/hosts.default
Шаг №8:
Создаю группу хостов в файле hosts:
ekzorchik@srv-us2004b:~$ sudo nano /etc/ansible/hosts [bionic] 172.33.33.133 172.33.33.128
Шаг №9:
Пробую взаимодействовать через Ansible
с удаленными хостами:
ekzorchik@srv-us2004b:~$ sudo ansible bionic -m shell -a 'uname -a' [DEPRECATION WARNING]: Distribution Ubuntu 18.04 on host 172.33.33.128 should use /usr/bin/python3, but is using /usr/bin/python for backward compatibility with prior Ansible releases. A future Ansible release will default to using the discovered platform python for this host. See https://docs.ansible.com/ansible- core/2.11/reference_appendices/interpreter_discovery.html for more information. This feature will be removed in version 2.12. Deprecation warnings can be disabled by setting deprecation_warnings=False in ansible.cfg. 172.33.33.128 | CHANGED | rc=0 >> Linux srv-bionic 4.15.0-136-generic #140-Ubuntu SMP Thu Jan 28 05:20:47 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux [DEPRECATION WARNING]: Distribution Ubuntu 18.04 on host 172.33.33.133 should use /usr/bin/python3, but is using /usr/bin/python for backward compatibility with prior Ansible releases. A future Ansible release will default to using the discovered platform python for this host. See https://docs.ansible.com/ansible- core/2.11/reference_appendices/interpreter_discovery.html for more information. This feature will be removed in version 2.12. Deprecation warnings can be disabled by setting deprecation_warnings=False in ansible.cfg. 172.33.33.133 | CHANGED | rc=0 >> Linux srv-bionic 4.15.0-128-generic #131-Ubuntu SMP Wed Dec 9 06:57:35 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux ekzorchik@srv-us2004b:~$
Если Ваш собственный файл с хостами находится в другом месте то чтобы выполнить по нему действия следует задействовать ключ «-i»:
ansible -i ~/hosts -m ping all
где ключ
- -m → использовать модуль
- -a ‘uptime’ → передать параметр к задействованному модулю
Или можно указать конкретный хост, а не применять запрос ко всей группе хостов обозначенных в квадратных скобках:
ekzorchik@srv-us2004b:~$ sudo ansible 172.33.33.133 -m shell -a 'uname -a' 172.33.33.133 | CHANGED | rc=0 >> Linux srv-bionic 4.15.0-128-generic #131-Ubuntu SMP Wed Dec 9 06:57:35 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
На заметку: Дабы при выполнении через ansible
не было диагностических сообщений на консоль уже после того как все отлажено и работает, можно добавить параметр:
ekzorchik@srv-us2004b:~$ sudo nano /etc/ansible/ansible.cfg #deprecation_warnings = True deprecation_warnings=False
После не забываем сохранить внесенные изменения.
Отлично, подключение успешно через публичный ключ прошло.
Шаг №10:
Чтобы обновить обслуживаемые системы до последнего состояния в рамках текущего релиза, для этого использую модуль raw:
ekzorchik@srv-us2004b:~$ sudo ansible bionic -m shell -a 'sudo rm -rf /var/lib/apt/lists && sudo apt-get update && sudo apt-get autoremove -y && sudo apt-get clean && sudo apt-get upgrade -y' ekzorchik@srv-us2004b:~$ sudo ansible bionic -m shell -a 'uname -a' 172.33.33.128 | CHANGED | rc=0 >> Linux srv-bionic 4.15.0-136-generic #140-Ubuntu SMP Thu Jan 28 05:20:47 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux 172.33.33.133 | CHANGED | rc=0 >> Linux srv-bionic 4.15.0-128-generic #131-Ubuntu SMP Wed Dec 9 06:57:35 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux ekzorchik@srv-us2004b:~$ ekzorchik@srv-us2004b:~$ sudo ansible bionic -m shell -a 'lsb_release -a' 172.33.33.133 | CHANGED | rc=0 >> Distributor ID: Ubuntu Description: Ubuntu 18.04.6 LTS Release: 18.04 Codename: bionicNo LSB modules are available. 172.33.33.128 | CHANGED | rc=0 >> Distributor ID: Ubuntu Description: Ubuntu 18.04.6 LTS Release: 18.04 Codename: bionicNo LSB modules are available. ekzorchik@srv-us2004b:~$
Странно почему версия ядра разная, 128
и 136
, разбираю как сделать одинаковыми или более новыми:
ekzorchik@srv-us2004b:~$ sudo ansible bionic -m shell -a 'sudo apt-get install -y linux-generic linux-headers-generic linux-image-generic' ekzorchik@srv-us2004b:~$ sudo ansible bionic -m shell -a 'sudo shutdown -r' 172.33.33.133 | CHANGED | rc=0 >> Shutdown scheduled for Fri 2021-11-26 12:32:37 MSK, use 'shutdown -c' to cancel. 172.33.33.128 | CHANGED | rc=0 >> Shutdown scheduled for Fri 2021-11-26 12:32:36 MSK, use 'shutdown -c' to cancel. ekzorchik@srv-us2004b:~$ ekzorchik@srv-us2004b:~$ sudo ansible bionic -m shell -a 'uname -a' 172.33.33.133 | CHANGED | rc=0 >> Linux srv-bionic 4.15.0-162-generic #170-Ubuntu SMP Mon Oct 18 11:38:05 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux 172.33.33.128 | CHANGED | rc=0 >> Linux srv-bionic 4.15.0-162-generic #170-Ubuntu SMP Mon Oct 18 11:38:05 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
Отлично, что мне и требовалось. А требовалось, как через Ubuntu 20.04
с помощью Ansible
взаимодействовать с удаленными узлами. Я понимаю, что выше написанное это малая часть, но начинать же нужно с чего-то, а после если требует задача усложнять взаимодействие.
Итого, на этом пока все, с уважением автор блога Олло Александр aka ekzorchik.