Перейти к содержанию

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 ключ на все настраиваемые сервера. Это ты уже сделал в вводном уроке.

В инфраструктуре продакшена можно опустить сбор всех фактов, это ощутимо ускорит работу. А оставить сбор только нужных фактов.

Делается это так:

[defaults]
gather_subset = network, hardware

Вся настройка серверов происходит именно под root пользователем, никак иначе.

Есть исключения, например ты хочешь настраивать не сам сервер, а что-то в домашней папке какого-то пользователя. Тогда root не обязателен.

Ansible нужно запускать под обычным пользователем.

Ну и самое важное! Будь аккуратен с копипастой кода из уроков, порой в нем будут встречаться опечатки. Это сделано намеренно, чтобы ты включил внутренний режим дебага и подумал своеё головой. Так ты со временем выработаешь насмотренность.

Подводим итоги

  • У тебя установлен Ansible.
  • Ansible работает и показывает версию.
  • Все работает под обычным юзером, не под рутом.
  • Создана структура папок и файлов.

Домашнее задание

  • Если всё получилось, ты молодец.
  • Скинь мне скриншоты со своими результатами.
  • Погугли какие параметры для конфига существуют.
  • Добавь в конфиг путь до своего ssh ключа.
  • Добавь в конфиг путь к файлу логов.

Если тебе нужно проверить, какие параметры активны, используй команду:

ansible-config dump

На этом бесплатные уроки закончились, если хочешь продолжить и преисполниться, вписывайся в наш пантеон.