S1e01
Впитываем вводные
Для того что-бы быть в рынке, тебе нужно знать базу автоматизации. Если умеешь готовить Ansible, то и подобные штуки вроде Puppet и Chef не будут для тебя сюрпризом. Хотя…
Если коротко, Ansible позволяет автоматизировать настройку серверов. Ты описываешь все свои действия в yml формате и запускаешь. Тем самым экономишь кучу времени.
Ну а кто набрел на этот пост случайно, камон к нам в Пантеон.
Понятие — Инфраструктура как код это как раз про Ansible и подобные решения.
Ansible подходит и для настройки своего локального окружения. Например накатил чистую систему, прогнал плейбуки, а он тебе поставил и настроил весь софт.
Для установки этого чудо софта, тебе понадобится Linux. Все примеры будут актуальны для Ubuntu 22.04-24.04 + Python 3.10.
Если у тебя винда, то из вводной части, делаешь еще одну виртуалку для работы. Но в идеале, поставь себе Линукс второй системой, либо заведи наконец WSL!
Но можешь и под свои реалии своё окружение поднять, не возбраняется. Но баги будешь самостоятельно разруливать.
Устанавливаем Ansible
sudo apt update
sudo apt install software-properties-common
sudo add-apt-repository --yes --update ppa:ansible/ansible
sudo apt install ansible
ansible --version
Готово. Если вывелась версия 2.. то, ты молодец и у тебя всё получилось. Если вышла черепаха, попробуй самостоятельно разобраться где ты накосорезил.
Парадигма Фридмена — Упёрся, сообщи!
Всегда учись самостоятельно решать проблемы, это еще одна база успешного девопс-инженера. Но а если совсем никак, задавай вопрос своему наставнику.
Если не получается за вменяемое время что-то пофиксить — сообщи! Но при условии, что ты предпринял все силы на решение проблемы.
Так. Установка прошла успешно.
Создаем шаблон
Создаем структуру папок и файлов.
Эта структура позволит тебе запускать плейбуки (автоматизацию) для нескольких окружений. Например у тебя есть продакшен и стейдж.
Корневая папка infra, внутри 4 папки: group_vars, inventory, roles, templates + 3 файла ansible.cfg, production.yml, stage.yml.
Давай разберем, что где когда.
Структура папок
group_vars - Тут будем описывать групповые переменные, то есть общие для групп серверов. Например тут будет лежать файл all.yml, в котором мы опишем общие переменные для всех наших серверов.
inventory - В этом каталоге, будем описывать нашу инфраструктуру. Какие сервера у нас есть, какие у них IP адреса и т.п. Этакая инвентаризация инфраструктуры.
roles - Здесь хранятся все роли. Например правила установки nginx, php и т.п. включая рендеринг шаблонов конфигурации. Короче логика для каждого отдельного случая.
templates - шаблоны для конфигов и прочей хуйни.
Структура файлов
ansible.cfg - Настройки самого Ansible, чтобы работал как нам нужно.
production.yml - Какие роли будут использоваться для продакшена. Например на продакшен нужно установить haproxy и nodejs, а на стейдж nginx и php.
stage.yml - Тоже самое, но для стейдж серверов. Описываем какие роли нужно заинклудить, чтобы они отработали именно на стейдж сервере.
Настраиваем конфиг
[defaults]
host_key_checking = false
fact_caching = jsonfile
fact_caching_connection = /tmp/facts_cache
library = library
gather_facts = true
interpreter_python = auto
[connection]
pipelining = True
[ssh_connection]
pipelining = True
Описание параметров
host_key_checking - Отключаем проверку SSH ключа, чтобы лишний раз не ругалось, можно оставить в true если упарываешься по безопасности.
fact_caching - Включаем кэширование фактов. Каждый раз когда Ansible подключается к серверу, он собирает информацию об этом сервере. Чтобы избежать тормозов, мы кэшируем эти данные в json формат.
fact_caching_connection - Где храним кэшированные факты, путь можешь изменить на любой. После сбора фактов, загляни в эти файлы и всё сразу станет ясно.
library - В какой папке будут искаться дополнительные модули. Если пишешь свои модули, оно тебе пригодится. Но на первое время оно не нужно, можешь из конфига это выкосить.
gather_facts - Сообщаем Ansible, чтобы перед выполнением задач, он собирал факты с серверов (ip адреса, интерфейсы и т.п.).
interpreter_python - Автоматически определять какой интерпретатор python запустить. Например у тебя установлено несколько версий. Оно само определит и не будет ебать мозги.
pipelining - Повышает производительность за счет уменьшения количества операций передачи данных между хостами. Полезно при медленных сетевых соединениях. Аналогично и для блока [ssh_connection]
.
Чтобы Ansible смог подключиться к подопытным серверам, тебе нужно закинуть свой публичный SSH ключ на все настраиваемые сервера. Это ты уже сделал в вводном уроке.
В инфраструктуре продакшена можно опустить сбор всех фактов, это ощутимо ускорит работу. А оставить сбор только нужных фактов.
Делается это так:
Вся настройка серверов происходит именно под root пользователем, никак иначе.
Есть исключения, например ты хочешь настраивать не сам сервер, а что-то в домашней папке какого-то пользователя. Тогда root не обязателен.
Ansible нужно запускать под обычным пользователем.
Ну и самое важное! Будь аккуратен с копипастой кода из уроков, порой в нем будут встречаться опечатки. Это сделано намеренно, чтобы ты включил внутренний режим дебага и подумал своеё головой. Так ты со временем выработаешь насмотренность.
Подводим итоги
- У тебя установлен Ansible.
- Ansible работает и показывает версию.
- Все работает под обычным юзером, не под рутом.
- Создана структура папок и файлов.
Домашнее задание
- Если всё получилось, ты молодец.
- Скинь мне скриншоты со своими результатами.
- Погугли какие параметры для конфига существуют.
- Добавь в конфиг путь до своего ssh ключа.
- Добавь в конфиг путь к файлу логов.
На этом бесплатные уроки закончились, если хочешь продолжить и преисполниться, вписывайся в наш пантеон.