docs(config): комментарии к group_vars, host_vars, inventory и defaults аддонов
- group_vars/all/main.yml: пояснения к глобальным настройкам K3S, сети, CNI, kube-vip, chrony, ротации сертификатов, сервисным пользователям и пакетам. - group_vars/all/addons.yml: комментарии над флагами addon_* и активными блоками (NFS, CSI NFS, ingress-nginx, cert-manager, Databasus, MinIO, etcd backup и др.); исправлена битая строка-разделитель в секции Gitea Actions. - group_vars/all/vault.yml.example: описание назначения каждого секрета. - host_vars (master01, worker01, rpi01): пояснения к labels, taints и k3s_extra_server_args. - inventory/hosts.ini: комментарии к группам и строкам нод, пояснение nfs_server; исправлена повреждённая линия-разделитель. - addons/*/role/defaults/main.yml: русские комментарии над переменными (в т.ч. Harbor, Authelia, Istio, Prometheus, Vault, Jenkins, DNS-аддоны и др.). - addons/csi-nfs/role/defaults/main.yml: исправлено имя csi_nfs_reclaim_policy (опечатка с кириллической «М» в имени ключа). Рабочий vault.yml не менялся (секреты / ansible-vault).
This commit is contained in:
@@ -1,117 +1,184 @@
|
||||
---
|
||||
# Аддоны кластера — выбери что устанавливать
|
||||
# make install-full → core + все аддоны у которых true
|
||||
# make addon-<name> → конкретный аддон напрямую (флаг игнорируется)
|
||||
# make addon-<name> → конкретный аддон напрямую (флаг в addons.yml игнорируется)
|
||||
|
||||
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: false # 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 (обнаружение вторжений)
|
||||
addon_harbor: false # Harbor (container registry)
|
||||
addon_gitea: false # Gitea (Git hosting, авто-обновление до последней версии)
|
||||
addon_owncloud: false # ownCloud OCIS (файловое хранилище, авто-обновление)
|
||||
addon_nextcloud: false # Nextcloud (файловое хранилище, авто-обновление)
|
||||
addon_loki: false # Loki (агрегация логов)
|
||||
addon_promtail: false # Promtail (агент сбора логов → Loki)
|
||||
addon_tempo: false # Tempo (distributed tracing)
|
||||
addon_pushgateway: false # Prometheus Pushgateway (метрики batch-задач)
|
||||
addon_csi_s3: false # CSI S3 Driver (объектное хранилище как PVC, авто-MinIO)
|
||||
addon_csi_ceph: false # CSI Ceph / Rook-Ceph (distributed block + filesystem storage)
|
||||
addon_csi_glusterfs: false # CSI GlusterFS Driver (требует внешний GlusterFS + Heketi)
|
||||
addon_vaultwarden: false # Vaultwarden (self-hosted Bitwarden-совместимый менеджер паролей)
|
||||
addon_smtp_relay: false # SMTP Relay (Postfix → Yandex/другой SMTP) — для уведомлений из подов
|
||||
addon_vault: false # HashiCorp Vault (секреты, PKI, динамические credentials)
|
||||
addon_external_secrets: false # External Secrets Operator → Vault/AWS/GCP (k8s Secret sync)
|
||||
addon_jenkins: false # Jenkins CI/CD (Helm, dynamic k8s agents, JCasC)
|
||||
addon_netbird: false # NetBird VPN (управляющий сервер + subnet router + exit node)
|
||||
addon_mediaserver: false # MediaServer — Plex, *arr, Transmission, Prowlarr+Hysteria2, Samba
|
||||
addon_hysteria2_server: false # Hysteria2 VPN сервер на удалённый VPS (группа [hysteria2_server] в inventory)
|
||||
addon_splitgw: false # Split Gateway — прозрачный прокси sing-box+Hysteria2 (группа [splitgw] в inventory)
|
||||
addon_ingress_proxypass: false # External Services Ingress Proxy — проксировать внешние сервисы через ingress-nginx
|
||||
addon_ingress_add_domains: false # Ingress-only — добавить домены к существующим сервисам кластера
|
||||
addon_yandex_dns_controller: false # Yandex 360 DNS controller — управление DNS через ConfigMap (safe mode)
|
||||
addon_technitium_dns: false # Technitium DNS HA — Primary+Secondary с kube-vip LB, зональный sync
|
||||
addon_authelia: false # Authelia SSO — Forward-auth + OIDC provider для всех сервисов
|
||||
# Включить роль 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
|
||||
# Longhorn: реплицируемый блочный диск
|
||||
addon_longhorn: false
|
||||
# Web UI кластера (kubernetes-dashboard)
|
||||
addon_kubernetes_dashboard: false
|
||||
# Bitnami PostgreSQL, общий instance для аддонов
|
||||
addon_postgresql: false
|
||||
# Bitnami MySQL
|
||||
addon_mysql: 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
|
||||
# Rook-Ceph: блочное RWO и CephFS RWX
|
||||
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 (роль на хосте [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 ───────────────────────────────────────────────────────────
|
||||
# ─── CSI NFS Driver (Helm, StorageClass) ────────────────────────────────────
|
||||
# Версия чарта/образа CSI NFS
|
||||
csi_nfs_version: "v4.8.0"
|
||||
# Namespace, куда ставится Helm release драйвера
|
||||
csi_nfs_namespace: "kube-system"
|
||||
|
||||
# IP NFS сервера — по умолчанию берётся первый мастер
|
||||
# Если NFS на отдельном хосте: csi_nfs_server: "192.168.1.20"
|
||||
# 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
|
||||
csi_nfs_reclaim_policy: "Delete" # Delete | Retain
|
||||
csi_nfs_on_delete: "delete" # delete | retain | archive
|
||||
# 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 ────────────────────────────────────────────────────────────
|
||||
# ─── ingress-nginx (Helm) ───────────────────────────────────────────────────
|
||||
# Версия Helm-чарта ingress-nginx
|
||||
ingress_nginx_version: "4.10.1"
|
||||
# Namespace для controller и default backend
|
||||
ingress_nginx_namespace: "ingress-nginx"
|
||||
|
||||
# LoadBalancer получит IP от kube-vip
|
||||
# Тип Service: LoadBalancer — kube-vip выдаст внешний IP из LAN
|
||||
ingress_nginx_service_type: "LoadBalancer"
|
||||
|
||||
# Конкретный IP из пула kube-vip (оставь "" для автоматического)
|
||||
# Статический 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"
|
||||
ingress_nginx_error_cluster_domain: "" # например: cluster.example.com
|
||||
# Домен в подсказке на 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 — самоподписанный CA
|
||||
# letsencrypt — Let's Encrypt (требует публичный домен)
|
||||
# Какой ClusterIssuer создать: none | selfsigned | letsencrypt
|
||||
cert_manager_issuer: "letsencrypt"
|
||||
|
||||
# Email для Let's Encrypt (обязательно для letsencrypt)
|
||||
# ACME account email (обязателен для letsencrypt, алерты от CA)
|
||||
cert_manager_acme_email: "admin@example.com"
|
||||
|
||||
# ─── kube-prometheus-stack ────────────────────────────────────────────────────
|
||||
@@ -145,8 +212,9 @@ cert_manager_acme_email: "admin@example.com"
|
||||
# postgresql_storage_class: "" # "" = default StorageClass
|
||||
# postgresql_replica_count: 0 # 0 = только primary
|
||||
|
||||
# Shared endpoint — используется другими аддонами когда addon_postgresql: true
|
||||
# FQDN сервиса PostgreSQL в кластере (для URL в других чартах)
|
||||
postgresql_external_host: "postgresql.postgresql.svc.cluster.local"
|
||||
# Порт SQL
|
||||
postgresql_external_port: 5432
|
||||
|
||||
# ─── MySQL ────────────────────────────────────────────────────────────────────
|
||||
@@ -159,14 +227,17 @@ postgresql_external_port: 5432
|
||||
# mysql_storage_class: "" # "" = default StorageClass
|
||||
# mysql_secondary_replica_count: 0 # 0 = только primary
|
||||
|
||||
# Shared endpoint — используется другими аддонами когда addon_mysql: true
|
||||
# FQDN MySQL service в кластере
|
||||
mysql_external_host: "mysql.mysql.svc.cluster.local"
|
||||
# Порт SQL
|
||||
mysql_external_port: 3306
|
||||
|
||||
# ─── 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
|
||||
@@ -178,8 +249,11 @@ databasus_ingress_host: "backup.example.com"
|
||||
# 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
|
||||
|
||||
@@ -337,7 +411,7 @@ minio_api_ingress_host: "s3.example.com"
|
||||
# jenkins_plugins: [...] # переопределить список плагинов
|
||||
# jenkins_agent_enabled: true
|
||||
|
||||
# ─── Gitea Actions ───────────────────────────────────────────────────────────<EFBFBD><EFBFBD><EFBFBD>
|
||||
# ─── Gitea Actions ───────────────────────────────────────────────────────────
|
||||
# GitHub Actions-совместимая CI/CD встроенная в Gitea.
|
||||
# gitea_actions_enabled: false # включить Actions в Gitea (добавить в addon-gitea)
|
||||
# gitea_actions_runner_enabled: false # установить act_runner Deployment (DinD)
|
||||
@@ -407,7 +481,11 @@ minio_api_ingress_host: "s3.example.com"
|
||||
# groups: [admins, users]
|
||||
|
||||
# ─── etcd backup ──────────────────────────────────────────────────────────────
|
||||
# Каталог на control-plane, куда k3s пишет снапшоты etcd
|
||||
etcd_backup_dir: "{{ k3s_data_dir }}/server/db/snapshots"
|
||||
etcd_backup_retention: 5 # сколько снимков хранить
|
||||
etcd_backup_copy_to_local: false # скопировать на Ansible-хост
|
||||
# Сколько последних snapshot-файлов оставлять (ротация)
|
||||
etcd_backup_retention: 5
|
||||
# Копировать снапшот с ноды на машину, где запускается Ansible
|
||||
etcd_backup_copy_to_local: false
|
||||
# Локальный путь куда складывать копии (если copy_to_local: true)
|
||||
etcd_backup_local_dir: "./etcd-backups"
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
---
|
||||
# K3S — глобальные переменные play (см. также group_vars/all/addons.yml, vault.yml)
|
||||
|
||||
# Версия K3S в формате vX.Y.Z+k3sN (релизы: https://github.com/k3s-io/k3s/releases)
|
||||
k3s_version: "v1.29.3+k3s1"
|
||||
|
||||
# Тип хранилища etcd:
|
||||
@@ -7,41 +9,68 @@ k3s_version: "v1.29.3+k3s1"
|
||||
# external — внешний etcd кластер (ноды задаются группой [etcd_nodes] в inventory)
|
||||
k3s_etcd_type: "embedded"
|
||||
|
||||
# Токен из vault (создай group_vars/all/vault.yml)
|
||||
# Токен кластера из Ansible Vault: должен совпадать на всех нодах при join (см. vault_k3s_token)
|
||||
k3s_token: "{{ vault_k3s_token }}"
|
||||
|
||||
# Каталог, куда скачивается бинарь k3s, kubectl, crictl, ctr
|
||||
k3s_install_dir: /usr/local/bin
|
||||
|
||||
# Каталог конфигов Kubernetes / K3S (k3s.yaml, manifests)
|
||||
k3s_config_dir: /etc/kubernetes/k3s
|
||||
|
||||
# Данные control-plane, etcd, containerd, хранилище образов
|
||||
k3s_data_dir: /var/lib/kubernetes/k3s
|
||||
|
||||
# Путь к kubeconfig на ноде после join (копируется на control machine при необходимости)
|
||||
k3s_kubeconfig_path: "{{ k3s_config_dir }}/k3s.yaml"
|
||||
|
||||
# Pod network CIDR: адреса подов (overlay сеть, не пересекать с LAN)
|
||||
k3s_cluster_cidr: "10.42.0.0/16"
|
||||
|
||||
# Service CIDR: виртуальные ClusterIP (внутренняя маршрутизация kube-proxy)
|
||||
k3s_service_cidr: "10.43.0.0/16"
|
||||
|
||||
# IP сервиса CoreDNS (обычно второй IP из service_cidr, …10)
|
||||
k3s_cluster_dns: "10.43.0.10"
|
||||
|
||||
# Backends flannel: vxlan (по умолчанию), host-gw, wireguard и др.
|
||||
k3s_flannel_backend: "vxlan"
|
||||
|
||||
# CNI плагин: flannel (встроен в k3s) | calico | cilium
|
||||
# При calico/cilium — Flannel автоматически отключается в конфиге k3s
|
||||
k3s_cni: "flannel"
|
||||
|
||||
# traefik всегда отключён — используем ingress-nginx
|
||||
# false = разрешить встроенный ServiceLB (Klipper) для LoadBalancer; true = отключить, если внешний LB
|
||||
k3s_disable_servicelb: false
|
||||
|
||||
# false = разрешить local-path provisioner; true = отключить, если другой default StorageClass
|
||||
k3s_disable_local_storage: false
|
||||
|
||||
# Список node labels по умолчанию для роли (переопределяется в host_vars)
|
||||
k3s_node_labels: []
|
||||
|
||||
# Список taints по умолчанию (переопределяется в host_vars, например NoSchedule на RPi)
|
||||
k3s_node_taints: []
|
||||
|
||||
# Дополнительные args для k3s server (YAML, см. k3s docs), строка
|
||||
k3s_extra_server_args: ""
|
||||
|
||||
# Дополнительные args для k3s agent на worker-нодах
|
||||
k3s_extra_agent_args: ""
|
||||
|
||||
# Использовать become (sudo) при задачах на нодах
|
||||
k3s_become: true
|
||||
|
||||
# Дополнительные пакеты устанавливаемые на все ноды
|
||||
k3s_common_packages:
|
||||
# Клиент NFS для монтирования PVC/ручных шар
|
||||
- nfs-common
|
||||
# MinIO S3-совместимый CLI
|
||||
- mc
|
||||
- htop
|
||||
- nano
|
||||
- wget
|
||||
# iSCSI для Longhorn/CSI
|
||||
- open-iscsi
|
||||
- bash-completion
|
||||
- net-tools
|
||||
@@ -56,8 +85,10 @@ k3s_common_packages:
|
||||
# Пользователь создаётся bootstrap'ом через роль k8s-user.
|
||||
k3s_admin_user: devops
|
||||
|
||||
# После bootstrap все playbook подключаются как k3s_admin_user
|
||||
# Пользователь SSH по умолчанию для playbooks после развёртывания
|
||||
ansible_user: "{{ k3s_admin_user }}"
|
||||
|
||||
# Приватный ключ с машины, откуда запускается Ansible (в Docker: смонтирован id_rsa)
|
||||
ansible_ssh_private_key_file: "~/.ssh/id_rsa"
|
||||
|
||||
# SSH публичный ключ Ansible-машины (монтируется в контейнер из ~/.ssh)
|
||||
@@ -75,16 +106,21 @@ k3s_admin_disable_password_auth: false
|
||||
k3s_join_address: "{{ hostvars[groups['k3s_master'][0]]['ansible_host'] }}"
|
||||
|
||||
# ─── kube-vip ─────────────────────────────────────────────────────────────────
|
||||
# ОБЯЗАТЕЛЬНО: задай свободный IP из твоей подсети, не занятый DHCP!
|
||||
# ОБЯЗАТЕЛЬНО: задай свободный IP из твоей подсети, не занятый DHCP! VIP для API и/или LoadBalancer
|
||||
kube_vip_address: "192.168.1.100"
|
||||
|
||||
# Сетевой интерфейс на master-ноде.
|
||||
# Сетевой интерфейс на master-ноде, на который вешается VIP.
|
||||
# Оставь пустым — Ansible автоопределит через ansible_default_ipv4.interface.
|
||||
# Переопредели если нужно принудительно: kube_vip_interface: "eth0"
|
||||
kube_vip_interface: ""
|
||||
|
||||
# Версия kube-vip (static pod manifest)
|
||||
kube_vip_version: "v0.8.3"
|
||||
|
||||
# arp = L2/VIP в LAN; bgp = анонс через маршрутизатор
|
||||
kube_vip_mode: "arp" # arp (L2) | bgp (L3)
|
||||
|
||||
# kube-vip обрабатывает Service type LoadBalancer (кроме пула MetalLB, если тот настроен отдельно)
|
||||
kube_vip_services_enable: true # также обрабатывает LoadBalancer Services
|
||||
|
||||
# ─── mdadm ────────────────────────────────────────────────────────────────────
|
||||
@@ -115,14 +151,17 @@ cluster_service_users:
|
||||
key_type: rsa
|
||||
key_bits: 4096
|
||||
|
||||
# Локальная директория для сохранения сгенерированных SSH ключей
|
||||
# Локальная директория на машине, где крутится `make` — сохраняются сгенерированные ключи
|
||||
# Файлы: keys/<user>_id_rsa, keys/<user>_id_rsa.pub
|
||||
k8s_local_keys_dir: "./keys"
|
||||
|
||||
# ─── Chrony — синхронизация времени ───────────────────────────────────────────
|
||||
# Устанавливается на все ноды кластера и lab_hosts как обязательный компонент.
|
||||
# Критично для корректной работы etcd, TLS и Kubernetes API.
|
||||
# Часовой пояс (systemd/timedatectl)
|
||||
chrony_timezone: "Europe/Moscow"
|
||||
|
||||
# NTP pool — сервера, с кого забирать время
|
||||
chrony_ntp_servers:
|
||||
- 0.pool.ntp.org
|
||||
- 1.pool.ntp.org
|
||||
@@ -133,14 +172,15 @@ chrony_ntp_servers:
|
||||
# K3S выпускает сертификаты с фиксированным сроком жизни 1 год.
|
||||
# Systemd таймер обеспечивает автоматическое обновление до истечения срока,
|
||||
# гарантируя желаемый срок жизни кластера без ручного вмешательства.
|
||||
# Включить роль ротации сертификатов (systemd unit + таймер)
|
||||
k3s_cert_auto_rotate: true
|
||||
|
||||
# Желаемый срок жизни кластера без ручного вмешательства (в годах)
|
||||
# Сколько лет планируется вести кластер с автоматическим обновлением (влияет на политику/ожидания)
|
||||
k3s_cert_validity_years: 5
|
||||
|
||||
# Ротация запускается, когда до истечения сертификата остаётся меньше N дней
|
||||
# За сколько дней до конца срока действия сертификата срабатывает ротация
|
||||
k3s_cert_rotate_before_days: 90
|
||||
|
||||
# Расписание проверки (формат systemd OnCalendar): monthly, weekly, daily
|
||||
# Как часто unit проверяет срок: monthly | weekly | daily | или конкретный systemd OnCalendar
|
||||
# или конкретный формат: "*-*-1 03:00:00" (1-е число каждого месяца)
|
||||
k3s_cert_check_schedule: "monthly"
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
---
|
||||
# Секретные переменные — шифруй через ansible-vault!
|
||||
# Секретные переменные — копируй в vault.yml и шифруй через ansible-vault!
|
||||
#
|
||||
# Создание зашифрованного файла:
|
||||
# ansible-vault create group_vars/all/vault.yml
|
||||
@@ -12,149 +12,169 @@
|
||||
# ansible-playbook site.yml --vault-password-file ~/.vault_pass
|
||||
|
||||
# ─── K3S ──────────────────────────────────────────────────────────────────────
|
||||
# Общий токен присоединения нод (server/agent); минимум 32 случайных символа
|
||||
vault_k3s_token: "ЗАМЕНИ_НА_НАДЁЖНЫЙ_СЕКРЕТНЫЙ_ТОКЕН_МИН_32_СИМВОЛА"
|
||||
|
||||
# ─── PostgreSQL ────────────────────────────────────────────────────────────────
|
||||
vault_postgresql_postgres_password: "changeme-postgres" # пароль суперпользователя postgres
|
||||
vault_postgresql_password: "changeme-app" # пароль пользователя postgresql_auth_username
|
||||
# Пароль суперпользователя СУБД postgres (роль/чарт Bitnami)
|
||||
vault_postgresql_postgres_password: "changeme-postgres"
|
||||
# Пароль прикладного пользователя (postgresql_auth_username) и его БД
|
||||
vault_postgresql_password: "changeme-app"
|
||||
|
||||
# ─── MySQL ─────────────────────────────────────────────────────────────────────
|
||||
vault_mysql_root_password: "changeme-root" # пароль root
|
||||
vault_mysql_password: "changeme-app" # пароль пользователя mysql_auth_username
|
||||
# Пароль root в MySQL/MariaDB
|
||||
vault_mysql_root_password: "changeme-root"
|
||||
# Пароль прикладного пользователя (mysql_auth_username)
|
||||
vault_mysql_password: "changeme-app"
|
||||
|
||||
# ─── Prometheus / Grafana ──────────────────────────────────────────────────────
|
||||
# Логин веб-интерфейса Grafana
|
||||
vault_grafana_user: "admin"
|
||||
# Пароль администратора Grafana
|
||||
vault_grafana_password: "changeme-grafana"
|
||||
|
||||
# ─── Istio / Kiali ─────────────────────────────────────────────────────────────
|
||||
# Заполняется после первой установки Istio:
|
||||
# kubectl -n istio-system create token kiali --duration=8760h
|
||||
# Token для входа Kiali (после установки: kubectl -n istio-system create token kiali --duration=8760h)
|
||||
vault_kiali_token: ""
|
||||
|
||||
# ─── MinIO ─────────────────────────────────────────────────────────────────────
|
||||
# Access key (логин) root MinIO
|
||||
vault_minio_root_user: "admin"
|
||||
# Secret key (пароль) root MinIO
|
||||
vault_minio_root_password: "changeme-minio"
|
||||
|
||||
# ─── Velero (использует addon_minio как S3 backend) ───────────────────────────
|
||||
# Обычно те же значения что vault_minio_root_user / vault_minio_root_password
|
||||
vault_velero_s3_access_key: "admin" # = vault_minio_root_user
|
||||
vault_velero_s3_secret_key: "changeme-minio" # = vault_minio_root_password
|
||||
# ─── Velero (S3-совместимый backend, часто тот же MinIO) ───────────────────────
|
||||
# S3 key id (обычно = vault_minio_root_user)
|
||||
vault_velero_s3_access_key: "admin"
|
||||
# S3 secret (обычно = vault_minio_root_password)
|
||||
vault_velero_s3_secret_key: "changeme-minio"
|
||||
|
||||
# ─── Databasus ─────────────────────────────────────────────────────────────────
|
||||
vault_databasus_db_password: "changeme-databasus" # пароль для user/db databasus в PostgreSQL
|
||||
# Пароль пользователя/БД Databasus в PostgreSQL
|
||||
vault_databasus_db_password: "changeme-databasus"
|
||||
|
||||
# ─── CrowdSec ──────────────────────────────────────────────────────────────────
|
||||
# Ключ энролмента — получить на https://app.crowdsec.net → My Instances → +
|
||||
# Оставь пустым для оффлайн-режима (без Central API)
|
||||
# Ключ энролмента Central API (app.crowdsec.net); пусто = без облачной консоли
|
||||
vault_crowdsec_enroll_key: ""
|
||||
|
||||
# ─── Harbor ────────────────────────────────────────────────────────────────────
|
||||
vault_harbor_admin_password: "Harbor12345" # мин. 8 символов, латиница+цифры
|
||||
vault_harbor_db_password: "changeme-harbor" # пароль user 'harbor' в PostgreSQL
|
||||
# Пароль веб-админа Harbor (требования чарта: сложность)
|
||||
vault_harbor_admin_password: "Harbor12345"
|
||||
# Пароль пользователя БД Harbor во внешней PostgreSQL
|
||||
vault_harbor_db_password: "changeme-harbor"
|
||||
|
||||
# ─── Gitea ─────────────────────────────────────────────────────────────────────
|
||||
# Пароль первого администратора Gitea
|
||||
vault_gitea_admin_password: "changeme-gitea"
|
||||
vault_gitea_db_password: "changeme-gitea-db" # пароль user 'gitea' в PostgreSQL
|
||||
# Пароль пользователя БД gitea при внешнем PostgreSQL
|
||||
vault_gitea_db_password: "changeme-gitea-db"
|
||||
|
||||
# ─── ownCloud OCIS ─────────────────────────────────────────────────────────────
|
||||
# Пароль первого администратора ownCloud
|
||||
vault_owncloud_admin_password: "changeme-owncloud"
|
||||
|
||||
# ─── Nextcloud ─────────────────────────────────────────────────────────────────
|
||||
# Пароль админа Nextcloud
|
||||
vault_nextcloud_admin_password: "changeme-nextcloud"
|
||||
vault_nextcloud_db_password: "changeme-nextcloud-db" # пароль user 'nextcloud' в PostgreSQL
|
||||
# Пароль пользователя БД nextcloud при внешнем PostgreSQL
|
||||
vault_nextcloud_db_password: "changeme-nextcloud-db"
|
||||
|
||||
# ─── Vaultwarden ───────────────────────────────────────────────────────────────
|
||||
vault_vaultwarden_admin_token: "9R*eQ;G1M#)+Uw(afhoJ" # токен для /admin панели
|
||||
vault_vaultwarden_smtp_password: "fntwztnkacanpbwa" # пароль SMTP (Yandex App Password)
|
||||
# Секретный токен доступа к /admin
|
||||
vault_vaultwarden_admin_token: "9R*eQ;G1M#)+Uw(afhoJ"
|
||||
# Пароль SMTP для исходящей почты
|
||||
vault_vaultwarden_smtp_password: "fntwztnkacanpbwa"
|
||||
|
||||
# ─── CSI GlusterFS / Heketi ────────────────────────────────────────────────────
|
||||
vault_glusterfs_heketi_secret: "changeme-heketi" # пароль Heketi admin
|
||||
# Пароль/secret для Heketi REST admin
|
||||
vault_glusterfs_heketi_secret: "changeme-heketi"
|
||||
|
||||
# ─── SMTP Relay ────────────────────────────────────────────────────────────────
|
||||
vault_smtp_relay_password: "fntwztnkacanpbwa" # Yandex App Password для sergey@antropoff.ru
|
||||
# Пароль внешнего SMTP (например Yandex App Password)
|
||||
vault_smtp_relay_password: "fntwztnkacanpbwa"
|
||||
|
||||
# ─── HashiCorp Vault (auto-unseal: aws) ────────────────────────────────────────
|
||||
# Используется только при vault_auto_unseal_type: aws
|
||||
vault_aws_kms_access_key: "" # AWS IAM Access Key ID
|
||||
vault_aws_kms_secret_key: "" # AWS IAM Secret Access Key
|
||||
# ─── HashiCorp Vault (auto-unseal: AWS KMS) ───────────────────────────────────
|
||||
# Access Key ID IAM с правами на KMS
|
||||
vault_aws_kms_access_key: ""
|
||||
# Secret Access Key
|
||||
vault_aws_kms_secret_key: ""
|
||||
|
||||
# Vault Transit Seal (vault_auto_unseal_type: transit)
|
||||
vault_transit_seal_token: "" # token для доступа к transit engine другого Vault
|
||||
# ─── Vault Transit Seal (другой Vault как KMS) ────────────────────────────────
|
||||
# Токен с политикой на transit engine
|
||||
vault_transit_seal_token: ""
|
||||
|
||||
# Azure Key Vault unseal (vault_auto_unseal_type: azure)
|
||||
# ─── Azure Key Vault unseal ───────────────────────────────────────────────────
|
||||
# Client secret приложения Azure AD
|
||||
vault_azure_kv_client_secret: ""
|
||||
|
||||
# ─── External Secrets Operator → HashiCorp Vault ───────────────────────────────
|
||||
# Получить после шага 6 в addons/external-secrets/README.md:
|
||||
# vault write -f -field=secret_id auth/approle/role/eso-role/secret-id
|
||||
vault_eso_approle_secret_id: "" # AppRole Secret ID для ESO → Vault
|
||||
# ─── External Secrets Operator → HashiCorp Vault (AppRole) ───────────────────
|
||||
# Secret ID роли eso-role (см. addons/external-secrets/README.md)
|
||||
vault_eso_approle_secret_id: ""
|
||||
|
||||
# ─── Jenkins ───────────────────────────────────────────────────────────────────
|
||||
# Пароль админа Jenkins (JCasC)
|
||||
vault_jenkins_admin_password: "changeme-jenkins"
|
||||
|
||||
# ─── NetBird VPN ───────────────────────────────────────────────────────────────
|
||||
vault_netbird_coturn_password: "changeme-coturn" # пароль TURN credentials
|
||||
vault_netbird_router_setup_key: "" # Setup Key из NetBird Management UI → Setup Keys
|
||||
vault_netbird_exit_node_setup_key: "" # Setup Key для exit node (можно тот же что router)
|
||||
# Пароль coturn (TURN) для NetBird
|
||||
vault_netbird_coturn_password: "changeme-coturn"
|
||||
# Setup key для peer subnet router
|
||||
vault_netbird_router_setup_key: ""
|
||||
# Setup key для exit node
|
||||
vault_netbird_exit_node_setup_key: ""
|
||||
|
||||
# ─── MediaServer ───────────────────────────────────────────────────────────────
|
||||
# Plex claim token — получить на https://plex.tv/claim (действует 4 минуты)
|
||||
# После первого деплоя оставить пустым (сервер уже привязан к аккаунту)
|
||||
# Claim-токен Plex (plex.tv/claim, ~4 минуты)
|
||||
vault_plex_claim_token: ""
|
||||
|
||||
# Hysteria2 SOCKS5 прокси (sidecar в Prowlarr)
|
||||
#
|
||||
# Способ 1 — вставить URL целиком из Shadowrocket / NekoBox / Hiddify:
|
||||
# URL генерируется аддоном hysteria2-server автоматически (make addon-hysteria2-server)
|
||||
# Полный URI hysteria2://... для Prowlarr sidecar
|
||||
vault_hysteria2_url: ""
|
||||
# Пример: vault_hysteria2_url: "hysteria2://mypassword@vps.example.com:443?insecure=1&obfs=salamander&obfs-password=secret"
|
||||
#
|
||||
# Способ 2 — указать параметры по отдельности (если vault_hysteria2_url пустой):
|
||||
vault_hysteria2_server: "your-hysteria2-server.example.com:443" # host:port
|
||||
vault_hysteria2_auth: "your-hysteria2-password" # пароль аутентификации
|
||||
|
||||
# ─── Hysteria2 VPN сервер (аддон hysteria2-server) ────────────────────────────
|
||||
# Пароль для клиентов, подключающихся к VPS
|
||||
# host:port Hysteria2, если не задан vault_hysteria2_url
|
||||
vault_hysteria2_server: "your-hysteria2-server.example.com:443"
|
||||
# Пароль клиента Hysteria2
|
||||
vault_hysteria2_auth: "your-hysteria2-password"
|
||||
|
||||
# ─── Hysteria2 VPN сервер (VPS) ───────────────────────────────────────────────
|
||||
# Пароль для подключения клиентов к серверу
|
||||
vault_hysteria2_server_password: "changeme-hysteria2-server"
|
||||
# Пароль obfuscation salamander (если hysteria2_server_obfs_enabled: true)
|
||||
# Пароль obfs salamander на сервере
|
||||
vault_hysteria2_obfs_password: ""
|
||||
|
||||
# Samba LAN-шара
|
||||
# Пароль пользователя Samba (медиашара)
|
||||
vault_samba_password: "changeme-samba"
|
||||
|
||||
# Transmission пароль веб-интерфейса
|
||||
# Пароль веб-UI Transmission
|
||||
vault_transmission_password: "changeme-transmission"
|
||||
|
||||
# ─── Yandex 360 DNS Controller ────────────────────────────────────────────────
|
||||
# org_id: https://admin.yandex.ru/company-profile
|
||||
# token: создай приложение на https://oauth.yandex.ru/ (scope: Управление записями DNS)
|
||||
# затем: https://oauth.yandex.ru/authorize?response_type=token&client_id={CLIENT_ID}
|
||||
# org_id в Yandex 360 и OAuth-токен приложения
|
||||
yandex_dns:
|
||||
# ID организации (admin.yandex.ru)
|
||||
org_id: "3312086"
|
||||
# OAuth access token
|
||||
token: "y0_ЗАМЕНИ_НА_OAUTH_ТОКЕН"
|
||||
|
||||
# ── Technitium DNS HA ─────────────────────────────────────────────────────────
|
||||
technitium_dns_admin_password: "ЗАМЕНИ_НА_ПАРОЛЬ" # минимум 8 символов
|
||||
# Пароль веб-админа Technitium (min 8 символов)
|
||||
technitium_dns_admin_password: "ЗАМЕНИ_НА_ПАРОЛЬ"
|
||||
|
||||
# ── Authelia SSO ──────────────────────────────────────────────────────────────
|
||||
# Generate secrets:
|
||||
# openssl rand -base64 64 → jwt_secret, session_secret
|
||||
# openssl rand -base64 32 → storage_encryption_key
|
||||
# openssl rand -base64 48 → oidc_hmac_secret
|
||||
# openssl rand -hex 32 → each OIDC client secret
|
||||
# Generate password hash:
|
||||
# docker run authelia/authelia:latest authelia hash-password 'yourpassword'
|
||||
# Секрет подписи JWT
|
||||
authelia_jwt_secret: "ЗАМЕНИ_openssl_rand_-base64_64"
|
||||
# Секрет сессий
|
||||
authelia_session_secret: "ЗАМЕНИ_openssl_rand_-base64_64"
|
||||
# Ключ шифрования storage (БД/файл)
|
||||
authelia_storage_encryption_key: "ЗАМЕНИ_openssl_rand_-base64_32"
|
||||
# HMAC для OIDC
|
||||
authelia_oidc_hmac_secret: "ЗАМЕНИ_openssl_rand_-base64_48"
|
||||
authelia_oidc_private_key: "" # оставь пустым — будет сгенерирован автоматически
|
||||
# OIDC client secrets (генерируй для каждого включённого клиента):
|
||||
# PEM private key для OIDC (пусто = сгенерировать)
|
||||
authelia_oidc_private_key: ""
|
||||
# Секреты зарегистрированных OIDC clients
|
||||
authelia_oidc_secret_gitea: "ЗАМЕНИ_openssl_rand_-hex_32"
|
||||
authelia_oidc_secret_grafana: "ЗАМЕНИ_openssl_rand_-hex_32"
|
||||
authelia_oidc_secret_argocd: ""
|
||||
authelia_oidc_secret_minio: ""
|
||||
authelia_oidc_secret_vault: ""
|
||||
authelia_oidc_secret_nextcloud: ""
|
||||
# User password hashes (argon2id):
|
||||
# Argon2id хэш пароля пользователя admin
|
||||
authelia_user_admin_password_hash: "ЗАМЕНИ_НА_ARGON2ID_ХЭШ"
|
||||
|
||||
Reference in New Issue
Block a user