Files
k3s-gitops/docs/gitops-cicd/08-ollama-infrastructure-requirements.md

24 KiB
Raw Blame History

Требования к серверу Ollama для FinTech DevOps с MCP интеграцией

Версия: 2.0
Дата: Январь 2026
Статус: Production Ready
Целевая аудитория: Infrastructure Team, DevOps, Security, Management


Executive Summary

Бизнес-обоснование

Проблема:
FinTech компания генерирует огромное количество технической информации (код, логи, документация, Kubernetes конфигурации), которая распределена по множеству систем. Разработчики и DevOps инженеры тратят 30-40% времени на поиск информации, анализ логов и написание документации.

Решение:
Self-hosted AI ассистент на базе Ollama с интеграцией через MCP (Model Context Protocol) ко всем источникам данных компании.

Ключевые преимущества для FinTech:

  • Данные не покидают корпоративную сеть (PCI DSS, GDPR compliance)
  • Нет зависимости от внешних AI провайдеров (OpenAI, Anthropic)
  • Полный контроль над обрабатываемой информацией
  • Возможность обучения на конфиденциальных данных

Ожидаемый эффект:

  • 40% сокращение времени на поиск информации
  • 50% ускорение написания документации
  • 30% сокращение времени troubleshooting
  • ROI: 8-12 месяцев

Содержание

  1. Цели и Use Cases
  2. Архитектура решения
  3. Серверные требования
  4. Выбор AI моделей
  5. MCP Services
  6. Knowledge Base (RAG)
  7. Безопасность
  8. Развертывание
  9. Мониторинг
  10. Бюджет

1. Цели и Use Cases

1.1 Основные задачи

Для DevOps команды (5 человек):

  1. Анализ Kubernetes/Docker Swarm

    • "Почему pod в CrashLoopBackOff?"
    • "Как оптимизировать resource requests?"
    • "Покажи все pods с высоким memory usage"
  2. Troubleshooting по логам

    • "Найди причину ошибки 500 в logs за последний час"
    • "Какие services показывают connection timeout?"
    • "Анализ performance degradation"
  3. Генерация инфраструктурного кода

    • "Создай Helm chart для microservice с PostgreSQL"
    • "Напиши Terraform для AWS RDS с encryption"
    • "Генерация docker-compose.yml"

Для разработчиков (5 человек):

  1. Code generation и review

    • "Напиши unit tests для этого сервиса"
    • "Оптимизируй этот SQL query"
    • "Code review: найди potential security issues"
  2. Работа с документацией

    • "Как использовать наш internal payment API?"
    • "Покажи примеры интеграции с fraud detection service"

1.2 Технические требования

  • Одновременные пользователи: до 10 человек
  • Peak concurrent requests: 8 одновременно
  • Источники данных:
    • Gitea (100+ репозиториев)
    • Docker Swarm (50+ services)
    • Kubernetes cluster (150+ pods, если используется)
    • Loki logs (1 TB/месяц)
    • Technical documentation (5000+ документов)

2. Архитектура решения

2.1 High-Level Architecture

┌─────────────────────────────────────────────────────────────┐
│                   USER ACCESS LAYER                          │
│                                                              │
│  ┌──────────┐  ┌───────────┐  ┌──────────┐               │
│  │ Web UI   │  │ VS Code   │  │ CLI Tool │               │
│  │(Gradio)  │  │(Extension)│  │ (Python) │               │
│  └────┬─────┘  └─────┬─────┘  └────┬─────┘               │
└───────┼──────────────┼──────────────┼─────────────────────┘
        │              │              │
        └──────────────┼──────────────┘
                       │
┌──────────────────────▼─────────────────────────────────────┐
│              API GATEWAY / REVERSE PROXY                    │
│              (Traefik/Nginx)                                │
│  • TLS termination                                         │
│  • Authentication (LDAP/OIDC)                              │
│  • Rate limiting (100 req/min per user)                    │
│  • IP: 10.30.10.5                                          │
└──────────────────────┬─────────────────────────────────────┘
                       │
┌──────────────────────▼─────────────────────────────────────┐
│               OLLAMA INFERENCE LAYER                        │
│                                                             │
│  ┌─────────────────────────────────────┐                  │
│  │  Ollama Server                       │                  │
│  │                                      │                  │
│  │  Models (Hot-loaded):                │                  │
│  │  • qwen2.5-coder:32b (Code)         │                  │
│  │  • deepseek-r1:32b (Reasoning)      │                  │
│  │  • llama3.3:70b-q4 (Universal)      │                  │
│  │                                      │                  │
│  │  GPU: 1x NVIDIA RTX 4090 24GB       │                  │
│  │  CPU: 32 vCPU                        │                  │
│  │  RAM: 128 GB                         │                  │
│  │  IP: 10.30.10.10:11434               │                  │
│  └─────────────────────────────────────┘                  │
└──────────────────────┬─────────────────────────────────────┘
                       │
┌──────────────────────▼─────────────────────────────────────┐
│           MCP (MODEL CONTEXT PROTOCOL) LAYER                │
│                                                             │
│  ┌─────────────────────────────────────┐                  │
│  │  MCP Orchestrator                    │                  │
│  │  • Request routing                  │                  │
│  │  • Context assembly                 │                  │
│  │  IP: 10.30.10.20                    │                  │
│  └───────┬─────────────────────────────┘                  │
│          │                                                  │
│     ┌────┼────┬────────┬────────┬────────┬────────┐      │
│     │    │    │        │        │        │        │      │
│  ┌──▼─┐ ┌▼──┐ ┌▼────┐ ┌▼─────┐ ┌▼────┐ ┌▼─────┐        │
│  │Git │ │Swm│ │ K8s │ │ Logs │ │Docs │ │CI/CD │        │
│  │ea  │ │arm│ │     │ │(Loki)│ │     │ │      │        │
│  └────┘ └───┘ └─────┘ └──────┘ └─────┘ └──────┘        │
└──────────────────────┬─────────────────────────────────────┘
                       │
┌──────────────────────▼─────────────────────────────────────┐
│            KNOWLEDGE BASE / RAG LAYER                       │
│                                                             │
│  ┌─────────────────────────────────────┐                  │
│  │  Vector Database (Qdrant)            │                  │
│  │  • technical-docs (5000+ docs)      │                  │
│  │  • code-snippets (10000+ samples)   │                  │
│  │  • k8s-configs (500+ manifests)     │                  │
│  │  • incidents (1000+ postmortems)    │                  │
│  │  Storage: 500 GB                    │                  │
│  │  IP: 10.30.10.30:6333               │                  │
│  └─────────────────────────────────────┘                  │
│                                                             │
│  ┌─────────────────────────────────────┐                  │
│  │  Embedding Service                   │                  │
│  │  • bge-large-en-v1.5                │                  │
│  │  • Text chunking (512 tokens)       │                  │
│  │  IP: 10.30.10.31                    │                  │
│  └─────────────────────────────────────┘                  │
└─────────────────────────────────────────────────────────────┘

3. Серверные требования

Component Specification Rationale
GPU 1x NVIDIA RTX 4090 24GB VRAM Оптимальный баланс цена/производительность для 32B моделей
GPU (альтернатива) 1x NVIDIA L40 48GB VRAM Для 70B моделей и больших контекстов
CPU AMD Ryzen 9 7950X (16 cores, 32 threads) Preprocessing, embedding, parallel MCP calls
RAM 128 GB DDR5 ECC 64 GB для OS/services + 64 GB для model offloading
Storage Primary 2x 2TB NVMe SSD (RAID 1) Model cache, vector DB, fast I/O
Storage Secondary 4TB SATA SSD Document storage, backups
Network 2x 10 Gbps (bonded) High throughput для MCP data retrieval
PSU 1600W 80+ Titanium GPU power requirements

Estimated Cost: $12,000-15,000 (with RTX 4090) или $18,000-22,000 (with L40)

3.2 GPU Selection Guide

Use Case GPU VRAM Models Supported Cost
Code generation only RTX 3090 24 GB qwen2.5-coder:32b $1,000-1,500
Balanced (recommended) RTX 4090 24 GB 32B models, 70B Q4 $1,600-2,000
Large context (70B) L40 48 GB llama3.3:70b $6,000-8,000
Maximum capacity A100 80 GB Multiple 70B models $10,000-15,000

Recommendation для FinTech:
RTX 4090 24GB - оптимальный выбор для 10 пользователей.

3.3 Resource Allocation

VRAM:

Model Memory (Q4 quantization):
qwen2.5-coder:32b    → 22 GB VRAM
deepseek-r1:32b      → 24 GB VRAM
llama3.3:70b-q4      → 40 GB VRAM (needs L40)

RAM (128 GB breakdown):

16 GB  → OS (Ubuntu Server)
8 GB   → Ollama service
32 GB  → Vector DB (Qdrant)
16 GB  → MCP Services
8 GB   → Embedding service
8 GB   → API Gateway + misc
40 GB  → Model offloading buffer

Storage (2 TB NVMe):

300 GB → AI Models
500 GB → Vector Database
200 GB → MCP Services cache
100 GB → OS и applications
900 GB → Free space / growth

4. Выбор AI моделей

4.1 Рекомендованный Model Pool

Primary Models:

1. qwen2.5-coder:32b - Code Specialist

Purpose: Code generation, review, debugging
Size: 20 GB (Q4)
VRAM: 22 GB
Context: 32k tokens
Speed: ~45 tokens/sec (RTX 4090)

Strengths:
✓ Лучший для infrastructure code (Terraform, K8s)
✓ Понимает DevOps patterns
✓ Отличные комментарии к коду

Use cases:
• Генерация Helm charts
• Написание Bash scripts
• Code review для security issues
• Dockerfile optimization

2. deepseek-r1:32b - Reasoning Engine

Purpose: Complex analysis, troubleshooting
Size: 22 GB (Q4)
VRAM: 24 GB
Context: 64k tokens
Speed: ~40 tokens/sec

Strengths:
✓ Excellent reasoning для root cause analysis
✓ Multi-step problem solving
✓ Complex системный анализ

Use cases:
• Log analysis и troubleshooting
• Architecture decision making
• Incident post-mortems
• Performance optimization

3. llama3.3:70b-q4 - Universal Assistant

Purpose: Documentation, explanations
Size: 38 GB (Q4)
VRAM: 40 GB (needs L40)
Context: 128k tokens
Speed: ~25 tokens/sec

Strengths:
✓ Best для длинной документации
✓ Excellent writing quality
✓ Multi-lingual

Use cases:
• Technical documentation
• README files
• Architecture design documents

4.2 Model Performance Benchmarks

Real-world performance на RTX 4090:

Task Model Context Time Quality
Code generation qwen2.5-coder:32b 8k 12 sec 9/10
Log analysis deepseek-r1:32b 32k 25 sec 9/10
Documentation llama3.3:70b-q4 64k 90 sec* 10/10
Quick Q&A qwen2.5-coder:32b 2k 3 sec 8/10

*70B модель на RTX 4090 работает через CPU offloading


5. MCP Services

5.1 MCP Architecture

Model Context Protocol (MCP) - стандартизированный способ подключения AI моделей к внешним источникам данных.

5.2 MCP Server: Gitea

Capabilities:

1. list_repositories()
2. get_file(repo, path, branch)
3. search_code(query, language)
4. get_commit_history(repo, file)
5. get_pull_requests(repo)
6. compare_branches(repo, base, head)
7. get_documentation(repo)
8. analyze_dependencies(repo)

Configuration:

gitea:
  url: "https://git.thedevops.dev"
  read_only: true
  allowed_repos:
    - "admin/k3s-gitops"
    - "devops/*"
  max_requests_per_minute: 100
  cache_ttl: 300

5.3 MCP Server: Docker Swarm

Capabilities:

1. list_services()
2. get_service_logs(service, tail, since)
3. describe_service(service)
4. list_stacks()
5. get_stack_services(stack)
6. analyze_service_health(service)
7. get_swarm_nodes()

Security:

docker_swarm:
  read_only: true
  secrets_masking: true
  secret_patterns:
    - "*_PASSWORD"
    - "*_TOKEN"
    - "*_KEY"

5.4 MCP Server: Kubernetes

Capabilities:

1. get_pods(namespace, labels)
2. get_pod_logs(pod, namespace, container)
3. describe_pod(pod, namespace)
4. get_deployments(namespace)
5. get_events(namespace, since)
6. analyze_resource_usage(namespace)

RBAC:

kubernetes:
  read_only: true
  namespaces:
    allowed: ["production", "staging"]
    denied: ["kube-system"]
  mask_secrets: true

5.5 MCP Server: Logs (Loki)

Capabilities:

1. query_logs(query, start, end)
2. search_errors(service, since)
3. analyze_patterns(service, time_range)
4. get_service_logs(service, tail)
5. trace_request(request_id)

Security:

loki:
  max_query_range: "24h"
  max_lines: 5000
  sensitive_patterns:
    - regex: '\b\d{16}\b'  # Credit cards
      replacement: "[CARD_REDACTED]"
    - regex: 'password=\S+'
      replacement: "password=[REDACTED]"

5.6 MCP Server: Documentation

Capabilities:

1. search_docs(query, category)
2. get_document(doc_id)
3. list_runbooks()
4. get_architecture_docs()
5. search_code_examples(language, topic)

5.7 MCP Server: CI/CD

Capabilities:

1. get_build_status(job)
2. get_build_logs(job, build_number)
3. list_failed_builds(since)
4. get_argocd_applications()
5. get_application_health(app)

6. Knowledge Base (RAG)

6.1 RAG Architecture

Data Sources:

  • Technical Documentation (5000+ docs)
  • Code Repositories (10000+ snippets)
  • Kubernetes Configs (500+ manifests)
  • Incident History (1000+ postmortems)

6.2 Vector Database (Qdrant)

Configuration:

service:
  host: "0.0.0.0"
  port: 6333

storage:
  storage_path: "/var/lib/qdrant/storage"
  on_disk_payload: true

log_level: "INFO"

Collections:

collections = [
    "technical_docs",     # 5000+ documents
    "code_snippets",      # 10000+ samples
    "incidents",          # 1000+ postmortems
    "k8s_configs",        # 500+ manifests
    "runbooks"            # 200+ procedures
]

6.3 Embedding Service

Model: bge-large-en-v1.5 (1024 dimensions)

Implementation:

from sentence_transformers import SentenceTransformer

model = SentenceTransformer("BAAI/bge-large-en-v1.5")

@app.post("/embed")
async def create_embeddings(texts: list[str]):
    embeddings = model.encode(texts, normalize_embeddings=True)
    return {"embeddings": embeddings.tolist()}

7. Безопасность

7.1 Network Isolation

Firewall Rules:

Inbound:
├─ 443 (HTTPS) from Corporate VPN
├─ 11434 (Ollama) from MCP Orchestrator only
└─ 6333 (Qdrant) from Ollama server only

Outbound:
├─ 3000 (Gitea API)
├─ 2377 (Docker Swarm API)
├─ 6443 (Kubernetes API)
└─ 3100 (Loki query API)

Default: DENY ALL

7.2 Authentication

authentication:
  provider: "ldap"
  ldap:
    url: "ldaps://ldap.company.local:636"
    user_base: "ou=users,dc=company,dc=local"

authorization:
  roles:
    - name: "devops"
      permissions:
        - "query:*"
        - "mcp:*:read"
      members:
        - "cn=devops-team,ou=groups"

7.3 Secrets Masking

PATTERNS = [
    (r'password:\s*"?([^"\s]+)"?', r'password: "[REDACTED]"'),
    (r'token:\s*"?([^"\s]+)"?', r'token: "[REDACTED]"'),
    (r'\b\d{16}\b', '[CARD_REDACTED]'),  # Credit cards
    (r'\b\d{3}-\d{2}-\d{4}\b', '[SSN_REDACTED]'),  # SSN
]

7.4 Audit Logging

# Log format:
# timestamp | user | action | details | result

2026-01-12 14:23:45 | vladimir.levinas | query | model=qwen2.5-coder:32b | success
2026-01-12 14:23:46 | vladimir.levinas | mcp_k8s | method=get_pods | success

8. Развертывание

8.1 Installation (Ubuntu 22.04)

Step 1: System Setup

# Update system
apt update && apt upgrade -y

# Install NVIDIA drivers
apt install -y nvidia-driver-535

# Install Docker
curl -fsSL https://get.docker.com | sh

# Reboot
reboot

Step 2: Install Ollama

curl -fsSL https://ollama.com/install.sh | sh
systemctl enable ollama
systemctl start ollama

# Pull models
ollama pull qwen2.5-coder:32b
ollama pull deepseek-r1:32b

Step 3: Deploy Infrastructure

# Clone repo
git clone https://git.thedevops.dev/devops/ollama-infrastructure
cd ollama-infrastructure

# Configure
cp .env.example .env
# Edit .env with your settings

# Deploy
docker-compose up -d

# Initialize Vector DB
python3 scripts/init-vector-db.py

# Load initial data
python3 scripts/load-docs.py

8.2 Production Checklist

  • Hardware протестирован
  • GPU drivers работают (nvidia-smi)
  • Ollama и модели загружены
  • Docker containers запущены
  • Vector DB инициализирован
  • MCP services тестированы
  • End-to-end тест пройден
  • TLS сертификаты валидны
  • LDAP authentication работает
  • Rate limiting настроен
  • Audit logging включен
  • Backup настроен
  • Monitoring настроен
  • Team обучена

9. Мониторинг

9.1 Key Metrics

GPU Metrics:

nvidia_gpu_temperature_celsius
nvidia_gpu_utilization_percent
nvidia_gpu_memory_used_bytes
nvidia_gpu_power_usage_watts

Ollama Metrics:

ollama_requests_total
ollama_request_duration_seconds
ollama_tokens_per_second

MCP Metrics:

mcp_requests_total{service="gitea"}
mcp_request_duration_seconds
mcp_errors_total

9.2 Grafana Dashboards

Dashboard 1: Ollama Overview

  • GPU utilization
  • Request rate
  • Response time
  • Active users

Dashboard 2: MCP Services

  • Request distribution by service
  • Success/error rates
  • Latency percentiles

Dashboard 3: Vector DB

  • Collection sizes
  • Query performance
  • Cache hit rate

10. Бюджет

10.1 Hardware Costs

Item Specification Cost
GPU NVIDIA RTX 4090 24GB $1,600-2,000
CPU AMD Ryzen 9 7950X $500-600
RAM 128GB DDR5 ECC $600-800
Storage 2x 2TB NVMe + 4TB SATA $800-1,000
Motherboard High-end workstation $400-500
PSU 1600W Titanium $300-400
Case/Cooling Enterprise grade $300-400
Network 2x 10GbE NIC $200-300
TOTAL $12,000-15,000

10.2 Software Costs

Item Cost
OS (Ubuntu Server) FREE
Ollama FREE
Qdrant FREE (open source)
All MCP services FREE (self-developed)
Monitoring (Prometheus/Grafana) FREE
TOTAL $0

10.3 Annual Operational Costs

Item Cost
Electricity (~500W 24/7) $650/year
Cooling $200/year
Maintenance $500/year
Training/Documentation $2,000/year
TOTAL Annual OpEx $3,350/year

10.4 ROI Analysis

Total Initial Investment: $12,000-15,000

Annual Savings:

Time savings for 10 engineers:
├─ 4 hours/week saved per person
├─ 40 hours/week total
├─ 2080 hours/year total
└─ At $100/hour = $208,000/year saved

Productivity increase:
├─ 30% faster troubleshooting
├─ 50% faster documentation
└─ Estimated value: $100,000/year

Total annual benefit: ~$308,000

Payback Period: ~1-2 months
3-Year ROI: 6000%


Appendix A: Quick Reference

Service URLs

API Gateway:  https://ai.company.local
Ollama API:   http://10.30.10.10:11434
Qdrant:       http://10.30.10.30:6333
Grafana:      https://monitoring.company.local

Common Commands

# Check Ollama status
ollama list

# Run model test
ollama run qwen2.5-coder:32b "Hello"

# Check GPU
nvidia-smi

# View logs
docker-compose logs -f ollama

# Backup Vector DB
docker exec qdrant tar -czf /backup/qdrant-$(date +%Y%m%d).tar.gz /qdrant/storage

Document Version: 2.0
Last Updated: Январь 2026
Status: Production Ready

Approvals:

  • Infrastructure Lead
  • Security Lead
  • DevOps Lead
  • Financial Approval