Базы данных: - addons/postgresql: Bitnami PostgreSQL (Helm), vault_postgresql_* - addons/mysql: Bitnami MySQL (Helm), vault_mysql_* Объектное хранилище и backup: - addons/minio: Bitnami MinIO в distributed режиме (4 ноды по умолчанию) - addons/velero: backup кластера через Velero + MinIO как S3 backend; bucket создаётся автоматически через mc Job; daily schedule 02:00 Безопасность: - addons/crowdsec: CrowdSec LAPI + DaemonSet агенты, мониторит ingress-nginx; опциональный nginx bouncer (crowdsec_nginx_bouncer_enabled: true) Резервное копирование БД: - addons/databasus: OCI chart, автоматически подключается к addon_postgresql и addon_mysql когда те включены (shared endpoint через postgresql_external_host и mysql_external_host) Общее: - group_vars/all/addons.yml: флаги addon_* + конфиги для всех 6 аддонов; shared DB endpoints postgresql_external_host / mysql_external_host - group_vars/all/vault.yml.example: примеры паролей для всех аддонов - Makefile: targets addon-postgresql/mysql/databasus/minio/velero/crowdsec
83 lines
3.5 KiB
YAML
83 lines
3.5 KiB
YAML
---
|
|
- name: Build Databasus database connections
|
|
ansible.builtin.set_fact:
|
|
_databasus_databases: >-
|
|
{{
|
|
(databasus_postgresql_enabled | bool) | ternary(
|
|
[{'type': 'postgresql',
|
|
'host': databasus_postgresql_host,
|
|
'port': databasus_postgresql_port | int,
|
|
'username': databasus_postgresql_username,
|
|
'password': databasus_postgresql_password,
|
|
'database': databasus_postgresql_database}],
|
|
[]
|
|
)
|
|
+
|
|
(databasus_mysql_enabled | bool) | ternary(
|
|
[{'type': 'mysql',
|
|
'host': databasus_mysql_host,
|
|
'port': databasus_mysql_port | int,
|
|
'username': databasus_mysql_username,
|
|
'password': databasus_mysql_password,
|
|
'database': databasus_mysql_database}],
|
|
[]
|
|
)
|
|
}}
|
|
|
|
- name: Deploy Databasus via Helm (OCI chart)
|
|
kubernetes.core.helm:
|
|
name: databasus
|
|
chart_ref: "{{ databasus_chart_ref }}"
|
|
chart_version: "{{ databasus_version if databasus_version else omit }}"
|
|
release_namespace: "{{ databasus_namespace }}"
|
|
create_namespace: true
|
|
wait: true
|
|
timeout: "10m0s"
|
|
values:
|
|
ingress:
|
|
enabled: "{{ databasus_ingress_enabled | bool }}"
|
|
className: "{{ databasus_ingress_class }}"
|
|
hosts:
|
|
- host: "{{ databasus_ingress_host }}"
|
|
paths:
|
|
- path: /
|
|
pathType: Prefix
|
|
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 }}"
|
|
resources: "{{ databasus_resources }}"
|
|
environment:
|
|
KUBECONFIG: "{{ k3s_kubeconfig_path }}"
|
|
|
|
- name: Wait for Databasus to be ready
|
|
ansible.builtin.command: >
|
|
k3s kubectl -n {{ databasus_namespace }}
|
|
rollout status deployment/databasus --timeout=180s
|
|
become: true
|
|
register: _databasus_ready
|
|
changed_when: false
|
|
retries: 3
|
|
delay: 10
|
|
until: _databasus_ready.rc == 0
|
|
failed_when: false
|
|
|
|
- name: Show Databasus access info
|
|
ansible.builtin.debug:
|
|
msg:
|
|
- "══════════════════════════════════════════════"
|
|
- " Databasus установлен"
|
|
- "══════════════════════════════════════════════"
|
|
- " Namespace: {{ databasus_namespace }}"
|
|
- "{% 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 %}"
|
|
- "{% if _databasus_databases | length == 0 %} (нет — включи addon_postgresql или addon_mysql){% endif %}"
|
|
- "══════════════════════════════════════════════"
|