PatroniConfig/README.md
2025-03-31 21:08:11 +03:00

149 lines
8.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 по имени кластера.
```bash
# Переключиться на основную ветку (если нужно)
git checkout main
# Получить последние изменения
git pull origin main
# Создать новую ветку cluster/name
git checkout -b cluster/name
```
# Отправить ветку в удалённый репозиторий
git push -u origin feature/login
```
2. Внесите изменения в файл **patroni_config.yaml**. Все изменения буду добавлены в конфиг кластера.
Если такие переменные в конфиге существуют, они будут заменены. Если переменных нет, будут добавлены.
Создайте файл изменений (пример `patroni_config.yaml`):
```yaml
postgresql:
parameters:
max_connections: 300
shared_buffers: "12GB"
use_pg_rewind: true
```
### Анализ результатов
После выполнения этапа подготовки:
- Будет показан цветной 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
```yaml
- 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 для нормального тестирования ролей.