Sergey Antropoff ed44d6418e Molecule и CI: единая схема тестов для аддонов и удобные параллельные прогоны
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
  при кратковременных сбоях зеркал/сети.
2026-04-28 01:16:05 +03:00
2026-04-27 08:45:15 +03:00

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
No description provided
Readme 1.9 MiB
Languages
Jinja 56.1%
Makefile 20%
Python 10.7%
Shell 7.7%
Smarty 3.8%
Other 1.7%