Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

33 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Инфраструктурная платформа на базе Kubernetes для микросервисной архитектуры

📋 Описание проекта

Данный проект представляет собой 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

Ручная установка

Шаг 1: Подготовка узлов

На узле 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

Шаг 2: Развертывание Kubernetes с помощью Kubespray

# Клонирование 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"

Шаг 3: Подготовка kubeconfig

На узле управления (cp1):

# Копирование конфига на локальную машину
scp -i ~/.ssh/id_ed25519 \
  user@192.168.50.111:/etc/kubernetes/admin.conf \
  ~/.kube/config

# Проверка доступа
kubectl cluster-info
kubectl get nodes

Шаг 4: Установка Helm

curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh

Шаг 5: Установка ArgoCD

Добавьте 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

Шаг 6: Настройка GitOps

  1. Форкните репозиторий https://github.com/Kibakus/argocd.git
  2. В ArgoCD добавьте свой репозиторий
  3. Создайте Application ресурс для синхронизации приложений

🔧 Компоненты платформы

1. Ingress Controller (ingress-nginx)

Версия: 4.14.1
Назначение: Обработка входящего трафика, маршрутизация по приложениям

Конфигурация (ingress.yaml):

  • Тип сервиса: NodePort
  • Порты: 31525 (HTTP), 31526 (HTTPS), 32000 (Grafana)
  • Автоматическое создание namespace

2. Storage Provisioner (local-path-provisioner)

Версия: 0.0.35
Назначение: Автоматическое создание хранилищ для персистентных данных

Конфигурация:

  • Установлена как storage class по умолчанию
  • Использует локальное хранилище узлов
  • Подходит для тестирования и разработки

3. Monitoring Stack (Loki + Prometheus + Grafana)

Версия: 2.10.3
Компоненты:

Prometheus

  • Сбор метрик из кластера и приложений
  • Хранение временных рядов
  • Интеграция с Alertmanager для оповещений

Loki

  • Централизованное логирование
  • Агрегация логов со всех контейнеров
  • Эффективное хранение больших объемов логов

Promtail

  • Агент для отправки логов в Loki
  • Развертывается на каждом узле

Grafana

  • Визуализация метрик и логов
  • Дашборды и алерты
  • Доступ: http://kibakus.duckdns.org:32000
  • Пароль: Переформирован через веб-интерфейс

4. Основное приложение (microservices-demo)

Источник: Google Cloud Platform Microservices Demo
Назначение: Демонстрация многозвенной микросервисной архитектуры

Доступ:

📊 Мониторинг и алерты

Дашборды Grafana

  1. Node Exporter Full - метрики микросервисов
  2. Loki Kubernetes Logs - анализ логов через Loki

Метрики

Собираются метрики:

  • Использование CPU и памяти узлов
  • Пропускная способность сети
  • Операции ввода-вывода дисков
  • Pod метрики (CPU, память, сетевые операции)
  • Метрики приложения (запросы, задержки, ошибки)

Логирование

  • Все логи контейнеров автоматически собираются
  • Фильтрация по namespace, pod, контейнеру

🌐 Доступ к сервисам

Внешние адреса (через Router NAT)

Сервис URL Описание
Microservices Demo (HTTP) http://kibakus.duckdns.org Online Boutique приложение
Microservices Demo (HTTPS) https://kibakus.duckdns.org Самоподписанный сертификат
Grafana http://kibakus.duckdns.org:32000 Мониторинг и дашборды

🔐 Безопасность

Текущее состояние

⚠️ Важно: Это решение предназначено для тестирования и обучения, а не для production использования.

Проблемы безопасности:

  • Самоподписанные сертификаты
  • Пароли в манифестах (должны быть в Secrets)
  • HTTP трафик не зашифрован

Рекомендации для production

  1. Использовать Let's Encrypt с cert-manager
  2. Настроить RBAC и NetworkPolicies
  3. Использовать Secret Management (Sealed Secrets, Vault)
  4. ...

📈 Масштабирование и высокая доступность

Текущая конфигурация

  • 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)
  • ✅ Мониторинг кластера и приложений
  • ✅ Централизованное логирование

🎓 Что я узнал

Этот проект продемонстрировал:

  1. Kubernetes Administration

    • Развертывание HA кластера с нуля
    • Управление узлами и сетевыми политиками
    • RBAC и управление доступом
  2. Infrastructure as Code

    • Автоматизация с Ansible/Kubespray
    • GitOps подход с ArgoCD
    • Декларативное управление ресурсами
  3. Monitoring & Observability

    • Сбор метрик с Prometheus
    • Централизованное логирование с Loki
    • Визуализация с Grafana
  4. DevOps & Automation

    • Управление конфигурациями
    • Автоматическая синхронизация состояния
    • CI/CD концепции

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages