ed44d6418e2a24978520acce38b8f67863be22f8
Makefile - Уникальные имена контейнеров на каждый вызов make (ANSIBLE_RUN_ID); переопределение через ANSIBLE_CONTAINER_NAME / MOLECULE_CONTAINER_NAME; отдельное имя для Molecule, чтобы k3s-ansible и molecule не конфликтовали. - Старые цели molecule-prometheus и molecule-istio переведены на molecule-addon (prometheus-stack, istio); добавлены явные molecule-addon-prometheus-stack и molecule-addon-istio; в molecule-addon-all включены prometheus-stack и istio (полный набор аддонов), скорректированы подписи. - Phony-таргет dashboard (без внесения кода в dashboard/ в этот коммит). Сценарии Molecule (converge/verify) — десятки аддонов - Добавлены/выровнены переменные и шаблоны под текущие роли (harbor, hysteria2, ingress-*, jenkins, mediaserver, netbird, nextcloud, splitgw, vault, vaultwarden и др.). - Helm/файлы на хост: delegate_to: localhost, run_once где уместно (technitium-dns, yandex-dns-controller); verify на localhost для file-based проверок. - Уточнения проверок: metrics-server, minio, promtail, pushgateway, velero (bool из фактов/строк), splitgw (JSON, поиск портов/DNS-правил в структуре). - В meta ролей: prometheus_stack + namespace, istio + namespace; у istio согласованы converge/verify (в т.ч. метрики, ослаблены жёсткие assert под шаблоны Kiali). - csi-nfs: комментарий к volume_binding_mode (Immediate / WaitForFirstConsumer). Инфраструктура - .gitignore: каталог dashboard/ (локальная копия не в репозитории). - docker-compose: убрано фиксированное container_name для параллельных ; TZ по умолчанию Europe/Moscow. - roles/k3s/tasks/prereqs.yml: повторные попытки update_cache и apt install при кратковременных сбоях зеркал/сети.
K3S Ansible Stack
Полный Kubernetes стек на базе K3S с HA (High Availability), управляемый через Ansible внутри Docker-контейнера. Ansible, Helm и kubectl устанавливать не нужно — всё работает через make.
Быстрый старт
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)
Аддоны (37)
| Категория | Аддоны |
|---|---|
| Сеть | ingress-nginx, cert-manager, istio + kiali, crowdsec, netbird VPN |
| Хранилище | nfs-server, csi-nfs, longhorn, minio, csi-s3, csi-ceph, csi-glusterfs |
| Базы данных | postgresql, mysql, databasus |
| Observability | metrics-server, prometheus+grafana+alertmanager, loki, promtail, tempo, pushgateway |
| CI/CD | jenkins, gitea + actions, argocd |
| Безопасность | vault, external-secrets, vaultwarden |
| Инфраструктура | harbor, kubernetes-dashboard, velero, smtp-relay |
| Файловые хранилища | nextcloud, owncloud |
| Медиасервер | mediaserver — Plex, Sonarr, Radarr, Lidarr, Bazarr, Prowlarr + Hysteria2, Overseerr, Transmission, Samba |
| VPN / Прокси | 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>.
Документация
| Раздел | Описание |
|---|---|
| Быстрый старт | Полная установка с нуля (12 шагов) |
| Архитектура | Топология кластера, CNI, компоненты |
| Настройка | K3S, kube-vip, NFS, ingress, cert-manager |
| Аддоны | Каталог всех аддонов, флаги, зависимости |
| Хранилище | NFS, Longhorn, MinIO, CSI S3, Ceph, GlusterFS |
| Безопасность | Vault, External Secrets, CrowdSec, Vaultwarden |
| CI/CD | Jenkins, Gitea Actions, ArgoCD |
| Observability | Prometheus, Grafana, Loki, Tempo, Pushgateway |
| Сеть | ingress-nginx, cert-manager, Istio, NetBird VPN |
| Операции | Управление нодами, etcd backup/restore, K3S upgrade |
| Make команды | Полный справочник make |
| Molecule тесты | Тестирование ролей, написание тестов |
| Решение проблем | Таблица проблем, диагностика |
Структура проекта
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
Description
Languages
Jinja
56.1%
Makefile
20%
Python
10.7%
Shell
7.7%
Smarty
3.8%
Other
1.7%