Files
K3S/group_vars/all/addons.yml
Sergey Antropoff 80dbf686b0 feat: добавить аддоны postgresql, mysql, databasus, minio, velero, crowdsec
Базы данных:
- 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
2026-04-25 11:11:18 +03:00

185 lines
10 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
# ═══════════════════════════════════════════════════════════════════════════════
# Аддоны кластера — выбери что устанавливать
# make install-full → core + все аддоны у которых true
# make addon-<name> → конкретный аддон напрямую (флаг игнорируется)
# ═══════════════════════════════════════════════════════════════════════════════
addon_nfs_server: false # NFS сервер
addon_csi_nfs: false # CSI NFS Driver + StorageClass
addon_ingress_nginx: true # ingress-nginx (Ingress controller)
addon_cert_manager: false # cert-manager (TLS через Let's Encrypt)
addon_metrics_server: true # metrics-server (kubectl top nodes/pods)
addon_prometheus_stack: false # Prometheus + Grafana + Alertmanager
addon_istio: false # Istio service mesh + Kiali UI
addon_argocd: false # ArgoCD (GitOps)
addon_longhorn: false # Longhorn (distributed block storage)
addon_kubernetes_dashboard: false # Kubernetes Dashboard
addon_postgresql: false # PostgreSQL (Bitnami)
addon_mysql: false # MySQL (Bitnami)
addon_databasus: false # Databasus (резервное копирование БД)
addon_minio: false # MinIO (S3-совместимое объектное хранилище)
addon_velero: false # Velero (резервное копирование кластера и PVC)
addon_crowdsec: false # CrowdSec (обнаружение вторжений)
# ─── NFS Server ───────────────────────────────────────────────────────────────
nfs_exports:
- path: /srv/nfs/k8s
options: "*(rw,sync,no_subtree_check,no_root_squash)"
nfs_allowed_network: "192.168.1.0/24"
nfs_create_export_dirs: true
nfs_export_dir_mode: "0777"
nfs_export_dir_owner: "nobody"
nfs_export_dir_group: "nogroup"
# ─── CSI NFS Driver ───────────────────────────────────────────────────────────
csi_nfs_version: "v4.8.0"
csi_nfs_namespace: "kube-system"
# IP NFS сервера — по умолчанию берётся первый мастер
# Если NFS на отдельном хосте: csi_nfs_server: "192.168.1.20"
csi_nfs_server: "{{ hostvars[groups['k3s_master'][0]]['ansible_host'] }}"
csi_nfs_share: "/srv/nfs/k8s"
csi_nfs_storageclass_default: true
csi_nfs_reclaim_policy: "Delete" # Delete | Retain
csi_nfs_on_delete: "delete" # delete | retain | archive
csi_nfs_install_client: true
# ─── ingress-nginx ────────────────────────────────────────────────────────────
ingress_nginx_version: "4.10.1"
ingress_nginx_namespace: "ingress-nginx"
# LoadBalancer получит IP от kube-vip
ingress_nginx_service_type: "LoadBalancer"
# Конкретный IP из пула kube-vip (оставь "" для автоматического)
ingress_nginx_load_balancer_ip: ""
ingress_nginx_replica_count: 1
ingress_nginx_use_daemonset: false
ingress_nginx_metrics_enabled: false
ingress_nginx_class_name: "nginx"
ingress_nginx_set_default_class: true
# Кастомная страница ошибок
ingress_nginx_custom_errors_enabled: true
ingress_nginx_error_cluster_name: "K3S Cluster"
ingress_nginx_error_cluster_domain: "" # например: cluster.example.com
ingress_nginx_resources:
requests:
cpu: 100m
memory: 90Mi
limits:
cpu: 500m
memory: 256Mi
ingress_nginx_extra_args: {}
# ─── cert-manager ─────────────────────────────────────────────────────────────
cert_manager_version: "v1.15.3"
cert_manager_namespace: "cert-manager"
# Автоматически создать ClusterIssuer:
# none — не создавать
# selfsigned — самоподписанный CA
# letsencrypt — Let's Encrypt (требует публичный домен)
cert_manager_issuer: "letsencrypt"
# Email для Let's Encrypt (обязательно для letsencrypt)
cert_manager_acme_email: "admin@example.com"
# ─── kube-prometheus-stack ────────────────────────────────────────────────────
# prometheus_stack_version: "60.3.0"
# prometheus_retention_days: 7
# prometheus_storage_size: "10Gi"
# Grafana: логин и пароль — задай в vault.yml:
# vault_grafana_user: "admin"
# vault_grafana_password: "ваш-пароль"
# prometheus_grafana_ingress_enabled: false
# prometheus_grafana_ingress_host: "grafana.example.com"
# ─── Istio ────────────────────────────────────────────────────────────────────
# istio_version: "1.22.2"
# istio_mtls_mode: "STRICT" # STRICT | PERMISSIVE | DISABLE
# istio_install_gateway: true
# Kiali (UI для Istio) — опционально вместе с Istio
# kiali_enabled: false
# kiali_ingress_host: "kiali.example.com"
# ─── PostgreSQL ───────────────────────────────────────────────────────────────
# Пароли задаются в group_vars/all/vault.yml:
# vault_postgresql_postgres_password: "..."
# vault_postgresql_password: "..."
# postgresql_auth_username: "appuser"
# postgresql_auth_database: "appdb"
# postgresql_storage_size: "8Gi"
# postgresql_storage_class: "" # "" = default StorageClass
# postgresql_replica_count: 0 # 0 = только primary
# Shared endpoint — используется другими аддонами когда addon_postgresql: true
postgresql_external_host: "postgresql.postgresql.svc.cluster.local"
postgresql_external_port: 5432
# ─── MySQL ────────────────────────────────────────────────────────────────────
# Пароли задаются в group_vars/all/vault.yml:
# vault_mysql_root_password: "..."
# vault_mysql_password: "..."
# mysql_auth_username: "appuser"
# mysql_auth_database: "appdb"
# mysql_storage_size: "8Gi"
# mysql_storage_class: "" # "" = default StorageClass
# mysql_secondary_replica_count: 0 # 0 = только primary
# Shared endpoint — используется другими аддонами когда addon_mysql: true
mysql_external_host: "mysql.mysql.svc.cluster.local"
mysql_external_port: 3306
# ─── Databasus ────────────────────────────────────────────────────────────────
# Databasus автоматически получает подключение к PostgreSQL/MySQL
# если соответствующий аддон включён (addon_postgresql/addon_mysql: true).
databasus_ingress_enabled: true
databasus_ingress_host: "backup.example.com"
# databasus_ingress_tls: false
# databasus_version: "" # "" = latest
# ─── MinIO ────────────────────────────────────────────────────────────────────
# Логин/пароль задаются в vault.yml:
# vault_minio_root_user: "admin"
# vault_minio_root_password: "..."
# minio_mode: "standalone" # standalone | distributed
# minio_storage_size: "10Gi"
# minio_storage_class: "" # "" = default StorageClass
minio_ingress_enabled: false
minio_console_ingress_host: "minio.example.com"
minio_api_ingress_host: "s3.example.com"
# minio_ingress_tls: false
# ─── Velero ───────────────────────────────────────────────────────────────────
# Credentials задаются в vault.yml:
# vault_velero_s3_access_key: "..." # логин MinIO (обычно = vault_minio_root_user)
# vault_velero_s3_secret_key: "..." # пароль MinIO
# velero_s3_url: "http://minio.minio.svc.cluster.local:9000" # endpoint addon_minio
# velero_s3_bucket: "velero"
# velero_schedule_enabled: true
# velero_schedule_cron: "0 2 * * *" # каждый день в 02:00
# velero_schedule_ttl: "720h" # хранить 30 дней
# ─── CrowdSec ─────────────────────────────────────────────────────────────────
# Ключ энролмента задаётся в vault.yml (необязательно):
# vault_crowdsec_enroll_key: "..." # с https://app.crowdsec.net
# crowdsec_instance_name: "k3s-cluster"
# crowdsec_collections: "crowdsecurity/linux crowdsecurity/nginx crowdsecurity/kubernetes"
# crowdsec_nginx_bouncer_enabled: false
# ─── etcd backup ──────────────────────────────────────────────────────────────
etcd_backup_dir: "{{ k3s_data_dir }}/server/db/snapshots"
etcd_backup_retention: 5 # сколько снимков хранить
etcd_backup_copy_to_local: false # скопировать на Ansible-хост
etcd_backup_local_dir: "./etcd-backups"