2025-03-31 21:27:22 +03:00
2025-03-31 14:06:16 +03:00
2025-03-31 14:06:16 +03:00
2025-03-31 14:06:16 +03:00
2025-03-31 14:06:16 +03:00
2025-03-31 21:02:50 +03:00
2025-03-31 14:06:16 +03:00
2025-03-31 21:27:22 +03:00
2025-03-31 14:06:16 +03:00

Patroni GitOps Config Manager

Назначение роли

Эта роль предназначена для безопасного управления конфигурацией кластера Patroni. Она предоставляет следующие возможности:

  • Создание резервных копий текущей конфигурации с timestamp
  • Валидация изменений конфигурации перед применением
  • Наглядное отображение различий между текущей и новой конфигурацией
  • Безопасное применение изменений через REST API Patroni
  • Проверка состояния кластера после изменений
  • Уведомление о необходимости перезагрузки нод (если требуется)
  • Автоматическое управление историей конфигурационных файлов

Требования

  • Ansible 2.9+
  • Доступ к Patroni REST API (порт 8008)
  • Python 3 для валидации YAML
  • Утилита diff с поддержкой цветного вывода

Переменные роли

Основные переменные, которые можно переопределить:

  • config_dir (по умолчанию: "/ansible/history") - директория для хранения истории конфигураций
  • config_file (по умолчанию: "/ansible/patroni_config.yaml") - путь к файлу с изменениями конфигурации
  • patroni_host (по умолчанию: "10.14.0.180") - хост кластера Patroni

Как внести изменения в конфиг кластера?

  1. Для начала создайте новый branch по имени кластера.

    # Переключиться на основную ветку (если нужно)
    git checkout main  
    
    # Получить последние изменения
    make git pull
    
    # Создать новую ветку
    make git new
    
  2. Сбилдите образ Ansible для локальной работы, тестов и линта.

    make docker build
    
  3. Внесите изменения в файл patroni_config.yaml. Все изменения буду добавлены в конфиг кластера. Если такие переменные в конфиге существуют, они будут заменены. Если переменных нет, будут добавлены.

    postgresql:
      parameters:
        max_connections: 100
        shared_buffers: "1GB"
      use_pg_rewind: true
    
  4. Линт, тесты и пуш в гит

    # Внести изменения в secret.yaml
    make vault edit
    
    # Проверить роль
    make role lint 
    
    # Протестировать роль
    make role test
    
    # Пушим в гит...
    make git push
    
  5. Если у вас GitLab - смотрим и наслаждаемся. Не забудьте нажать кнопочку в GitLab на deploy изменений конфига в кластере. Ну, или закомментируйте в gitlab-ci.yml строку

    when: manual
    

    что бы можно было деплоить автоматом...

Анализ результатов

После выполнения этапа подготовки:

  • Будет показан цветной diff изменений
  • В директории config_dir появятся:
  • Резервная копия текущей конфигурации с timestamp
  • Файл last.yaml с новой конфигурацией

После выполнения этапа применения:

  • Будет выведен статус кластера
  • Появится предупреждение, если требуется перезагрузка нод
  • Старые конфигурации будут автоматически удалены (остаются последние 10)

Особенности работы

Безопасность:

  • Конфигурация всегда сохраняется перед изменениями
  • Изменения проверяются на валидность перед применением
  • Показывается подробный diff перед применением

Информирование:

  • Явное предупреждение о необходимости перезагрузки
  • Подробный вывод статуса кластера после изменений
  • Сохранение истории изменений

Автоматизация:

  • Управление историей конфигураций (автоочистка старых файлов)
  • Проверка состояния кластера после изменений

Важные примечания

  • Роль не выполняет автоматическую перезагрузку нод Patroni, так как это потенциально опасная операция
  • При необходимости перезагрузки будет показана команда для ручного выполнения
  • Все изменения конфигурации сохраняются с timestamp для возможности отката
  • Для работы требуется доступ к API Patroni (порт 8008)

С чего начать?

На вашей машине вам необходимо сбилдить образ, где будут запускаться все роли через docker-compose.

Это можно сделать самостоятельно:

  • make docker build - создание контейнера
  • make docker rebuild - пересоздание контейнера, если были внесены изменения в Dockerfile
  • make docker prune - очистить систему от лишних образов
  • make docker shell - войти в контейнер Shell
  • make docker release - собирает образ контейнера и пушит его в докер реджистри
  • make docker images - собрать образы контейнеров с systemd, для удобного тестирования ролей.

Или ввести команду:

  • make init - которая создаст файл секретов с паролем. Сбилдит образ. И создаст новую роль.

Работа с ролью

  • make role new - создать новую роль из шаблона. Название роли пишется на английском, описание роли на любом языке
  • make role lint - проверяет все роли в папке roles/* на наличие ошибок
  • make role test - позволяет тестировать роль, указанную в molecule/default/converge.yml сразу на двух контейнерах (RedHat и Ubuntu)
  • make role deploy - запускает роль в продакшен. Все хосты берет из файла inventory/hosts

Работа с файлом переменных

Все переменные защищены через Ansible-Vault и находятся в папке vars/secrets.yml

Для смены пароля измените его в файле ./vault-password.txt

  • make vault create - создать новый файл с учетом пароля в файле ./vault-password.txt
  • make vault delete - удалить файл с переменными
  • make vault edit - отредактировать файл переменных
  • make vault show - показать содержимое файла переменных
  • make vault rekey - сменить пароль шифрования
  • make vault encrypt - зашифровать файл секретов
  • make vault decrypt - расшифровать файл секретов

Работа с Git

  • make git push - запушить изменения. С выбором ветки и вводом коммита.
  • make git pull - получить изменения из репы
  • make git new - создание нового брэнча имя cluster-branch_name для IaC подхода.

Добавить свой образ контейнера для тестов

Что бы добавить или изменить докер-образы для тестирования ролей измените файл настроек молекулы molecule/default/molecule.yml

  - name: ubuntu-instance
    image: "your.docker-registry.com/your-image:latest"
    privileged: true
    pre_build_image: true
    volumes:
      - /sys/fs/cgroup:/sys/fs/cgroup:ro

Помните, что образ обязательно должен содержать python не ниже версии 3.12 и systemd для нормального тестирования ролей.

Description
Роль настройки кластера Patroni
Readme 103 KiB
Languages
Makefile 78.8%
Dockerfile 21.2%