Установка в рамках микросервисной архитектуры#
В СУБД Pangolin возможно запускать докер-образы компонентов продукта в кластерных конфигурациях с одним главным узлом и произвольным числом узлов реплицирования. Для этого используются различные системы оркестрации, такие как Kubernetes (DropAPP) и docker-compose. Решение позволяет создавать многоконтейнерные приложения, где роль кластера базы данных берет на себя Pangolin DB, а управление пулом соединений обеспечивает Pangolin Pooler.
Docker-образ СУБД Pangolin#
По требованию имеется возможность запросить Docker-образ Pangolin на одной из двух ОС - SberLinux OS Server 9 или РЕД ОС 7.3.2 и 8.
Docker-образ может использоваться:
разработчиком АС для ускорения и упрощения процесса разработки;
пользователями, которые хотят познакомиться с Platform V Pangolin DB;
пользователями других облачных провайдеров.
Запуск Docker-образа Pangolin DB#
Примечание:
Имеется возможность использовать файл с переменными в формате
key=valueдля минимизации заполнения манифестов запуска.
Внимание!
Docker-образ Pangolin DB работает только с UID 26.
Docker образ имеет стандартные значения для переменных окружения:
PGDATA=/pgdata/data;PG_LICENSE_PATH=/opt/pangolin/license.json;POSTGRES_PASSWORD=;PANGOLIN_LIC_DATA=.
И следующие предустановленные параметры в файле postgresql.conf:
# Default settings in postgresql.conf template
port = '5433'
listen_addresses = '*'
authentication_proxy = 1
authentication_port = 5544
auth_activity_period = 60
enabled_extra_auth_methods ='trust,scram-sha-256'
psql_encrypt_password = 'on'
password_encryption = 'scram-sha-256'
pgaudit.log = 'ddl, role, connection, misc_set, protection'
autovacuum_work_mem = '-1'
effective_cache_size = '4GB'
maintenance_work_mem = '64MB'
max_connections = '300'
max_parallel_workers = '8'
max_parallel_workers_per_gather = '2'
max_prepared_transactions = '0'
max_worker_processes = '10'
timezone = 'Europe/Moscow'
autovacuum_max_workers = '3'
shared_buffers = '128MB'
work_mem = '4MB'
pg_plugins_path = '/usr/pangolin/lib'
# Features to enable
shared_preload_libraries = 'auto_explain,pg_stat_statements,pg_cron,pg_hint_plan,pg_outline'
# Included user configuration files
include_dir '/user_conf.d'
Файл pg_hba.conf имеет следующую стандартную настройку для внешних подключений:
host all all all scram-sha-256
Внимание
Для запуска контейнера с образом Pangolin DB укажите переменные окружения — пароль POSTGRES_PASSWORD и данные лицензии.
Лицензию можно передать двумя способами:
Через переменную
PANGOLIN_LIC_DATA, в JSON-формате, например:'{ "license" : { "end_date" : "xxx", "licensee" : "xxx", "type" : "xx" }, "sign" : "...{хеш}…"}'Через значение
volume. Для этого необходимо файл лицензии в JSON-формате передать по пути стандартного расположения этого файла внутри контейнера (например,-v /path/to/license.json:/opt/pangolin/license.json). Пример команды запуска:docker run --name pangolin -e POSTGRES_PASSWORD=12345678 -v /path/to/license.json:/opt/pangolin/license.json -d pangolin-DB-sberlinux9:6.5.0
Активация функциональностей СУБД Pangolin#
Начиная с версии 6.4.0, в Docker-образе включены следующие функциональности, не требующие конфигурирования:
маскирование парольной информации в запросах с указанием паролей;
очистка высвобождаемого дискового пространства в процессе работы СУБД;
контроль целостности конфигурации и объектов БД;
контроль загрузки динамических библиотек с проверкой контрольных сумм;
контроль использования процедурных языков;
глобальные индексы и глобальные констрейнты на партиционированные таблицы;
64-битные идентификаторы транзакции;
параметры управления быстрыми блокировками;
нативное интервальное партиционирование.
Пользователю доступны преднастроенные функциональные возможности, которые активируются специальным ключом (2 столбец) при старте контейнера:
Наименование функциональности |
Ключ активации |
Применяемые конфигурационные параметры |
Применяемые sql-скрипты |
|---|---|---|---|
Включение оптимизации под работу с 1с (функциональность может быть активирована только при первом запуске образа с первичной инициализацией каталога базы данных для установки русской локали) |
|
autovacuum = „on“ |
|
Включение расширения |
|
pg_stat_kcache.linux_hz = „-1“ |
|
Включение маскирования запросов |
|
masking_mode = „full“ |
|
Включение трассировки сессий (Инструменты диагностики и анализа) |
|
session_tracing_enable = „True“; |
|
Включение анализа производительности (Инструменты диагностики и анализа) |
|
performance_insights.enable = „True“; |
|
Включение расширения |
|
pg_profile.topn = „20“; |
DO |
Включение ротации паролей |
|
|
CREATE EXTENSION IF NOT EXISTS «psql_rotate_password» WITH SCHEMA «public»; |
Пример:
docker run --name pangolin -e enable_1c_support=true -e POSTGRES_PASSWORD={Пароль} -v /path/to/license.json:/opt/pangolin/license.json -d pangolin-DB-sberlinux9:6.5.0
Дополнительно можно самостоятельно активировать и настроить следующие функциональности:
управление парольными политиками;
использование транспортных паролей;
расширенные возможностей аудита действий пользователя;
набор дополнительных представлений для анализа (
psql_diagpack);аварийное завершение СУБД при отключении СХД;
очистка не используемых файлов в табличных пространствах;
корректировка, фиксация и подмена плана запроса;
резервирование подключений для служебных ролей;
контроль потребления ресурсов (оперативная память и CPU);
планировщик заданий;
дефрагментация таблиц;
Использование пользовательских скриптов и параметров#
Работа с директориями /user_scripts.d и /user_conf.d возможна только при запуске контейнера, поэтому, если содержимое примонтированных директорий на ОС узла изменилось, необходимо перезапустить контейнер.
При запуске контейнера поддерживается возможность использования собственных sql и sh-скрипты. Для этого необходимо директорию со скриптами смонтировать к контейнеру в директорию /user_scripts.d. Поддерживаются скрипты в формате *.sh, *.sql, *.sql.gz. Например:
docker run --name pangolin -v "/path/to/scripts:/user_scripts.d" -e POSTGRES_PASSWORD=1314124141 -v /path/to/license.json:/opt/pangolin/license.json -d pangolin-DB-sberlinux9:6.5.0
Для передачи файла/файлов с параметрами для PostgreSQL можно использовать точку монтирования /user_conf.d. Если пользователь самостоятельно передает параметры, то значения в пользовательских файлах будет иметь более высокий приоритет. Например:
docker run --name pangolin -v "/path/to/configs:/user_conf.d" -e POSTGRES_PASSWORD=1314124141 -v /path/to/license.json:/opt/pangolin/license.json -d pangolin-DB-sberlinux9:6.5.0
Подсказка
Поддерживаются файлы в формате *.conf.
Если необходимо изменить стандартные правила в конфигурации pg_hba, нужно перезаписать файл pg_hba.conf в контейнере, который по умолчанию расположен по пути /pgdata/data/pg_hba.conf, либо воспользоваться sh-скриптом и передать его точку монтирования /user_scripts.d. Пример sh-скрипта:
#!/usr/bin/env sh
echo "local all postgres trust" > $PGDATA/pg_hba.conf
echo "host all postgres ::1/128 trust" >> $PGDATA/pg_hba.conf
echo "host all postgres localhost trust" >> $PGDATA/pg_hba.conf
echo "hostssl all postgres localhost trust" >> $PGDATA/pg_hba.conf
echo "hostssl all test_user_ssl 0.0.0.0/0 cert clientcert=verify-full" >> $PGDATA/pg_hba.conf
echo "host all all 0.0.0.0/0 scram-sha-256" >> $PGDATA/pg_hba.conf
echo "hostssl all postgres 0.0.0.0/0 cert clientcert=verify-full" >> $PGDATA/pg_hba.conf
Пример запуска с использованием собственного файла pg_hba:
docker run --name pangolin -v "/path/to/pg_hba.conf:/pgdata/data/pg_hba.conf" -e POSTGRES_PASSWORD=1314124141 -v /path/to/license.json:/opt/pangolin/license.json -d pangolin-DB-sberlinux9:6.5.0
Для использования Docker-образа в Kubernetes или DropApp можно воспользоваться примером манифеста:
apiVersion: apps/v1
kind: Deployment
metadata:
namespace: da-dp01-db-pangolin-dev
name: pangolin-image-demo
spec:
selector:
matchLabels:
app: Pangolin-DB
replicas: 1
template:
metadata:
labels:
app: Pangolin-DB
spec:
containers:
- image: {path}/pangolin-DB-sberlinux9:6.5.0
name: pangolin-DB
ports:
- containerPort: 5433
protocol: TCP
env:
- name: POSTGRES_PASSWORD
value: '...'
- name: PANGOLIN_LIC_DATA
value: '{ "license" : { "end_date" : "...", "licensee" : "...", "type" : "..." }, "sign" : "lPNh...C4Xc" }'
- name: enable_1c_support
value: "false"
- name: pg_stat_kcache_is_enable
value: "false"
- name: masking_mode
value: "false"
- name: autounite
value: "false"
- name: session_tracing
value: "false"
- name: performance_insights
value: "false"
- name: pg_profile
value: "false"
- name: rotate_password
value: "false"
livenessProbe:
exec:
command:
- pg_isready
initialDelaySeconds: 15
periodSeconds: 60
resources:
requests:
memory: "2048Mi"
cpu: 1
limits:
memory: "4096Mi"
cpu: 4
volumeMounts:
- name: postgresql-data
mountPath: /pgdata
securityContext:
capabilities: {}
privileged: false
volumes:
- name: postgresql-data
emptyDir: {}
imagePullSecrets:
- name: image-pull-secret
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
Ограничения#
У реализации возможности Docker-образа Pangolin DB присутствуют следующие ограничения:
Образ предназначен для использования только в DEV-средах - доработка функциональности обновления, резервного копирования и мониторинга не предусматривается. Для ПРОМ рекомендуется использовать совместно с оператором Pangolin CloudNative.
Некоторые инфраструктурнозависимые функциональности, например, работа с СЗИ, на текущий момент не доступны.
Docker-образ Pangolin Pooler#
Для работы с Pangolin Pooler устанавливаются дефолтные порты контейнеров - 6544 для пользовательских подключений и 5544 для связи с Pangolin DB. В качестве точки монтирования используется /user_conf.d для файлов пользовательских конфигураций.
В дефолтный файл конфигурации добавляется директива %include /user_conf.d для использования пользвоательских файлов конфигурации.
Используются переменные окружения (в скобках приведены значения по умолчанию):
max_client_conn(800);pool_mode(transaction);min_pool_size(0);default_pool_size(105);max_db_connections(105);max_user_connections(105);listen_port(6544);db_host(«»);db_ port(5533).
Имя docker-образа устанавливается в формате Pangolin-pooler:*версия*. Пример - Pangolin-pooler:1.3.2.
Запуск образа#
Docker-образ имеет стандартные значения для переменных окружения:
PG_PLUGINS_PATH=/opt/pangolin-pooler/lib
LD_LIBRARY_PATH=/opt/pangolin-pooler/lib
Образ запускается со следующими параметрами в pangolin-pooler.ini:
[databases]
* = host=${DB_HOST:-NONE} port=${DB_PORT:-5433} auth_port=5544 auth_pool_size=1
[pgbouncer]
listen_port = ${LISTEN_PORT:-6544}
listen_addr = *
auth_type = scram-sha-256
auth_file = /etc/pangolin-pooler/userlist.txt
auth_proxy = on
auth_failure_threshold = 3
auth_inactivity_period = 60
auth_last_size = 10
log_audit = 1
admin_users = pgbouncer
max_client_conn = ${MAX_CLIENT_CONN:-400}
pool_mode = ${POOL_MODE:-transaction}
min_pool_size = ${MIN_POOL_SIZE:-0}
default_pool_size = ${DEFAULT_POOL_SIZE:-105}
max_db_connections = ${MAX_DB_CONNECTIONS:-105}
max_user_connections = ${MAX_USER_CONNECTIONS:-105}
ignore_startup_parameters = extra_float_digits
unix_socket_dir =
ndc_suspending_timeout = 0
%include /user_conf.d/user_conf.ini
Параметры, заключенные в фигурные скобки, можно переопределить с помощью ENV в команде запуска образа.
Пример запуска с указанием параметра max_client_conn:
docker run --name pooler -e MAX_CLIENT_CONN=1000 -d pangolin-pooler:1.5.0
Внимание!
В версии 6.5.0 сквозная аутентификация не поддерживается при использовании образа Pangolin Pooler совместно с оператором Pangolin CloudNative.
Кластерная конфигурация#
Для использования в среде оркестрации DropAPP (Kubernetes) вместе с оператором или без него, а также для возможности запуска в среде оркестрации docker-compose, начиная с версии 6.5.0 Pangolin DB включает в себя дополнительно установленный и настроенный RPM-пакет Pangolin Manager. Таким образом, обеспечивается потоковая репликация.
Pangolin Manager способен использовать объекты Kubernetes для хранения состояния кластера и управления ведущим ключом, что в свою очередь обеспечивает функциональность построения кластерной конфигурации без использования оператора, но в случае с docker-compose потребуется сервис DCS, который будет реализован через Pangolin DCS.
Примечание:
Начиная с версии 6.5.0 прослушиваются порты 2481 (Manager DCS) и 8009 (Manager REST API).
Запуск и настройка Pangolin Manager производится только после обнаружения скриптами entrypoint одной из переменной окружения, которые задаются пользователем как аргументы для запуска образа - PATRONI_KUBERNETES_POD_IP (для среды оркестрации DropAPP (Kubernetes) без оператора) или PARTNER_ADDRS (для среды оркестрации docker-compose).
Запуск в среде оркестрации docker-compose#
Для запуска docker-образа Pangolin DB в среде оркестрации docker-compose необходимо подготовить файл с обязательными переменными окружения pangolin.env. Пример заполнения файла с переменными окружения:
POSTGRES_PASSWORD=RandomTestP@ssw000rd!!
PANGOLIN_LIC_DATA='{ "license" : { "end_date" : "2", "licensee" : "Trial license...", "type" : "Trial" }, "sign" : "lPNh.." }'
PATRONI_SCOPE=demo
PATRONI_POSTGRESQL_LISTEN='0.0.0.0:5433'
Внимание!
Ввиду ограничений среды оркестрации docker-compose для поддержания постоянного подключения к основному узлу необходимо указать сервис балансировщика (SynGX, Ngix и т.п).
Ниже представлен пример файла docker-compose.yml кластерной конфигурации Pangolin DB с использования балансировщика трафика SynGX:
name: pangolin-cluster
networks:
cluster:
services:
pangolin1:
image: pangolin-DB-sberlinux942:15.5-6.5.0
networks: [ cluster ]
env_file: pangolin.env
hostname: pangolin1
container_name: demo-pangolin1
environment:
PARTNER_ADDRS: pangolin2:2481,pangolin3:2481
PATRONI_NAME: pangolin1
pangolin2:
image: pangolin-DB-sberlinux942:15.5-6.5.0
networks: [ cluster ]
env_file: pangolin.env
hostname: pangolin2
container_name: demo-pangolin2
environment:
PARTNER_ADDRS: pangolin1:2481,pangolin3:2481
PATRONI_NAME: pangolin2
depends_on:
- pangolin1
pangolin3:
image: pangolin-DB-sberlinux942:15.5-6.5.0
networks: [ cluster ]
env_file: pangolin.env
hostname: pangolin3
container_name: demo-pangolin3
environment:
PARTNER_ADDRS: pangolin1:2481,pangolin2:2481
PATRONI_NAME: pangolin3
depends_on:
- pangolin2
balancer:
image: {path}/sbel8:prefix-602-2.3.1-5701-repacked-602
networks: [ cluster ]
hostname: balancer
container_name: demo-balancer
volumes:
- ${PWD}/syngx.conf:/opt/syngx/conf/syngx.conf
ports:
- "8080:8080"
- "5433:5433"
depends_on:
- pangolin1
- pangolin2
- pangolin3
Для настройки балансировщика трафика SynGX был использован стандартный конфигурационный файл syngx.conf с добавлением специальной секции:
[...]
### Pangolin cluster name: pangolin_cluster
stream {
upstream pangolin_cluster {
server pangolin1:5433;
server pangolin2:5433;
server pangolin3:5433;
check type=tcp port=8008 default_down=true interval=5000 timeout=1000 rise=2 fall=5;
check_send "GET /master HTTP/1.0\r\n\r\n";
check_expect_alive "HTTP/1.0 200";
}
server {
listen 5433;
proxy_pass pangolin_cluster;
}
}
Запуск кластера выполняется следующей командой:
docker-compose up -d
Pangolin DB StatFulSet (DropApp/Kubernetes)#
Ниже приведен пример манифеста для запуска в среде оркестрации DropApp (Kubernetes) docker-образа Pangolin DB и Pangolin Pooler (в режиме сквозной аутентификации).
Pangolin_k8s_cluster.yml:
apiVersion: v1
kind: Service
metadata:
name: pangolin-docker-cluster-config
labels:
application: pangolin
cluster-name: pangolin-docker-cluster
spec:
clusterIP: None
---
# Секция для добавления пользовательских параметров
kind: ConfigMap
apiVersion: v1
metadata:
name: pangolin-config
labels:
application: pangolin
cluster-name: pangolin-docker-cluster
data:
# Параметры для Pangolin DB
DB: |-
max_parallel_workers = '10'
max_parallel_workers_per_gather = '4'
# Параметры для Pangolin Pooler
pooler: |-
[pgbouncer]
verbose = 3
---
# Основной манифест для установки StatfulSet Pangolin DB
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: &cluster_name pangolin-docker-cluster
labels:
application: pangolin
cluster-name: *cluster_name
spec:
replicas: 3
serviceName: *cluster_name
selector:
matchLabels:
application: pangolin
cluster-name: *cluster_name
template:
metadata:
labels:
application: pangolin
cluster-name: *cluster_name
spec:
serviceAccountName: pangolin-cluster-demo
containers:
- image: pangolin-DB-sberlinux942:15.5-6.5.0
name: pangolin-DB
imagePullPolicy: IfNotPresent
readinessProbe:
httpGet:
scheme: HTTP
path: /readiness
port: 8008
initialDelaySeconds: 15
periodSeconds: 10
timeoutSeconds: 15
successThreshold: 1
failureThreshold: 3
ports:
- containerPort: 5433
protocol: TCP
- containerPort: 8008
protocol: TCP
env:
# Активация параметра dubug позволяет выводить информацию о генерированных файлах конфигурации postgresql.conf, postgres.yaml и pg_hba.conf
- name: debug
value: "false"
- name: TZ
value: Europe/Moscow
- name: PATRONI_KUBERNETES_POD_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
- name: PATRONI_KUBERNETES_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: PATRONI_KUBERNETES_BYPASS_API_SERVICE
value: 'false'
- name: PATRONI_KUBERNETES_USE_ENDPOINTS
value: 'true'
- name: PATRONI_SCOPE
value: *cluster_name
# В PATRONI_KUBERNETES_LABELS значения параметра должно соответствовать лейблам Statfulset
- name: PATRONI_KUBERNETES_LABELS
value: '{application: pangolin, cluster-name: pangolin-docker-cluster}'
- name: PATRONI_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: PATRONI_POSTGRESQL_LISTEN
value: '0.0.0.0:5433'
- name: POSTGRES_PASSWORD
valueFrom:
secretKeyRef:
name: *cluster_name
key: pg_pass
- name: PATRONI_PASSWORD
valueFrom:
secretKeyRef:
name: *cluster_name
key: patroni_password
- name: PANGOLIN_LIC_DATA
valueFrom:
secretKeyRef:
name: *cluster_name
key: lic_data
- name: PG_PROFILE_PASSWORD
valueFrom:
secretKeyRef:
name: *cluster_name
key: pg_profile_pass
# Ниже представлены параметры для активации уникальных преднастроенных фичей Pangolin DB
- name: enable_1c_support
value: "False"
- name: pg_stat_kcache_is_enable
value: "False"
- name: masking_mode
value: "False"
- name: session_tracing
value: "False"
- name: performance_insights
value: "False"
- name: pg_profile
value: "False"
- name: rotate_password
value: "False"
resources:
requests:
memory: "1024Mi"
cpu: 1
limits:
memory: "2048Mi"
cpu: 2
volumeMounts:
- name: postgresql-data
mountPath: /pgdata
- name: pangolin-config-volume
mountPath: /user_conf.d
securityContext:
privileged: false
# Docker образ Pangolin DB работает только с UID 26.
runAsUser: 26
runAsGroup: 26
- image: pangolin-pooler:1.5.0
name: pooler
ports:
- containerPort: 6544
protocol: TCP
name: pooler
env:
# Активация параметра dubug позволяет выводить информацию о генерированных файле конфигурации pangolin-pooler.ini
- name: debug
value: "false"
- name: TZ
value: Europe/Moscow
- name: DB_HOST
valueFrom:
fieldRef:
fieldPath: status.podIP
- name: MAX_CLIENT_CONN
value: "400"
- name: POOL_MODE
value: "transaction"
- name: MIN_POOL_SIZE
value: "0"
- name: DEFAULT_POOL_SIZE
value: "105"
- name: MAX_DB_CONNECTIONS
value: "105"
- name: MAX_USER_CONNECTIONS
value: "105"
resources:
requests:
memory: "256Mi"
cpu: 1
limits:
memory: "512Mi"
cpu: 1
volumeMounts:
- name: pangolin-config-volume
mountPath: /user_conf.d
securityContext:
privileged: false
volumes:
- name: postgresql-data
emptyDir: {}
- name: pangolin-config-volume
configMap:
name: pangolin-config
items:
- key: DB
path: user.conf
- key: pooler
path: user_conf.ini
imagePullSecrets:
- name: image-pull-secret
terminationGracePeriodSeconds: 0
---
apiVersion: v1
kind: Endpoints
metadata:
name: &cluster_name pangolin-docker-cluster
labels:
application: pangolin
cluster-name: *cluster_name
subsets: []
---
# Сервис для подключения к мастер-узлу
apiVersion: v1
kind: Service
metadata:
name: &cluster_name pangolin-docker-cluster
labels:
application: pangolin
cluster-name: *cluster_name
spec:
type: ClusterIP
selector:
application: pangolin
cluster-name: *cluster_name
role: master
ports:
- protocol: TCP
port: 5433
targetPort: 5433
name: db
- protocol: TCP
port: 6544
targetPort: 6544
name: pooler
---
# Сервис для подключения к узлу реплика
apiVersion: v1
kind: Service
metadata:
name: pangolin-cluster-demo-repl
labels:
application: pangolin
cluster-name: &cluster_name pangolin-docker-cluster
role: replica
spec:
type: ClusterIP
selector:
application: pangolin
cluster-name: *cluster_name
role: replica
ports:
- port: 5433
targetPort: 5433
---
# Файл с паролями в кодировке Base64
apiVersion: v1
kind: Secret
metadata:
name: &cluster_name pangolin-docker-cluster
labels:
application: pangolin
cluster-name: *cluster_name
type: Opaque
data:
# Пароль для уз Postgres
pg_pass: UEBzc3dvcmRGb3JUZXN0cyEhMTE=
# Пароль для уз Patroni
patroni_password: UGF0cm9uaVRlc3RQYXNzd29yZDEwMjkhQA==
# Пароль для уз pg_profile_tuz
pg_profile_pass: cHJvZmlsZXR1elBhc3NzdXBlcnRyb25HMTIxMg==
# Данные лицензии Pangolin
lic_data:
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: pangolin-cluster-demo
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: pangolin-cluster-demo
namespace: da-dp01-db-pangolin-dev
rules:
- apiGroups:
- ""
resources:
- configmaps
verbs:
- create
- get
- list
- patch
- update
- watch
# delete and deletecollection are required only for 'patronictl remove'
- delete
- deletecollection
- apiGroups:
- ""
resources:
- endpoints
verbs:
- get
- patch
- update
# the following three privileges are necessary only when using endpoints
- create
- list
- watch
# delete and deletecollection are required only for 'patronictl remove'
- delete
- apiGroups:
- ""
resources:
- pods
verbs:
- get
- list
- patch
- update
- watch
# The following privilege is only necessary for creation of headless service
# for pangolin-config endpoint, in order to prevent cleaning it up by the
# k8s master. You can avoid giving this privilege by explicitly creating the
# service like it is done in this manifest (lines 2..10)
- apiGroups:
- ""
resources:
- services
verbs:
- create
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: pangolin-cluster-demo
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: pangolin-cluster-demo
subjects:
- kind: ServiceAccount
name: pangolin-cluster-demo
Команда запуска манифеста:
kubectl apply -n pangolin-demo-cluster -f pangolin_k8s_cluster.yaml
Можно воспользоваться helm-чартом pangolin-db, который находится внутри дистрибутива с продуктом Pangolin по пути conf/helm/application/pangolin-db.
Примечание:
helm чарт pangolin-db доступен только в дистрибутива для OS Sberlinux 9, RedOS 7 и RedOS 8.
Пример вызова helm-чарта:
helm install pangolin-db-demo -n da-dp01-db-pangolin-dev \
--set imageName.DB=pangolin-DB-sberlinux942:15.5-6.5.0 \
--set imageName.Pooler=pangolin-pooler:1.5.0 \
--set pooler.enabled=true --set-file lic_data=license_trial.json conf/helm/application/pangolin-db --atomic --timeout 5m
Запуск c использованием оператора Pangolin CloudNative#
Pangolin CloudNative#
Для построения кластерной конфигурации в среде оркестрации DropAPP (kubernetes) используется оператор Cloudnative-PG, который в составе продукта называется Pangolin CloudNative. Схема оркестрации кластера Pangolin с использованием оператора Pangolin CloudNative отвечает требованиям к решению для применения в частных (отчуждаемых) облаках.
Возможности Pangolin CloudNative:
Прямая интеграция с сервером Kubernetes API для обеспечения высокой доступности без использования внешних инструментов.
Обеспечение отказоустойчивости основного экземпляра за счет выбранной реплики.
Возможность переключения с основного экземпляра на выбранную реплику.
Возможность работы произвольного количества экземпляров (минимальное значение
1соответствует основному серверу).Определение службы на чтение и запись для подключения приложений только к основному серверу кластера.
Определение службы только на чтение для подключения приложений к любым экземплярам.
Декларативное управление ролями, пользователями и группами.
Поддержка локальных хранилищ данных с шаблонами запросов к ним.
Переиспользование постоянных хранилищ в подах.
Отдельное хранилище для WAL-файлов.
Поддержка минорных версий PostgreSQL (если не был изменен системный каталог).
Постоянные обновления или обновления «на лету» для операторов.
Поддержка TLS-соединений и аутентификации клиента по сертификату.
Поддержка пользовательских сертификатов TLS (включая интеграцию с cert-manager).
Непрерывное резервное копирование в хранилище объектов.
Полное восстановление и восстановление в определенный момент времени из существующей резервной копии в хранилище объектов.
Автономный импорт существующих баз данных PostgreSQL.
Переход в спящий режим кластера PostgreSQL декларативным способом.
Поддержка синхронных реплик.
Поддержка двух слотов физической репликации на уровне кластера.
Резервное копирование из режима ожидания.
Политики хранения резервных копий (на основе окна восстановления).
Параллельное архивирование и восстановление WAL, чтобы база данных могла успевать за генерацией WAL в системах с высокой интенсивностью записи.
Поддержка тегов для файлов резервных копий, загружаемых в хранилище объектов, для включения дополнительного управления хранением на уровне хранилища объектов.
Развертывание PostgreSQL на нескольких кластерах Kubernetes, позволяющее использовать частные, общедоступные, гибридные и мультиоблачные архитектуры.
Объединение в пул соединений с помощью Pangolin Pooler.
Поддержка привязки к узлу через nodeSelector.
Настраиваемый экспортер пользовательских метрик для Prometheus через порт
metrics(9187).Стандартное протоколирование сообщений об ошибках PostgreSQL в формате JSON.
Автоматическая настройка
readOnlyRootFilesystemконтекста безопасности для модулей.cnpgплагин дляkubectl.
Примечание:
Оператор Pangolin CloudNative не использует скрипты
Entrypointвнутри docker-образов Pangolin DB и Pangolin Pooler. Конфигурация уникальных функциональностей Pangolin DB доступна только при использовании helm-чарта.
Архив оператора pcloudn-1.20.6-distrib.tar.gz расположен в дистрибутиве продукта Pangolin в архиве 3rdparty. Внутри архива расположены:
бинарный файл оператора;
плагин kubectl для работы с оператором;
Docker-файл для самостоятельной сборки docker-образа оператора;
манифест для установки оператора;
helm-чарт для установки Pangolin DB с помощью оператора.
Внимание!
В манифесте
cnpg-1.20.6.yamlв строках13660и13667вместоpangolin-cloudnative:1.20.6-121необходимо указать путь к Docker-образу Pangolin CloudNative.
Для установки оператора необходимо применить манифест cnpg-1.20.6.yaml:
kubectl apply -f cnpg-1.20.6.yaml --namespace=cnpg-system
Для установки кластера Pangolin DB с помощью оператора Pangolin CloudNative необходимо воспользоваться helm-чартом, расположенным в архиве pcloudn-1.20.6-distrib.tar.gz, имя чарта cnpg-cluster.
Пример запуска helm-чарта:
helm install pangolin-demo-cl -n pangolin-demo --atomic --timeout 3m \
-f ./helm_charts/cnpg-cluster/dev_values.yaml ./helm_charts/cnpg-cluster