Обновлена документация под новые аддоны (gitlab, redis, mongodb, kafka, kafka-ui, rabbitmq) и новую модель явного выбора зависимостей. Добавлены и унифицированы описания переключателей *_database_mode и *_redis_mode, обновлена таблица зависимостей аддонов, примеры конфигурации и список vault-секретов.
107 lines
7.0 KiB
Markdown
107 lines
7.0 KiB
Markdown
# K3S Ansible Stack
|
||
|
||
Полный Kubernetes стек на базе K3S с HA (High Availability), управляемый через Ansible внутри Docker-контейнера. Ansible, Helm и kubectl устанавливать **не нужно** — всё работает через `make`.
|
||
|
||
## Быстрый старт
|
||
|
||
```bash
|
||
git clone <url> 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-<name>`.
|
||
|
||
Для сервисов с БД/кэшем добавлены явные режимы подключения:
|
||
- `*_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
|