# K3S Ansible Stack Полный Kubernetes стек на базе K3S с HA (High Availability), управляемый через Ansible внутри Docker-контейнера. Ansible, Helm и kubectl устанавливать **не нужно** — всё работает через `make`. ## Быстрый старт ```bash git clone k3s-ansible && cd k3s-ansible make setup # создать .env # → отредактируй .env, inventory/hosts.ini, group_vars/all/main.yml make vault-create # создать vault с секретами make build # собрать Docker образ make install # развернуть K3S HA кластер make install-addons # установить аддоны (из group_vars/all/addons.yml) ``` ## Архитектура ``` ┌──────────────────────────────────────────────────────────────┐ │ Локальная сеть 192.168.1.0/24 │ │ VIP: 192.168.1.100 (kube-vip) │ │ ├── :6443 K3S API Server (HA) │ │ └── :80/:443 ingress-nginx → приложения │ │ │ │ ┌──────────────┐ ┌──────────────┐ ┌────────────────┐ │ │ │ master01 │ │ worker01 │ │ rpi01 │ │ │ │ K3S server │ │ K3S server │ │ K3S server │ │ │ │ etcd #1 │ │ etcd #2 │ │ etcd #3 │ │ │ │ NFS server │ │ workloads ✓ │ │ NoSchedule │ │ │ │ workloads ✓ │ │ │ │ workloads ✗ │ │ │ └──────────────┘ └──────────────┘ └────────────────┘ │ │ StorageClass: nfs-master01 (default) │ └──────────────────────────────────────────────────────────────┘ ``` HA-режим (embedded etcd): при отказе **любой одной** ноды кластер продолжает работать. **CNI:** `flannel` (встроен) | `calico` (Network Policy, BGP) | `cilium` (eBPF, Hubble) ## Аддоны (48) | Категория | Аддоны | |---|---| | **Сеть** | ingress-nginx, cert-manager, istio + kiali, crowdsec, netbird VPN, technitium-dns, yandex-dns-controller | | **Хранилище** | nfs-server, csi-nfs, longhorn, minio, csi-s3, csi-ceph (Ceph CSI), ceph-rock, csi-glusterfs | | **Базы данных** | postgresql, mysql, redis, mongodb, kafka, kafka-ui, rabbitmq, databasus | | **Observability** | metrics-server, prometheus+grafana+alertmanager, loki, promtail, tempo, pushgateway | | **CI/CD** | jenkins, gitea + actions, gitlab + runners, argocd | | **Безопасность** | vault, external-secrets, vaultwarden, authelia | | **Инфраструктура** | harbor, kubernetes-dashboard, velero, smtp-relay | | **Файловые хранилища** | nextcloud, owncloud | | **Медиасервер** | mediaserver — Plex, Sonarr, Radarr, Lidarr, Bazarr, Prowlarr + Hysteria2, Overseerr, Transmission, Samba | | **VPN / Прокси** | hysteria2-server, splitgw — прозрачный split-tunnel gateway (sing-box + Hysteria2 TPROXY, YouTube → прокси) | | **Ingress Proxy** | ingress-proxypass — проксировать внешние сервисы (IP:PORT) через ingress-nginx по домену | Все аддоны включаются флагами в `group_vars/all/addons.yml`. Установка: `make addon-`. Для сервисов с БД/кэшем добавлены явные режимы подключения: - `*_database_mode`: `auto` / `internal` / `external_postgresql` - `*_redis_mode`: `auto` / `internal` / `external_redis` (и `disabled` для Authelia) ## Документация | Раздел | Описание | |---|---| | [Быстрый старт](docs/getting-started.md) | Полная установка с нуля (12 шагов) | | [Архитектура](docs/architecture.md) | Топология кластера, CNI, компоненты | | [Настройка](docs/configuration.md) | K3S, kube-vip, NFS, ingress, cert-manager | | [Аддоны](docs/addons.md) | Каталог всех аддонов, флаги, зависимости | | [Хранилище](docs/storage.md) | NFS, Longhorn, MinIO, CSI S3, Ceph, GlusterFS | | [Безопасность](docs/security.md) | Vault, External Secrets, CrowdSec, Vaultwarden | | [CI/CD](docs/cicd.md) | Jenkins, Gitea Actions, ArgoCD | | [Observability](docs/observability.md) | Prometheus, Grafana, Loki, Tempo, Pushgateway | | [Сеть](docs/networking.md) | ingress-nginx, cert-manager, Istio, NetBird VPN | | [Операции](docs/operations.md) | Управление нодами, etcd backup/restore, K3S upgrade | | [Make команды](docs/make-reference.md) | Полный справочник make | | [Molecule тесты](docs/molecule-testing.md) | Тестирование ролей, написание тестов | | [Свои аддоны](docs/custom-addons.md) | Как добавить и подключить собственный аддон (роль, плейбук, make, Molecule) | | [Решение проблем](docs/troubleshooting.md) | Таблица проблем, диагностика | ## Структура проекта ``` k3s-ansible/ ├── Makefile ← Все команды (единая точка входа) ├── Dockerfile ← Ansible + Helm + kubectl ├── group_vars/all/ │ ├── main.yml ← Переменные кластера │ ├── addons.yml ← Флаги и настройки аддонов │ └── vault.yml ← Зашифрованные секреты ├── inventory/hosts.ini ← IP и параметры серверов ├── host_vars/ ← Настройки конкретных нод ├── playbooks/ │ ├── site.yml ← Основной плейбук │ └── addons.yml ← Плейбук аддонов ├── roles/ ← Роли кластера (k3s, kube-vip, nfs...) ├── addons/ ← Аддоны (каждый с README.md) └── docs/ ← Документация ``` ## Требования **Локальная машина:** Docker >= 24.0, make, SSH ключ **Серверы:** Ubuntu 20.04/22.04/24.04 или Debian 11/12, SSH доступ, sudo без пароля, 2+ ГБ RAM