Данный проект представляет собой MVP инфраструктурной платформы для развертывания и управления микросервисными приложениями на базе самоуправляемого Kubernetes кластера (self-hosted). Платформа включает полный набор компонентов для мониторинга, логирования, управления конфигурациями и CI/CD.
Основное приложение: Google Cloud Platform Microservices Demo (Online Boutique) — демонстрационное приложение для онлайн-магазина, состоящее из множества микросервисов, написанных на различных языках программирования.
- Закрепление знаний по развертыванию и администрированию Kubernetes
- Построение production-ready инфраструктуры с автоматизацией
- Реализация полного цикла CI/CD
- Демонстрация навыков работы с инструментами DevOps
- Создание портфолио для работодателя
Internet
↓
Router (NAT 1: 80, 443, 32000 → Windows Host)
↓
Windows Host (VMware Workstation - NAT 2: 192.168.50.0/24)
↓
┌─────────────────────────────────────────────────────┐
│ Kubernetes Cluster (HA Setup) │
├─────────────────────────────────────────────────────┤
│ │
│ Control Plane (3 nodes - HA): │
│ ├─ cp1 (192.168.50.111) │
│ ├─ cp2 (192.168.50.112) │
│ └─ cp3 (192.168.50.113) │
│ │
│ Worker Nodes (3 nodes): │
│ ├─ worker1 (192.168.50.121) │
│ ├─ worker2 (192.168.50.122) │
│ └─ worker3 (192.168.50.123) │
│ │
│ ┌────────────────────────────────────────────┐ │
│ │ Kubernetes Namespaces │ │
│ ├────────────────────────────────────────────┤ │
│ │ • argocd - управление конфигурациями │ │
│ │ • ingress-nginx - ingress controller │ │
│ │ • logging - мониторинг и логирование │ │
│ │ • microservices-demo - приложение │ │
│ │ • kube-system - утилиты системы │ │
│ └────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────┘
Internet (динамический IP)
↓
Router NAT (дома/провайдер)
192.168.99.100
↙ ↓ ↓ ↘
80 443 32000 (другие)
↘ ↓ ↓ ↙
Windows Host (NAT 1)
↓
VMware Workstation NAT 2
192.168.50.0/24
192.168.50.2 (gateway)
↓
┌────────────────┼────────────────┐
↓ ↓ ↓
cp1:111 cp2:112 cp3:113
(control) (control) (control)
↓ ↓ ↓
6443 (мастер) ---
↓ ↓ ↓
worker1:121 worker2:122 worker3:123
31525 (HTTP) 31525 (HTTP) 31525 (HTTP)
31526 (HTTPS) 31526 (HTTPS) 31526 (HTTPS)
32000 (Grafana) 32000 (Grafana) 32000 (Grafana)
| IP | Хостнейм | CPU | RAM | SSD | Роль |
|---|---|---|---|---|---|
| 192.168.50.100 | deploy | 2 | 2GB | 20GB | Узел для деплоя и управления |
| 192.168.50.111 | cp1 | 6 | 4GB | 20GB | Control Plane (Master) |
| 192.168.50.112 | cp2 | 6 | 4GB | 20GB | Control Plane (Master) |
| 192.168.50.113 | cp3 | 6 | 4GB | 20GB | Control Plane (Master) |
| 192.168.50.121 | worker1 | 4 | 2GB | 20GB | Worker Node |
| 192.168.50.122 | worker2 | 4 | 2GB | 20GB | Worker Node |
| 192.168.50.123 | worker3 | 4 | 2GB | 20GB | Worker Node |
- Hypervisor: VMware Workstation
- ОС для узлов: Debian GNU/Linux 13 (trixie) или аналог
- Сетевые интерфейсы:
- Host NAT (Workstation) для внутренней сети
- Маршрутизация портов через Windows Host и Router
- VMware Workstation с NAT сетью 192.168.50.0/24
- 7 виртуальных машин с достаточными ресурсами
- SSH доступ между узлами
- Git для клонирования репозиториев
- Python 3.13+ для Ansible
chmod +x deploy.sh
./deploy.shНа узле deploy (192.168.50.100) выполните:
# Установка необходимых утилит
sudo apt update
sudo apt install -y git python3-pip python3.13-venv curl wget
# Генерация SSH ключей для безпарольного доступа
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519 -N ""
# Распространение публичного ключа на все узлы
for node in 111 112 113 121 122 123; do
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@192.168.50.$node
done# Клонирование Kubespray
git clone https://github.com/kubernetes-sigs/kubespray.git \
--branch v2.29.0 --single-branch
cd kubespray/
# Создание виртуального окружения
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
# Подготовка инвентаря
cp -r inventory/sample inventory/myclusterОтредактируйте inventory/mycluster/inventory.ini:
[all]
cp1 ansible_host=192.168.50.111 ip=192.168.50.111
cp2 ansible_host=192.168.50.112 ip=192.168.50.112
cp3 ansible_host=192.168.50.113 ip=192.168.50.113
worker1 ansible_host=192.168.50.121 ip=192.168.50.121
worker2 ansible_host=192.168.50.122 ip=192.168.50.122
worker3 ansible_host=192.168.50.123 ip=192.168.50.123
[kube_control_plane]
cp1
cp2
cp3
[etcd:children]
kube_control_plane
[kube_node]
worker1
worker2
worker3
[kube_ingress:children]
kube_node
[k8s_cluster:children]
kube_nodeРазвертывание кластера:
# Проверка связи
export http_proxy="http://192.168.99.101:18080"
export https_proxy="http://192.168.99.101:18080"
export no_proxy="localhost,127.0.0.1,::1,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,169.254.0.0/16,.local,.cluster.local,.svc"
ansible all -i inventory/mycluster/inventory.ini -m ping \
--private-key=~/.ssh/id_ed25519
# Развертывание кластера
ansible-playbook -i inventory/mycluster/inventory.ini cluster.yml \
-b -v --private-key=~/.ssh/id_ed25519 \
-e http_proxy="http://192.168.99.101:18080" \
-e https_proxy="http://192.168.99.101:18080" \
-e no_proxy="localhost,127.0.0.1,::1,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,169.254.0.0/16,.local,.cluster.local,.svc"На узле управления (cp1):
# Копирование конфига на локальную машину
scp -i ~/.ssh/id_ed25519 \
user@192.168.50.111:/etc/kubernetes/admin.conf \
~/.kube/config
# Проверка доступа
kubectl cluster-info
kubectl get nodescurl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.shДобавьте Helm репозиторий:
helm repo add argo https://argoproj.github.io/argo-helm
helm repo updateСоздайте файл argocd-values.yaml:
repoServer:
env:
- name: HTTP_PROXY
value: "http://192.168.99.101:18080"
- name: HTTPS_PROXY
value: "http://192.168.99.101:18080"
- name: NO_PROXY
value: "localhost,127.0.0.1,::1,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,169.254.0.0/16,.local,.cluster.local,.svc"Установка:
helm install my-argo-cd argo/argo-cd \
--version 9.3.4 \
--namespace argocd \
--create-namespace \
-f argocd-values.yamlПолучение пароля для ArgoCD:
kubectl -n argocd get secret argocd-initial-admin-secret \
-o jsonpath="{.data.password}" | base64 -d- Форкните репозиторий https://github.com/Kibakus/argocd.git
- В ArgoCD добавьте свой репозиторий
- Создайте Application ресурс для синхронизации приложений
Версия: 4.14.1
Назначение: Обработка входящего трафика, маршрутизация по приложениям
Конфигурация (ingress.yaml):
- Тип сервиса: NodePort
- Порты: 31525 (HTTP), 31526 (HTTPS), 32000 (Grafana)
- Автоматическое создание namespace
Версия: 0.0.35
Назначение: Автоматическое создание хранилищ для персистентных данных
Конфигурация:
- Установлена как storage class по умолчанию
- Использует локальное хранилище узлов
- Подходит для тестирования и разработки
Версия: 2.10.3
Компоненты:
- Сбор метрик из кластера и приложений
- Хранение временных рядов
- Интеграция с Alertmanager для оповещений
- Централизованное логирование
- Агрегация логов со всех контейнеров
- Эффективное хранение больших объемов логов
- Агент для отправки логов в Loki
- Развертывается на каждом узле
- Визуализация метрик и логов
- Дашборды и алерты
- Доступ: http://kibakus.duckdns.org:32000
- Пароль: Переформирован через веб-интерфейс
Источник: Google Cloud Platform Microservices Demo
Назначение: Демонстрация многозвенной микросервисной архитектуры
Доступ:
- HTTPS: https://kibakus.duckdns.org (самоподписанный сертификат)
- HTTP: http://kibakus.duckdns.org
- Node Exporter Full - метрики микросервисов
- Loki Kubernetes Logs - анализ логов через Loki
Собираются метрики:
- Использование CPU и памяти узлов
- Пропускная способность сети
- Операции ввода-вывода дисков
- Pod метрики (CPU, память, сетевые операции)
- Метрики приложения (запросы, задержки, ошибки)
- Все логи контейнеров автоматически собираются
- Фильтрация по namespace, pod, контейнеру
| Сервис | URL | Описание |
|---|---|---|
| Microservices Demo (HTTP) | http://kibakus.duckdns.org | Online Boutique приложение |
| Microservices Demo (HTTPS) | https://kibakus.duckdns.org | Самоподписанный сертификат |
| Grafana | http://kibakus.duckdns.org:32000 | Мониторинг и дашборды |
Проблемы безопасности:
- Самоподписанные сертификаты
- Пароли в манифестах (должны быть в Secrets)
- HTTP трафик не зашифрован
- Использовать Let's Encrypt с cert-manager
- Настроить RBAC и NetworkPolicies
- Использовать Secret Management (Sealed Secrets, Vault)
- ...
- Control Plane: 3 узла для HA (etcd quorum)
- Worker Nodes: 3 узла для распределения нагрузки
- Хранилище: Local-path-provisioner (не рекомендуется для production)
- Сеть: calico (default Kubespray) `
- ✅ Kubernetes кластер с HA Control Plane (3 мастер узла)
- ✅ 3 рабочих узла для запуска приложений
- ✅ ArgoCD для GitOps управления
- ✅ Ingress Controller (nginx)
- ✅ Loki Stack (Prometheus, Grafana, Loki, Promtail)
- ✅ Google Microservices Demo приложение
- ✅ Local Path Storage provisioner
- ✅ Публичный доступ через DDNS (kibakus.duckdns.org)
- ✅ Мониторинг кластера и приложений
- ✅ Централизованное логирование
Этот проект продемонстрировал:
-
Kubernetes Administration
- Развертывание HA кластера с нуля
- Управление узлами и сетевыми политиками
- RBAC и управление доступом
-
Infrastructure as Code
- Автоматизация с Ansible/Kubespray
- GitOps подход с ArgoCD
- Декларативное управление ресурсами
-
Monitoring & Observability
- Сбор метрик с Prometheus
- Централизованное логирование с Loki
- Визуализация с Grafana
-
DevOps & Automation
- Управление конфигурациями
- Автоматическая синхронизация состояния
- CI/CD концепции