Базы данных: - 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
185 lines
10 KiB
YAML
185 lines
10 KiB
YAML
---
|
||
# ═══════════════════════════════════════════════════════════════════════════════
|
||
# Аддоны кластера — выбери что устанавливать
|
||
# 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"
|