====== Все что должен знать DevOps про PostgreSQL ====== ===== Реклама ===== * Всем привет! Рады Вам представить цикл вебинаров на тему "Что должен знать Ops из области Dev". Начнем с задач DBA, которые приходится решать DevOps инженеру на примере самой популярной СУБД PostgreSQL ===== Техническое задание ===== * Осуществить развертывание СУБД PostgreSQL в Bare metal, Docker и Kubernetes * Использовать команды управления и SQL для создания и анализа структур, данных и управление правами * Использовать операторы PostgreSQL для автоматизации развертывания приложений в Kubernetes * Использовать пулер соединений PgBouncer для оптимизации подключений к PostgreSQL * Настроить мониторинг СУБД PostgreSQL * Настроить резервное копирование СУБД PostgreSQL ===== Запись вебинара ===== * https://youtu.be/cOZDowgRPwY * https://rutube.ru/video/private/151d3c5e41168ada2155847351f58dce/ * Тэги: PostgreSQL, Kubernetes, CloudNativePG ===== Методическая подготовка ===== * Система Kubernetes (4Gb на узел) и [[Система Kubernetes#rancher local-path-provisioner]] (default-class) * [[Система Kubernetes#Добавление узла через Kubespray]] !!! 4Gb и в haproxy !!! * ingress-nginx с use-forwarded-headers ([[Система Kubernetes#Работа с готовыми Charts]]) * haproxy ===== Шаг 1. Что у нас есть для начала ===== * [[Практические примеры Keycloak]] * [[Видео уроки]] ===== Шаг 2. Знакомимся с PostgreSQL ===== * Развернуть PostgreSQL baremetal на [[Сервис PostgreSQL#Linux Debian/Ubuntu]] на gate * Подключиться локально через [[Сервис PostgreSQL#Клиент psql]] и создать объекты для сервиса Keycloak, обсудить https://www.zabbix.com/download * Настроить [[Сервис PostgreSQL#Подключение по сети]] и проверить через [[Сервис PostgreSQL#Клиент psql]] на server * Обсудить [[Сервис PostgreSQL#PgBouncer]] * Развернуть Keycloak в варианте [[Сервис Keycloak#Bare metal]] server:~/keycloak-22.0.5# KEYCLOAK_ADMIN=admin KEYCLOAK_ADMIN_PASSWORD='strongpassword' KC_DB=postgres KC_DB_URL=jdbc:postgresql://gate:5432/keycloak KC_DB_USERNAME=keycloak KC_DB_PASSWORD='strongpassword' bin/kc.sh start-dev * Через [[Сервис PostgreSQL#Клиент psql]] убеждаемся в появлении схемы и данных приложения Keycloak * Провести [[Сервис Keycloak#Базовая конфигурация]] и сделать [[Сервис PostgreSQL#pg_dump]] * Обсудить [[Сервис PostgreSQL#Потоковая репликация]] * Обсудить [[Сервис PostgreSQL#Barman]] ===== Шаг 3. Использование PostgreSQL с Docker ===== * !!! Обсудить и предложить сделать самостоятельно !!! * Развернуть сервис PostgreSQL в [[Сервис PostgreSQL#Docker]] совместно с Keycloak, через [[Сервис Keycloak#docker-compose]] (без ssl) ===== Шаг 4. Использование PostgreSQL в Kubernetes ===== * Для демонстрации можно использовать [[Система Kubernetes#rancher local-path-provisioner]] как default-class * Развернуть сервис PostgreSQL в [[Сервис PostgreSQL#Kubernetes]] * Выполнить [[Сервис PostgreSQL#pg_restore]]) * Развернуть Keycloak в [[Сервис Keycloak#Kubernetes]], добавить запись в DNS, подключиться через [[Решение HAProxy]] с clientN и проверить [[Сервис Keycloak#Базовая конфигурация]] * Развернуть на server [[Сервис PostgreSQL#Клиент pgadmin]] и подключить к PostgreSQL в [[Сервис PostgreSQL#Kubernetes]] через port-forward * Сделать резервную копию [[Сервис PostgreSQL#pg_dumpall]], * Удалить PostgreSQL из кластера Kubernetes kube1:~# kubectl delete ns my-postgres-ns ===== Шаг 5. Использование CloudNativePG ===== * Добавить оператор [[Сервис PostgreSQL#CloudNativePG]] в кластер Kubernetes * Развернуть кластер PostgreSQL для приложения Keycloak * Установить [[Сервис PostgreSQL#Плагин cnpg]] и проверить состояние кластера * Развернуть и проверить работу S3 [[Сервис MinIO]] * Настроить [[Сервис PostgreSQL#CloudNativePG Backup]] в него, (immediate Backup проводить после появления в архиве wal файлов, проверить наличие требуемых из backup.info) * Восстановить базу Keycloak из [[Сервис PostgreSQL#pg_dumpall]] * Настроить Keycloak в [[Сервис Keycloak#Kubernetes]] на работу с [[Сервис PostgreSQL#CloudNativePG]] === Выход из строя Primary узла === * [[Система Kubernetes#Удаление узла]] kube1# kubectl cnpg status my-pgcluster -n my-pgcluster-ns kube1# kubectl -n my-pgcluster-ns delete pvc my-pgcluster-1 kube1# kubectl -n my-pgcluster-ns delete pod my-pgcluster-1 kube1# kubectl -n my-pgcluster-ns get pods --watch === Выход из строя всего кластера === kube1:~# time kubectl delete ns my-pgcluster-ns real 4m11.523s * Использовать [[Сервис PostgreSQL#CloudNativePG Recovery]] для восстановления кластера [[Сервис PostgreSQL#CloudNativePG]] для приложения Keycloak из резервной копии S3 [[Сервис MinIO]] * Вернуть [[Сервис PostgreSQL#CloudNativePG Backup]] === Дополнительные возможности === * Добавить [[Сервис PostgreSQL#CloudNativePG PgBouncer]] и подключить Keycloak в [[Сервис Keycloak#Kubernetes]] через него * Настроить [[Сервис PostgreSQL#CloudNativePG Monitoring]] ===== Вопросы? ===== ===== Домашнее задание ===== * Выполнить все, что решили "обсудить" на 2-м шаге