149 lines
8.6 KiB
Markdown
149 lines
8.6 KiB
Markdown
# 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 для нормального тестирования ролей.
|