docs: add comprehensive Ollama infrastructure requirements with MCP integration

This commit is contained in:
Claude AI
2026-01-12 14:55:26 +00:00
parent e26de1e101
commit f76e85ca2a

View File

@@ -0,0 +1,776 @@
# Требования к серверу 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](#1-цели-и-use-cases)
2. [Архитектура решения](#2-архитектура-решения)
3. [Серверные требования](#3-серверные-требования)
4. [Выбор AI моделей](#4-выбор-ai-моделей)
5. [MCP Services](#5-mcp-services)
6. [Knowledge Base (RAG)](#6-knowledge-base-rag)
7. [Безопасность](#7-безопасность)
8. [Развертывание](#8-развертывание)
9. [Мониторинг](#9-мониторинг)
10. [Бюджет](#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. Серверные требования
### 3.1 Production Configuration (Recommended)
| 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:**
```yaml
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:**
```yaml
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:**
```yaml
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:**
```yaml
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:**
```yaml
service:
host: "0.0.0.0"
port: 6333
storage:
storage_path: "/var/lib/qdrant/storage"
on_disk_payload: true
log_level: "INFO"
```
**Collections:**
```python
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:**
```python
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
```yaml
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
```python
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
```python
# 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**
```bash
# 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**
```bash
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**
```bash
# 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
```bash
# 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