refactor: убрать Traefik, добавить метрики и ingress аддонам, provisioning DB/MinIO
Traefik: - k3s-server-config.yaml.j2: traefik всегда в disable list (убрана переменная) - group_vars/all/main.yml: убрана k3s_disable_traefik - ingress-nginx/tasks: убраны задачи отключения Traefik (дублирование) Prometheus метрики (по умолчанию включены): - postgresql, mysql: metrics.enabled + serviceMonitor (при addon_prometheus_stack) - minio: metrics.serviceMonitor (при addon_prometheus_stack) - velero: metrics.enabled + serviceMonitor (при addon_prometheus_stack) - crowdsec: ServiceMonitor для /metrics:6060 (при addon_prometheus_stack) - ingress-nginx: ingress_nginx_metrics_enabled: true (было false) Ingress: - velero: velero_ingress_enabled (API port 8085) - crowdsec: crowdsec_ingress_enabled (LAPI port 8080) Databasus — provisioning shared ресурсов вместо деплоя своих: - addon_postgresql: Job создаёт user 'databasus' + database 'databasus' в shared PG - addon_minio: Job создаёт bucket 'databasus-backups' в shared MinIO - vault_databasus_db_password добавлен в vault.yml.example
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
---
|
||||
databasus_chart_ref: "oci://ghcr.io/databasus/charts/databasus"
|
||||
databasus_version: "" # "" = latest; укажи конкретную: "1.0.0"
|
||||
databasus_version: ""
|
||||
databasus_namespace: "databasus"
|
||||
|
||||
# ── Ingress ────────────────────────────────────────────────────────────────────
|
||||
@@ -11,17 +11,20 @@ databasus_ingress_tls: false
|
||||
databasus_ingress_cert_issuer: "{{ cert_manager_default_issuer_name | default('letsencrypt-prod') }}"
|
||||
|
||||
# ── Интеграция с addon_postgresql ─────────────────────────────────────────────
|
||||
# Автоматически используется когда addon_postgresql: true.
|
||||
# Переопредели явно для кастомного PostgreSQL.
|
||||
# Когда addon_postgresql: true — создаётся отдельный пользователь и база данных.
|
||||
# Задай в vault.yml:
|
||||
# vault_databasus_db_password: "..."
|
||||
databasus_postgresql_enabled: "{{ addon_postgresql | default(false) | bool }}"
|
||||
databasus_db_name: "databasus"
|
||||
databasus_db_username: "databasus"
|
||||
databasus_db_password: "{{ vault_databasus_db_password | default('changeme-databasus') }}"
|
||||
# Подключение к уже запущенному addon_postgresql
|
||||
databasus_postgresql_host: "{{ postgresql_external_host | default('postgresql.postgresql.svc.cluster.local') }}"
|
||||
databasus_postgresql_port: "{{ postgresql_external_port | default(5432) }}"
|
||||
databasus_postgresql_username: "{{ postgresql_auth_username | default('appuser') }}"
|
||||
databasus_postgresql_password: "{{ postgresql_auth_password | default('') }}"
|
||||
databasus_postgresql_database: "{{ postgresql_auth_database | default('appdb') }}"
|
||||
databasus_postgresql_admin_password: "{{ postgresql_auth_postgres_password | default('changeme-postgres') }}"
|
||||
|
||||
# ── Интеграция с addon_mysql ───────────────────────────────────────────────────
|
||||
# Автоматически используется когда addon_mysql: true.
|
||||
# Когда addon_mysql: true — передаются connection details для резервного копирования.
|
||||
databasus_mysql_enabled: "{{ addon_mysql | default(false) | bool }}"
|
||||
databasus_mysql_host: "{{ mysql_external_host | default('mysql.mysql.svc.cluster.local') }}"
|
||||
databasus_mysql_port: "{{ mysql_external_port | default(3306) }}"
|
||||
@@ -29,6 +32,14 @@ databasus_mysql_username: "{{ mysql_auth_username | default('appuser') }}"
|
||||
databasus_mysql_password: "{{ mysql_auth_password | default('') }}"
|
||||
databasus_mysql_database: "{{ mysql_auth_database | default('appdb') }}"
|
||||
|
||||
# ── Интеграция с addon_minio ──────────────────────────────────────────────────
|
||||
# Когда addon_minio: true — создаётся отдельный бакет для хранения бэкапов.
|
||||
databasus_minio_enabled: "{{ addon_minio | default(false) | bool }}"
|
||||
databasus_minio_bucket: "databasus-backups"
|
||||
databasus_minio_host: "minio.minio.svc.cluster.local:9000"
|
||||
databasus_minio_access_key: "{{ vault_minio_root_user | default('minioadmin') }}"
|
||||
databasus_minio_secret_key: "{{ vault_minio_root_password | default('changeme-minio') }}"
|
||||
|
||||
# ── Ресурсы ────────────────────────────────────────────────────────────────────
|
||||
databasus_resources:
|
||||
requests:
|
||||
|
||||
@@ -1,4 +1,114 @@
|
||||
---
|
||||
# ── Provisioning PostgreSQL: отдельный пользователь + база данных ──────────────
|
||||
- name: Create dedicated PostgreSQL user and database for Databasus
|
||||
kubernetes.core.k8s:
|
||||
state: present
|
||||
definition:
|
||||
apiVersion: batch/v1
|
||||
kind: Job
|
||||
metadata:
|
||||
name: databasus-pg-provision
|
||||
namespace: "{{ postgresql_namespace | default('postgresql') }}"
|
||||
spec:
|
||||
ttlSecondsAfterFinished: 300
|
||||
template:
|
||||
spec:
|
||||
restartPolicy: OnFailure
|
||||
containers:
|
||||
- name: psql
|
||||
image: postgres:16-alpine
|
||||
command:
|
||||
- /bin/sh
|
||||
- -c
|
||||
- |
|
||||
PGPASSWORD="$ADMIN_PASS" psql -h "$HOST" -U postgres -c "
|
||||
DO \$\$
|
||||
BEGIN
|
||||
IF NOT EXISTS (SELECT FROM pg_roles WHERE rolname = '${DB_USER}') THEN
|
||||
CREATE USER ${DB_USER} WITH PASSWORD '${DB_PASS}';
|
||||
END IF;
|
||||
END \$\$;
|
||||
" &&
|
||||
PGPASSWORD="$ADMIN_PASS" psql -h "$HOST" -U postgres -tc \
|
||||
"SELECT 1 FROM pg_database WHERE datname = '${DB_NAME}'" \
|
||||
| grep -q 1 || \
|
||||
PGPASSWORD="$ADMIN_PASS" psql -h "$HOST" -U postgres -c \
|
||||
"CREATE DATABASE ${DB_NAME} OWNER ${DB_USER};"
|
||||
env:
|
||||
- name: HOST
|
||||
value: "{{ databasus_postgresql_host }}"
|
||||
- name: ADMIN_PASS
|
||||
value: "{{ databasus_postgresql_admin_password }}"
|
||||
- name: DB_USER
|
||||
value: "{{ databasus_db_username }}"
|
||||
- name: DB_PASS
|
||||
value: "{{ databasus_db_password }}"
|
||||
- name: DB_NAME
|
||||
value: "{{ databasus_db_name }}"
|
||||
environment:
|
||||
KUBECONFIG: "{{ k3s_kubeconfig_path }}"
|
||||
when: databasus_postgresql_enabled | bool
|
||||
|
||||
- name: Wait for PostgreSQL provisioning job
|
||||
ansible.builtin.command: >
|
||||
k3s kubectl wait --for=condition=complete
|
||||
-n {{ postgresql_namespace | default('postgresql') }}
|
||||
job/databasus-pg-provision --timeout=120s
|
||||
become: true
|
||||
register: _pg_provision
|
||||
changed_when: false
|
||||
retries: 3
|
||||
delay: 5
|
||||
until: _pg_provision.rc == 0
|
||||
when: databasus_postgresql_enabled | bool
|
||||
|
||||
# ── Provisioning MinIO: отдельный бакет ────────────────────────────────────────
|
||||
- name: Create dedicated MinIO bucket for Databasus
|
||||
kubernetes.core.k8s:
|
||||
state: present
|
||||
definition:
|
||||
apiVersion: batch/v1
|
||||
kind: Job
|
||||
metadata:
|
||||
name: databasus-minio-provision
|
||||
namespace: "{{ minio_namespace | default('minio') }}"
|
||||
spec:
|
||||
ttlSecondsAfterFinished: 300
|
||||
template:
|
||||
spec:
|
||||
restartPolicy: OnFailure
|
||||
containers:
|
||||
- name: mc
|
||||
image: minio/mc:latest
|
||||
command:
|
||||
- /bin/sh
|
||||
- -c
|
||||
- |
|
||||
mc alias set minio "http://minio:9000" "$KEY" "$SECRET" &&
|
||||
mc mb --ignore-existing "minio/{{ databasus_minio_bucket }}"
|
||||
env:
|
||||
- name: KEY
|
||||
value: "{{ databasus_minio_access_key }}"
|
||||
- name: SECRET
|
||||
value: "{{ databasus_minio_secret_key }}"
|
||||
environment:
|
||||
KUBECONFIG: "{{ k3s_kubeconfig_path }}"
|
||||
when: databasus_minio_enabled | bool
|
||||
|
||||
- name: Wait for MinIO provisioning job
|
||||
ansible.builtin.command: >
|
||||
k3s kubectl wait --for=condition=complete
|
||||
-n {{ minio_namespace | default('minio') }}
|
||||
job/databasus-minio-provision --timeout=120s
|
||||
become: true
|
||||
register: _minio_provision
|
||||
changed_when: false
|
||||
retries: 3
|
||||
delay: 5
|
||||
until: _minio_provision.rc == 0
|
||||
when: databasus_minio_enabled | bool
|
||||
|
||||
# ── Build database connections list ────────────────────────────────────────────
|
||||
- name: Build Databasus database connections
|
||||
ansible.builtin.set_fact:
|
||||
_databasus_databases: >-
|
||||
@@ -7,9 +117,9 @@
|
||||
[{'type': 'postgresql',
|
||||
'host': databasus_postgresql_host,
|
||||
'port': databasus_postgresql_port | int,
|
||||
'username': databasus_postgresql_username,
|
||||
'password': databasus_postgresql_password,
|
||||
'database': databasus_postgresql_database}],
|
||||
'username': databasus_db_username,
|
||||
'password': databasus_db_password,
|
||||
'database': databasus_db_name}],
|
||||
[]
|
||||
)
|
||||
+
|
||||
@@ -24,6 +134,7 @@
|
||||
)
|
||||
}}
|
||||
|
||||
# ── Deploy Databasus ────────────────────────────────────────────────────────────
|
||||
- name: Deploy Databasus via Helm (OCI chart)
|
||||
kubernetes.core.helm:
|
||||
name: databasus
|
||||
@@ -43,13 +154,21 @@
|
||||
- path: /
|
||||
pathType: Prefix
|
||||
tls: >-
|
||||
{{ [{'hosts': [databasus_ingress_host],
|
||||
'secretName': 'databasus-tls'}]
|
||||
{{ [{'hosts': [databasus_ingress_host], 'secretName': 'databasus-tls'}]
|
||||
if databasus_ingress_tls | bool else [] }}
|
||||
annotations: >-
|
||||
{{ {'cert-manager.io/cluster-issuer': databasus_ingress_cert_issuer}
|
||||
if databasus_ingress_tls | bool else {} }}
|
||||
databases: "{{ _databasus_databases }}"
|
||||
storage: >-
|
||||
{{
|
||||
{'type': 's3',
|
||||
'endpoint': 'http://' ~ databasus_minio_host,
|
||||
'bucket': databasus_minio_bucket,
|
||||
'accessKey': databasus_minio_access_key,
|
||||
'secretKey': databasus_minio_secret_key}
|
||||
if databasus_minio_enabled | bool else {}
|
||||
}}
|
||||
resources: "{{ databasus_resources }}"
|
||||
environment:
|
||||
KUBECONFIG: "{{ k3s_kubeconfig_path }}"
|
||||
@@ -73,10 +192,11 @@
|
||||
- " Databasus установлен"
|
||||
- "══════════════════════════════════════════════"
|
||||
- " Namespace: {{ databasus_namespace }}"
|
||||
- "{% if databasus_ingress_enabled %} UI: http{{ 's' if databasus_ingress_tls | bool else '' }}://{{ databasus_ingress_host }}{% endif %}"
|
||||
- "{% if databasus_ingress_enabled %} UI: http{{ 's' if databasus_ingress_tls | bool else '' }}://{{ databasus_ingress_host }}{% endif %}"
|
||||
- " Port-forward: kubectl port-forward -n {{ databasus_namespace }} svc/databasus 8080:80"
|
||||
- "──────────────────────────────────────────────"
|
||||
- " Подключённые базы данных:"
|
||||
- "{% for db in _databasus_databases %} - {{ db.type }}: {{ db.host }}:{{ db.port }} / {{ db.database }}{% endfor %}"
|
||||
- " Базы данных:"
|
||||
- "{% for db in _databasus_databases %} - {{ db.type }}: {{ db.host }}:{{ db.port }} / {{ db.database }} (user: {{ db.username }}){% endfor %}"
|
||||
- "{% if _databasus_databases | length == 0 %} (нет — включи addon_postgresql или addon_mysql){% endif %}"
|
||||
- " S3 хранилище: {{ 'minio/' ~ databasus_minio_bucket if databasus_minio_enabled | bool else 'не настроено' }}"
|
||||
- "══════════════════════════════════════════════"
|
||||
|
||||
Reference in New Issue
Block a user