Files
K3S/group_vars/all/addons.yml
Sergey Antropoff 38aaadbfb1 docs: sync addon docs with explicit external/internal service modes
Обновлена документация под новые аддоны (gitlab, redis, mongodb, kafka, kafka-ui, rabbitmq) и новую модель явного выбора зависимостей. Добавлены и унифицированы описания переключателей *_database_mode и *_redis_mode, обновлена таблица зависимостей аддонов, примеры конфигурации и список vault-секретов.
2026-04-29 23:21:04 +03:00

617 lines
34 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> → конкретный аддон напрямую (флаг в addons.yml игнорируется)
# Включить роль nfs-server: экспорт каталога по NFS с хоста [nfs_server]
addon_nfs_server: false
# Включить CSI драйвер NFS: StorageClass для RWX из NFS
addon_csi_nfs: false
# Ingress controller (HTTP/HTTPS) — почти для всех веб-аддонов
addon_ingress_nginx: true
# cert-manager: TLS, ClusterIssuer (Let's Encrypt и др.)
addon_cert_manager: false
# metrics-server: `kubectl top`, HPA на метриках CPU/памяти
addon_metrics_server: false
# kube-prometheus-stack: Prometheus, Grafana, Alertmanager
addon_prometheus_stack: false
# Istio mesh, опционально Kiali
addon_istio: false
# ArgoCD GitOps
addon_argocd: false
# Настройки Redis для ArgoCD:
# argocd_redis_mode: "auto" # auto | internal | external_redis
# argocd_redis_host: "redis-master.redis.svc.cluster.local"
# argocd_redis_port: 6379
# argocd_redis_password: "{{ vault_redis_password }}"
# Longhorn: реплицируемый блочный диск
addon_longhorn: false
# Web UI кластера (kubernetes-dashboard)
addon_kubernetes_dashboard: false
# Bitnami PostgreSQL, общий instance для аддонов
addon_postgresql: false
# Bitnami MySQL
addon_mysql: false
# GitLab + GitLab Runner в Kubernetes
addon_gitlab: false
# Redis (standalone/replication)
addon_redis: false
# MongoDB (standalone/replicaset)
addon_mongodb: false
# Kafka (standalone/cluster, KRaft)
addon_kafka: false
# Kafka UI (web-интерфейс Kafka)
addon_kafka_ui: false
# RabbitMQ (standalone/cluster)
addon_rabbitmq: false
# Databasus: веб-управление бэкапами БД
addon_databasus: false
# MinIO S3
addon_minio: false
# Velero: бэкапы namespace/PVC в объектное хранилище
addon_velero: false
# CrowdSec IDS + опциональный nginx bouncer
addon_crowdsec: false
# Harbor registry
addon_harbor: false
# Gitea, авто-обновление чарта/образа при пустой версии
addon_gitea: false
# ownCloud Infinite Scale
addon_owncloud: false
# Nextcloud Helm
addon_nextcloud: false
# Loki: хранение логов
addon_loki: false
# Promtail: сбор логов в Loki
addon_promtail: false
# Grafana Tempo: трейсинг
addon_tempo: false
# Pushgateway: batch/cron пушат метрики
addon_pushgateway: false
# CSI: монтирование S3 как PVC; с MinIO — авто-настройка endpoint
addon_csi_s3: false
# CSI Ceph: ceph-csi драйверы RBD/CephFS для PVC
addon_ceph_rock: false
# Старый флаг csi-ceph (основной для ceph-csi драйвера)
addon_csi_ceph: false
# CSI GlusterFS: нужен Heketi/Gluster снаружи
addon_csi_glusterfs: false
# Vaultwarden: Bitwarden-совместимый сервер
addon_vaultwarden: false
# Postfix relay в наружный SMTP
addon_smtp_relay: false
# HashiCorp Vault
addon_vault: false
# External Secrets: синк секретов в Kubernetes
addon_external_secrets: false
# Jenkins в кластере
addon_jenkins: false
# NetBird control plane, subnet router, exit
addon_netbird: false
# Plex, *arr, Samba, Transmission, прокси Prowlarr
addon_mediaserver: false
# Hysteria2 server на [hysteria2_server]
addon_hysteria2_server: false
# splitgw: sing-box TPROXY на [splitgw]
addon_splitgw: false
# Service+Endpoints+Ingress к внешним IP:порт
addon_ingress_proxypass: false
# Только новые Ingress к существующим Service
addon_ingress_add_domains: false
# CronJob+ConfigMap: записи Yandex 360 DNS API
addon_yandex_dns_controller: false
# Technitium DNS: HA primary/secondary, sync зон
addon_technitium_dns: false
# Authelia: forward-auth, OIDC
addon_authelia: false
# ─── NFS Server (роль на хосте [nfs_server]) ───────────────────────────────────
# Список export: path — каталог на диске; options — опции export для nfs-kernel-server
nfs_exports:
- path: /srv/nfs/k8s
# Права клиентов: rw, sync, без root_squash (осторожно в prod)
options: "*(rw,sync,no_subtree_check,no_root_squash)"
# Подсеть, с которой разрешён NFS (для ufw/iptables в роли)
nfs_allowed_network: "192.168.1.0/24"
# Создавать path из nfs_exports, если папок ещё нет
nfs_create_export_dirs: true
# Права на каталоги экспорта (octal)
nfs_export_dir_mode: "0777"
# Владелец каталога экспорта
nfs_export_dir_owner: "nobody"
# Группа владельца каталога экспорта
nfs_export_dir_group: "nogroup"
# ─── CSI NFS Driver (Helm, StorageClass) ────────────────────────────────────
# Версия чарта/образа CSI NFS
csi_nfs_version: "v4.8.0"
# Namespace, куда ставится Helm release драйвера
csi_nfs_namespace: "kube-system"
# IP/hostname сервера NFS для StorageClass; по умолчанию IP первого k3s_master
# Для вынесенного NFS: csi_nfs_server: "192.168.1.20"
csi_nfs_server: "{{ hostvars[groups['k3s_master'][0]]['ansible_host'] }}"
# Путь на NFS-сервере, общий root для subdir-per-PVC
csi_nfs_share: "/srv/nfs/k8s"
# Помечать создаваемый StorageClass как default
csi_nfs_storageclass_default: true
# Reclaim policy PV: Delete — удалить данные при удалении PVC; Retain — оставить
csi_nfs_reclaim_policy: "Delete"
# Поведение subdir provisioner при удалении PVC: delete|retain|archive
csi_nfs_on_delete: "delete"
# Устанавливать nfs-common на нодах (клиент NFS)
csi_nfs_install_client: true
# ─── ingress-nginx (Helm) ───────────────────────────────────────────────────
# Версия Helm-чарта ingress-nginx
ingress_nginx_version: "4.10.1"
# Namespace для controller и default backend
ingress_nginx_namespace: "ingress-nginx"
# Тип Service: LoadBalancer — kube-vip выдаст внешний IP из LAN
ingress_nginx_service_type: "LoadBalancer"
# Статический IP для Service (пусто — kube-vip выберет из пула/авто)
ingress_nginx_load_balancer_ip: ""
# Число реплик controller (для Deployment)
ingress_nginx_replica_count: 1
# true — DaemonSet вместо Deployment (по ноде)
ingress_nginx_use_daemonset: false
# Включить метрики для Prometheus
ingress_nginx_metrics_enabled: true
# Имя IngressClass (селектор в Ingress)
ingress_nginx_class_name: "nginx"
# Пометить этот class как default для Ingress без className
ingress_nginx_set_default_class: true
# Показывать кастомные HTML при 4xx/5xx
ingress_nginx_custom_errors_enabled: true
# Текст/бренд на странице ошибок
ingress_nginx_error_cluster_name: "K3S Cluster"
# Домен в подсказке на error page (опционально)
ingress_nginx_error_cluster_domain: ""
# Ресурсы подов ingress controller
ingress_nginx_resources:
# Минимальные запросы CPU/памяти для планировщика
requests:
cpu: 100m
memory: 90Mi
# Верхняя граница cgroups
limits:
cpu: 500m
memory: 256Mi
# Доп. args controller (map) — тонкая настройка nginx
ingress_nginx_extra_args: {}
# ─── cert-manager ─────────────────────────────────────────────────────────────
# Версия cert-manager (образ/манифесты)
cert_manager_version: "v1.15.3"
# Namespace CRD, cert-manager, webhook
cert_manager_namespace: "cert-manager"
# Какой ClusterIssuer создать: none | selfsigned | letsencrypt
cert_manager_issuer: "letsencrypt"
# ACME account email (обязателен для letsencrypt, алерты от CA)
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
# FQDN сервиса PostgreSQL в кластере (для URL в других чартах)
postgresql_external_host: "postgresql.postgresql.svc.cluster.local"
# Порт SQL
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
# FQDN MySQL service в кластере
mysql_external_host: "mysql.mysql.svc.cluster.local"
# Порт SQL
mysql_external_port: 3306
# ─── GitLab + GitLab Runner ───────────────────────────────────────────────────
# GitLab ставится Helm-чартом, runner включается как поды в кластере.
# При addon_postgresql: true — используется внешний PostgreSQL из addon_postgresql.
# gitlab_version: "" # "" = последняя версия чарта
# gitlab_namespace: "gitlab"
# gitlab_ingress_enabled: true
# gitlab_ingress_host: "gitlab.example.com"
# gitlab_ingress_class: "nginx"
# gitlab_ingress_tls: false
# gitlab_domain: "example.com" # базовый домен для GitLab chart
# gitlab_admin_password: "{{ vault_gitlab_admin_password }}"
# gitlab_storage_class: "" # "" = default StorageClass
# gitlab_gitaly_storage_size: "20Gi"
# gitlab_runner_install: true
# gitlab_runner_replicas: 2
# gitlab_runner_concurrent: 10
# gitlab_database_mode: "auto" # auto | internal | external_postgresql
# gitlab_db_name: "gitlabhq_production"
# gitlab_db_username: "gitlab"
# gitlab_db_password: "{{ vault_gitlab_db_password }}" # для внешнего PostgreSQL
# ─── Redis ─────────────────────────────────────────────────────────────────────
# Bitnami Redis. architecture: standalone | replication
# redis_version: "19.6.4"
# redis_namespace: "redis"
# redis_architecture: "standalone"
# redis_auth_enabled: true
# redis_auth_password: "{{ vault_redis_password }}"
# redis_storage_class: ""
# redis_storage_size: "8Gi"
# redis_replica_count: 2 # используется при architecture=replication
# redis_metrics_enabled: true
# ─── MongoDB ───────────────────────────────────────────────────────────────────
# Bitnami MongoDB. architecture: standalone | replicaset
# mongodb_version: "15.6.21"
# mongodb_namespace: "mongodb"
# mongodb_architecture: "standalone"
# mongodb_auth_enabled: true
# mongodb_root_user: "root"
# mongodb_root_password: "{{ vault_mongodb_root_password }}"
# mongodb_username: "appuser"
# mongodb_password: "{{ vault_mongodb_password }}"
# mongodb_database: "appdb"
# mongodb_storage_class: ""
# mongodb_storage_size: "8Gi"
# mongodb_replica_count: 3 # используется при architecture=replicaset
# mongodb_metrics_enabled: true
# ─── Kafka (KRaft) ─────────────────────────────────────────────────────────────
# Bitnami Kafka без ZooKeeper (KRaft). mode: standalone | cluster
# kafka_version: "30.1.8"
# kafka_namespace: "kafka"
# kafka_mode: "standalone"
# kafka_storage_class: ""
# kafka_storage_size: "20Gi"
# kafka_auth_enabled: false
# kafka_client_passwords: ["{{ vault_kafka_client_password }}"]
# kafka_controller_replica_count: 3 # используется в mode=cluster
# kafka_broker_replica_count: 3 # используется в mode=cluster
# kafka_metrics_enabled: true
# ─── Kafka UI ──────────────────────────────────────────────────────────────────
# Web UI для просмотра топиков, consumer groups и сообщений Kafka.
# kafka_ui_version: "0.7.6"
# kafka_ui_namespace: "kafka-ui"
# kafka_ui_ingress_enabled: true
# kafka_ui_ingress_host: "kafka-ui.example.com"
# kafka_ui_ingress_class: "nginx"
# kafka_ui_ingress_tls: false
# kafka_ui_cluster_name: "k3s-kafka"
# kafka_ui_bootstrap_servers: "kafka.kafka.svc.cluster.local:9092"
# kafka_ui_auth_username: "admin"
# kafka_ui_auth_password: "{{ vault_kafka_ui_password }}"
# ─── RabbitMQ ──────────────────────────────────────────────────────────────────
# Bitnami RabbitMQ. mode: standalone | cluster
# rabbitmq_version: "15.5.1"
# rabbitmq_namespace: "rabbitmq"
# rabbitmq_mode: "standalone"
# rabbitmq_auth_username: "appuser"
# rabbitmq_auth_password: "{{ vault_rabbitmq_password }}"
# rabbitmq_erlang_cookie: "{{ vault_rabbitmq_erlang_cookie }}"
# rabbitmq_storage_class: ""
# rabbitmq_storage_size: "8Gi"
# rabbitmq_replica_count: 3 # используется в mode=cluster
# rabbitmq_metrics_enabled: true
# ─── Databasus ────────────────────────────────────────────────────────────────
# Databasus автоматически получает подключение к PostgreSQL/MySQL
# если соответствующий аддон включён (addon_postgresql/addon_mysql: true).
# Создавать Ingress к веб-UI Databasus
databasus_ingress_enabled: true
# Hostname в Ingress
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 Console через Ingress
minio_ingress_enabled: false
# Host для веб-консоли (порт 9001)
minio_console_ingress_host: "minio.example.com"
# Host для S3 API (порт 9000)
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
# ─── Harbor ───────────────────────────────────────────────────────────────────
# Пароли задаются в vault.yml:
# vault_harbor_admin_password: "Harbor12345"
# vault_harbor_db_password: "..." # используется только при addon_postgresql: true
# harbor_ingress_host: "harbor.example.com"
# harbor_registry_storage_size: "20Gi"
# harbor_database_mode: "auto" # auto | internal | external_postgresql
# ─── Gitea ────────────────────────────────────────────────────────────────────
# Пароли задаются в vault.yml:
# vault_gitea_admin_password: "..."
# vault_gitea_db_password: "..." # используется только при addon_postgresql: true
# gitea_ingress_host: "gitea.example.com"
# gitea_version: "" # "" = автопоиск последней версии
# gitea_ssh_enabled: false # NodePort SSH для git clone
# gitea_database_mode: "auto" # auto | internal | external_postgresql
# ─── ownCloud (OCIS) ──────────────────────────────────────────────────────────
# Пароль задаётся в vault.yml:
# vault_owncloud_admin_password: "..."
# owncloud_ingress_host: "cloud.example.com"
# owncloud_version: "" # "" = автопоиск последней версии
# owncloud_storage_users_size: "20Gi"
# ─── Nextcloud ────────────────────────────────────────────────────────────────
# Пароли задаются в vault.yml:
# vault_nextcloud_admin_password: "..."
# vault_nextcloud_db_password: "..." # используется только при addon_postgresql: true
# nextcloud_ingress_host: "nextcloud.example.com"
# nextcloud_version: "" # "" = автопоиск последней версии
# nextcloud_storage_size: "20Gi"
# nextcloud_database_mode: "external_postgresql" # auto | sqlite | external_postgresql
# ─── Loki ─────────────────────────────────────────────────────────────────────
# loki_storage_type: "filesystem" # filesystem (авто: s3 если addon_minio: true)
# loki_storage_size: "10Gi"
# loki_retention_period: "720h" # 30 дней
# loki_ingress_enabled: false
# loki_ingress_host: "loki.example.com"
# ─── Promtail ─────────────────────────────────────────────────────────────────
# DaemonSet на всех нодах. Требует addon_loki: true (или внешний Loki).
# promtail_loki_url: "http://loki.loki.svc.cluster.local:3100/loki/api/v1/push"
# ─── Tempo ────────────────────────────────────────────────────────────────────
# Distributed tracing backend.
# tempo_storage_size: "10Gi"
# tempo_retention_period: "720h"
# tempo_receivers_otlp_enabled: true # порты 4317 (gRPC) и 4318 (HTTP)
# tempo_receivers_jaeger_enabled: true # порты 14268 (HTTP) и 14250 (gRPC)
# tempo_receivers_zipkin_enabled: false # порт 9411
# ─── Pushgateway ──────────────────────────────────────────────────────────────
# Для push-метрик из batch-задач, CI/CD, скриптов.
# pushgateway_ingress_enabled: false
# pushgateway_ingress_host: "pushgateway.example.com"
# pushgateway_persistence_enabled: false # сохранять метрики между рестартами
# ─── CSI S3 ───────────────────────────────────────────────────────────────────
# Монтирует S3/MinIO бакеты как PersistentVolume в поды.
# При addon_minio: true — автоматически использует внутренний MinIO.
# csi_s3_mounter: "geesefs" # geesefs | s3fs | rclone
# csi_s3_endpoint: "" # авто-MinIO если addon_minio: true
# csi_s3_access_key: "" # авто из vault_minio_root_user
# csi_s3_secret_key: "" # авто из vault_minio_root_password
# ─── CSI Ceph (ceph-csi: RBD + CephFS) ───────────────────────────────────────
# Требует уже существующий Ceph-кластер (FSID, MON, user/key).
csi_ceph_driver_ref: "devel" # ветка/тег ceph/ceph-csi (devel|v3.x.x)
csi_ceph_namespace: "kube-system"
csi_ceph_cluster_id: "b9127830-b0cc-4e34-aa47-9d1a2e9949a8" # FSID (ceph fsid)
csi_ceph_monitors:
- "10.0.0.11:6789"
- "10.0.0.12:6789"
- "10.0.0.13:6789"
csi_ceph_user_id: "kubernetes"
csi_ceph_user_key: "{{ vault_csi_ceph_user_key }}"
csi_ceph_rbd_storage_class_name: "ceph-rbd"
csi_ceph_rbd_pool: "rbd"
csi_ceph_rbd_fs_type: "ext4"
csi_ceph_rbd_storage_class_default: false
csi_ceph_cephfs_storage_class_name: "cephfs"
csi_ceph_cephfs_fs_name: "cephfs"
csi_ceph_cephfs_pool: "cephfs_data"
csi_ceph_cephfs_storage_class_default: false
csi_ceph_reclaim_policy: "Delete" # Delete | Retain
csi_ceph_volume_binding_mode: "Immediate" # Immediate | WaitForFirstConsumer
csi_ceph_enable_rbd: true
csi_ceph_enable_cephfs: true
# ─── CSI GlusterFS ────────────────────────────────────────────────────────────
# Требует внешний GlusterFS кластер + Heketi REST API.
# csi_glusterfs_heketi_url: "http://heketi.glusterfs.local:8080"
# csi_glusterfs_cluster_id: "" # heketi-cli cluster list
# csi_glusterfs_volume_type: "replicate:3"
# csi_glusterfs_endpoints: # прямое подключение без Heketi
# - name: "gluster01"
# ip: "192.168.1.10"
# ─── Vaultwarden ──────────────────────────────────────────────────────────────
# Self-hosted Bitwarden-совместимый менеджер паролей.
# Секреты задаются в vault.yml:
# vault_vaultwarden_admin_token: "..." # токен доступа к /admin
# vault_vaultwarden_smtp_password: "..." # пароль SMTP
# vaultwarden_domain: "https://vault.example.com"
# vaultwarden_signups_allowed: false
# vaultwarden_ingress_host: "vault.example.com"
# vaultwarden_smtp_enabled: false
# vaultwarden_smtp_host: "smtp.yandex.ru"
# vaultwarden_smtp_from: "vault@example.com"
# vaultwarden_smtp_port: 465
# vaultwarden_smtp_security: "force_tls" # force_tls | starttls | off
# vaultwarden_smtp_username: "user@example.com"
# ─── SMTP Relay ───────────────────────────────────────────────────────────────
# Postfix relay для отправки почты из подов через внешний SMTP (Yandex/Gmail/etc).
# Пароль задаётся в vault.yml: vault_smtp_relay_password
# Использование: SMTP_HOST=smtp-relay.smtp-relay.svc.cluster.local, SMTP_PORT=25
# smtp_relay_host: "smtp.yandex.ru"
# smtp_relay_port: 465
# smtp_relay_username: "sergey@antropoff.ru"
# smtp_relay_from: "vault@antropoff.ru"
# smtp_relay_allowed_sender_domains: "antropoff.ru"
# smtp_relay_mynetworks: "10.0.0.0/8 172.16.0.0/12 192.168.0.0/16 127.0.0.0/8"
# ─── HashiCorp Vault ──────────────────────────────────────────────────────────
# Менеджер секретов. README: addons/vault/README.md
# vault_mode: "standalone" # standalone (1 pod) | ha (3 pods Raft)
# vault_auto_unseal_type: "none" # none | k8s | aws | gcp | azure | transit
# k8s: ключи в Secret (homelab), aws/gcp/azure/transit (production)
# vault_injector_enabled: true # Vault Agent Injector (авто-инжекция в поды)
# vault_ingress_enabled: false
# vault_ingress_host: "vault-hc.example.com"
# vault_storage_size: "10Gi"
# Для AWS KMS unseal (vault.yml): vault_aws_kms_access_key, vault_aws_kms_secret_key
# ─── External Secrets Operator ────────────────────────────────────────────────
# Синхронизирует секреты из Vault/AWS/GCP в k8s Secrets. README: addons/external-secrets/README.md
# Требует предварительно созданного AppRole в Vault (шаги в README).
# external_secrets_vault_url: "http://vault.vault.svc.cluster.local:8200"
# external_secrets_vault_kv_path: "secret"
# external_secrets_vault_role_id: "" # после создания AppRole в Vault
# external_secrets_vault_store_name: "vault-backend"
# Пароль задаётся в vault.yml: vault_eso_approle_secret_id
# ─── Jenkins ──────────────────────────────────────────────────────────────────
# CI/CD сервер с dynamic k8s pod agents.
# Пароль задаётся в vault.yml: vault_jenkins_admin_password
# jenkins_ingress_host: "jenkins.example.com"
# jenkins_storage_size: "20Gi"
# jenkins_plugins: [...] # переопределить список плагинов
# jenkins_agent_enabled: true
# ─── Gitea Actions ───────────────────────────────────────────────────────────
# GitHub Actions-совместимая CI/CD встроенная в Gitea.
# gitea_actions_enabled: false # включить Actions в Gitea (добавить в addon-gitea)
# gitea_actions_runner_enabled: false # установить act_runner Deployment (DinD)
# gitea_actions_runner_replicas: 2 # параллельных runner
# gitea_actions_runner_dind_enabled: true # Docker-in-Docker для docker build/run в jobs
# ─── NetBird VPN ──────────────────────────────────────────────────────────────
# Self-hosted WireGuard-based VPN. Management + Signal + Coturn (STUN/TURN) + kube-vip LB.
# Пароли задаются в vault.yml: vault_netbird_coturn_password, vault_netbird_router_setup_key
# netbird_domain: "netbird.example.com"
# netbird_management_lb_ip: "" # пусто = kube-vip назначит автоматически
# netbird_signal_lb_ip: ""
# netbird_coturn_lb_ip: ""
# Subnet router (доступ к подсетям кластера из VPN):
# netbird_subnet_router_enabled: false
# netbird_subnet_routes: ["192.168.1.0/24", "10.42.0.0/16"]
# Exit node (весь интернет-трафик VPN-клиентов через k3s ноду):
# netbird_exit_node_enabled: false
# После установки — настрой маршруты в Management UI
# ─── Technitium DNS HA ───────────────────────────────────────────────────────
# Self-hosted Primary+Secondary DNS с kube-vip LoadBalancer IP и авто-синхронизацией зон.
# Пароль задаётся в vault.yml: technitium_dns_admin_password
# technitium_dns_primary_ip: "192.168.1.53" # статический IP для primary DNS (kube-vip)
# technitium_dns_secondary_enabled: true
# technitium_dns_secondary_ip: "192.168.1.54" # статический IP для secondary DNS (kube-vip)
# technitium_dns_primary_node: "" # pinned hostname (пусто = soft anti-affinity)
# technitium_dns_secondary_node: ""
# technitium_dns_domain: "home.local" # локальная DNS-зона
# technitium_dns_forwarders: ["1.1.1.1", "8.8.8.8"]
# technitium_dns_recursion: "AllowOnlyForPrivateNetworks" # Allow | Deny | AllowOnlyForPrivateNetworks
# technitium_dns_primary_host: "dns.home.local" # Web UI через ingress
# technitium_dns_secondary_host: "dns-secondary.home.local"
# technitium_dns_ingress_enabled: true
# technitium_dns_ingress_tls_enabled: false
# technitium_dns_sync_schedule: "*/5 * * * *" # как часто синхронизировать зоны primary→secondary
# ExternalDNS (автоматические DNS-записи из Ingress/Service):
# technitium_dns_externaldns_enabled: false
# technitium_dns_externaldns_domain_filter: ["home.local"]
# technitium_dns_externaldns_policy: "upsert-only" # sync | upsert-only
# technitium_dns_externaldns_txt_owner_id: "k3s-home"
# ─── Authelia SSO ────────────────────────────────────────────────────────────
# Централизованная аутентификация: forward-auth для ingress-nginx + OIDC provider.
# Все секреты — в vault.yml (authelia_jwt_secret, authelia_session_secret, и др.)
# authelia_host: "auth.home.local" # URL портала авторизации
# authelia_domain: "home.local" # базовый домен (session cookie domain)
# authelia_two_factor_enabled: false # включить 2FA для защищённых сервисов
# authelia_storage_type: "sqlite" # sqlite | postgresql
# authelia_redis_mode: "auto" # auto | internal | external_redis | disabled
# authelia_redis_host: "redis-master.redis.svc.cluster.local"
# authelia_redis_port: 6379
# authelia_smtp_enabled: false # SMTP для сброса пароля и 2FA email
# Домены с защитой (forward-auth):
# authelia_protected_domains: [sonarr.home.local, radarr.home.local, ...]
# authelia_admin_domains: [argocd.home.local, vault.home.local, ...]
# authelia_bypass_domains: [plex.home.local]
# OIDC клиенты (включить нужные):
# authelia_oidc_gitea_enabled: true # + authelia_oidc_secret_gitea в vault
# authelia_oidc_grafana_enabled: true # + authelia_oidc_secret_grafana в vault
# authelia_oidc_argocd_enabled: false
# authelia_oidc_minio_enabled: false
# authelia_oidc_vault_enabled: false
# Пользователи (хэши паролей — в vault.yml):
# authelia_users:
# admin:
# displayname: "Administrator"
# email: "admin@home.local"
# groups: [admins, users]
# ─── etcd backup ──────────────────────────────────────────────────────────────
# Каталог на control-plane, куда k3s пишет снапшоты etcd
etcd_backup_dir: "{{ k3s_data_dir }}/server/db/snapshots"
# Сколько последних snapshot-файлов оставлять (ротация)
etcd_backup_retention: 5
# Копировать снапшот с ноды на машину, где запускается Ansible
etcd_backup_copy_to_local: false
# Локальный путь куда складывать копии (если copy_to_local: true)
etcd_backup_local_dir: "./etcd-backups"