Добро пожаловать в демонстрационный DevOps-стенд, созданный для практики и экспериментов с инструментами автоматизации, мониторинга и CI/CD.
| Сервис | Назначение |
|---|---|
| GitHub | Репозиторий с наработками: пайплайны, конфигурации, скрипты, Helm-чарты и др. |
| Приложение в Kubernetes-кластере | Тестовое web-приложение, развёрнутое в кластере. |
| Мониторинг кластера (Grafana) | Визуализация метрик Prometheus и логов Loki. |
Стенд развёрнут на нескольких физических узлах, объединённых в локальную сеть под общим доменом *.lab-sarychev.ru.
haproxy — точка входа для удаленных клиентов - балансирует трафик между нодами k8s кластера, дает доступ по https к открытой части стенда;dnsmasq — DHCP-сервер, назначает IP-адреса и объединяет все хосты под единым доменом *.sarychev;Wireguard — обеспечивает удалённый доступ в локальную сеть стенда;xray — для доступа к удаленному VPS;Используется для генерации и распространения ssh ключей и сертификатов для безопасного https доступа.
Основные функции:
- lab-site — Docker-контейнер с Flask-приложением, доступным по адресу lab-sarychev.ru;
- certbot — автоматическое получение и обновление TLS/HTTPS-сертификатов;
Запускает Proxmox и управляет кластерами виртуальных машин (ВМ), обеспечивающих CI/CD и мониторинг.
Основные ВМ:
- Gitea — содержит репозитории, используемые в CI/CD процессах;
- Jenkins — оркестрация пайплайнов:
• сборка Docker-образов и Helm-чартов;
• автоматизация создания и включения новых ВМ в кластер Kubernetes;
• деплой приложений в кластер;
- Jenkins Agent — исполняет пайплайны; содержит Docker, Ansible и Python;
- Nexus — хранение Docker-образов и Helm-пакетов;
- Мониторинг и логирование:
• Prometheus — сбор метрик Kubernetes;
• Loki — агрегация логов приложений;
• Alertmanager — уведомления о сбоях;
• Grafana — визуализация данных;
- Kubernetes Master-node — управляющая нода кластера;
Также управляется через Proxmox и выполняет роль worker-ноды Kubernetes.
Функции:
- Запуск рабочих нагрузок (pods) из кластера;
- Динамическое создание и присоединение новых worker-нод при помощи Jenkins;
- Поддержание устойчивости и распределения нагрузки между компонентами кластера.
Кластер содержит несколько приложений, разложенных по собственным пространствам имён:
traefik – ingress-контроллер, дающий доступ к приложениям через worker-ноды.
Балансировка нагрузки происходит через HAProxy, развернутой на роутере под управлением openWRT, служащей точкой входа для клиентов из внешней сети.
longhorn – обеспечивает устойчивый доступ к данным Persistent Volume, на котором хранятся записи MongoDB тестового приложения.
monitoring:
kube-state-metrics – метрики кластера для внешнего Prometheus.promtail – передача логов на внешний Loki.node-exporter – метрики физических нод кластера.
app-stack (тестовое приложение):
backend (deployment|service) – деплоймент на 2 пода и сервис для сетевого доступа; выполняет запросы к БД и отдаёт их на фронт.compute-app (deployment) – масштабируемый деплоймент (по умолчанию на 3 пода), нагружает worker-ноды имитацией вычислений и пишет записи в БД.frontend (deployment|service) – отображает записи, которые compute-app пишет в БД.app-ingress – объект Ingress для backend и frontend через Traefik ingress controller.MongoDB (ConfigMap|Deployment|PersistentVolumeClaim|Service) – база данных для записей compute-app; ConfigMap используется для конфигурации, а PVC для хранения данных.