====== Все что должен знать 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-м шаге