Upload files to "loki-ingress-argocd-setup"
This commit is contained in:
148
loki-ingress-argocd-setup/00-START-HERE.txt
Normal file
148
loki-ingress-argocd-setup/00-START-HERE.txt
Normal file
@@ -0,0 +1,148 @@
|
||||
╔═══════════════════════════════════════════════════════════════════════════╗
|
||||
║ ║
|
||||
║ 🚀 LOKI INGRESS для ArgoCD - НАЧНИ ОТСЮДА 🚀 ║
|
||||
║ ║
|
||||
╚═══════════════════════════════════════════════════════════════════════════╝
|
||||
|
||||
📚 ДОКУМЕНТАЦИЯ (читай в этом порядке):
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
1. INDEX.md → Общий обзор и навигация
|
||||
2. README.md → Описание файлов и быстрый старт
|
||||
3. CHEATSHEET.md → Шпаргалка с командами
|
||||
4. ARGOCD_LOKI_INGRESS_SETUP.md → Полная пошаговая инструкция (MAIN!)
|
||||
5. ARCHITECTURE.md → Схемы и диаграммы
|
||||
|
||||
|
||||
📦 YAML ФАЙЛЫ ДЛЯ РАЗВЕРТЫВАНИЯ:
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
Для директории apps/loki/:
|
||||
✓ secret-basic-auth.yaml → Basic Auth credentials
|
||||
✓ middleware-auth.yaml → Traefik middleware
|
||||
✓ ingress-loki.yaml → Ingress с HTTPS
|
||||
|
||||
Для директории apps/monitoring/:
|
||||
✓ grafana-datasource-loki.yaml → Grafana datasource config
|
||||
|
||||
|
||||
🤖 АВТОМАТИЗАЦИЯ:
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
✓ deploy-loki-ingress.sh → Скрипт автоматического развертывания
|
||||
|
||||
|
||||
🚀 БЫСТРЫЙ СТАРТ:
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
ВАРИАНТ 1: Автоматический (рекомендуется)
|
||||
──────────────────────────────────────────
|
||||
|
||||
1. Клонируй git репозиторий:
|
||||
$ git clone http://gitea-http.gitea.svc.cluster.local:3000/admin/k3s-gitops.git
|
||||
$ cd k3s-gitops
|
||||
|
||||
2. Скопируй YAML файлы:
|
||||
$ cp secret-basic-auth.yaml apps/loki/
|
||||
$ cp middleware-auth.yaml apps/loki/
|
||||
$ cp ingress-loki.yaml apps/loki/
|
||||
|
||||
3. Запусти скрипт развертывания:
|
||||
$ chmod +x deploy-loki-ingress.sh
|
||||
$ ./deploy-loki-ingress.sh
|
||||
|
||||
4. Настрой DNS для loki.thedevops.dev → 5.182.17.194
|
||||
|
||||
|
||||
ВАРИАНТ 2: Ручной
|
||||
──────────────────
|
||||
|
||||
См. подробную инструкцию в ARGOCD_LOKI_INGRESS_SETUP.md
|
||||
|
||||
|
||||
✅ ПРОВЕРКА ПОСЛЕ УСТАНОВКИ:
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
1. Проверь статус ресурсов:
|
||||
$ kubectl get ingress,certificate,secret -n loki
|
||||
|
||||
2. Тестовый запрос:
|
||||
$ curl -u admin:lokipass123 https://loki.thedevops.dev/ready
|
||||
Ожидается: "ready"
|
||||
|
||||
3. Открой в браузере:
|
||||
URL: https://loki.thedevops.dev
|
||||
Username: admin
|
||||
Password: lokipass123
|
||||
|
||||
|
||||
🔐 БЕЗОПАСНОСТЬ (ВАЖНО!):
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
⚠️ ОБЯЗАТЕЛЬНО измени пароль по умолчанию!
|
||||
|
||||
Генерация нового пароля:
|
||||
$ htpasswd -nb admin your-secure-password
|
||||
|
||||
Затем обнови значение в secret-basic-auth.yaml
|
||||
|
||||
|
||||
📋 ЧЕК-ЛИСТ:
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
[ ] Git репозиторий клонирован
|
||||
[ ] YAML файлы скопированы в apps/loki/
|
||||
[ ] Git commit и push выполнены
|
||||
[ ] ArgoCD синхронизирован
|
||||
[ ] DNS настроен для loki.thedevops.dev
|
||||
[ ] Ingress получил IP адрес
|
||||
[ ] Certificate создан (Ready: True)
|
||||
[ ] Curl тест пройден
|
||||
[ ] Браузер тест пройден
|
||||
[ ] Пароль изменен
|
||||
[ ] Loki добавлен в Grafana
|
||||
[ ] Логи видны в Grafana Explore
|
||||
|
||||
|
||||
🆘 НУЖНА ПОМОЩЬ?
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
1. Быстрые команды → CHEATSHEET.md
|
||||
2. Troubleshooting → ARGOCD_LOKI_INGRESS_SETUP.md (раздел Troubleshooting)
|
||||
3. Логи:
|
||||
$ kubectl logs -n loki loki-0
|
||||
$ kubectl logs -n cert-manager deployment/cert-manager
|
||||
$ kubectl get events -n loki --sort-by='.lastTimestamp'
|
||||
|
||||
|
||||
🎯 ИТОГОВЫЙ РЕЗУЛЬТАТ:
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
После успешного развертывания ты получишь:
|
||||
|
||||
✓ Безопасный HTTPS доступ к Loki
|
||||
✓ Автоматическое управление через ArgoCD
|
||||
✓ Интеграция с Grafana для просмотра логов
|
||||
✓ Production-ready конфигурация
|
||||
✓ Централизованное хранение логов кластера
|
||||
|
||||
Доступ:
|
||||
URL: https://loki.thedevops.dev
|
||||
Username: admin
|
||||
Password: lokipass123 (ИЗМЕНИ!)
|
||||
|
||||
|
||||
📞 ТВОЯ ИНФРАСТРУКТУРА:
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
ArgoCD: https://argocd.thedevops.dev
|
||||
Grafana: https://grafana.thedevops.dev
|
||||
Gitea: http://gitea-http.gitea.svc.cluster.local:3000
|
||||
Loki: https://loki.thedevops.dev (после развертывания)
|
||||
|
||||
|
||||
🎉 Happy Logging! 🚀📊
|
||||
|
||||
╔═══════════════════════════════════════════════════════════════════════════╗
|
||||
║ Vladimiras, начни с файла INDEX.md для полной навигации по документации ║
|
||||
╚═══════════════════════════════════════════════════════════════════════════╝
|
||||
321
loki-ingress-argocd-setup/ARCHITECTURE.md
Normal file
321
loki-ingress-argocd-setup/ARCHITECTURE.md
Normal file
@@ -0,0 +1,321 @@
|
||||
# Loki Architecture Diagram
|
||||
|
||||
## Архитектура решения
|
||||
|
||||
```mermaid
|
||||
graph TB
|
||||
subgraph "External Access"
|
||||
Browser[🌐 Browser]
|
||||
DNS[🔍 DNS: loki.thedevops.dev]
|
||||
end
|
||||
|
||||
subgraph "Traefik Ingress Controller"
|
||||
Traefik[⚡ Traefik<br/>Port 80/443]
|
||||
LE[🔐 Let's Encrypt<br/>TLS Certificate]
|
||||
end
|
||||
|
||||
subgraph "Loki Namespace"
|
||||
Ingress[📥 Ingress<br/>loki.thedevops.dev]
|
||||
Middleware[🔒 Basic Auth<br/>Middleware]
|
||||
Secret[🗝️ Secret<br/>loki-basic-auth]
|
||||
Service[🔌 Service<br/>loki:3100]
|
||||
StatefulSet[💾 StatefulSet<br/>loki-0]
|
||||
PVC[📀 PVC<br/>loki-data]
|
||||
Promtail[📡 DaemonSet<br/>Promtail]
|
||||
end
|
||||
|
||||
subgraph "Monitoring Namespace"
|
||||
Grafana[📊 Grafana]
|
||||
Prometheus[📈 Prometheus]
|
||||
end
|
||||
|
||||
subgraph "ArgoCD"
|
||||
ArgoCD[🔄 ArgoCD<br/>Auto-Sync]
|
||||
GitRepo[📚 Gitea<br/>k3s-gitops]
|
||||
end
|
||||
|
||||
subgraph "Storage"
|
||||
Longhorn[💿 Longhorn<br/>Distributed Storage]
|
||||
end
|
||||
|
||||
Browser -->|HTTPS| DNS
|
||||
DNS -->|Resolve| Traefik
|
||||
Traefik -->|TLS Termination| LE
|
||||
Traefik -->|Route| Ingress
|
||||
Ingress -->|Apply| Middleware
|
||||
Middleware -->|Validate| Secret
|
||||
Middleware -->|Forward| Service
|
||||
Service -->|Load Balance| StatefulSet
|
||||
StatefulSet -->|Store Logs| PVC
|
||||
PVC -->|Backend| Longhorn
|
||||
|
||||
Promtail -.->|Push Logs| Service
|
||||
Grafana -.->|Query LogQL| Service
|
||||
Prometheus -.->|Scrape Metrics| StatefulSet
|
||||
|
||||
GitRepo -->|Watch| ArgoCD
|
||||
ArgoCD -->|Deploy| Ingress
|
||||
ArgoCD -->|Deploy| Middleware
|
||||
ArgoCD -->|Deploy| Secret
|
||||
ArgoCD -->|Deploy| StatefulSet
|
||||
|
||||
style Browser fill:#e1f5ff
|
||||
style DNS fill:#e1f5ff
|
||||
style Traefik fill:#ffe1e1
|
||||
style LE fill:#ffe1e1
|
||||
style Ingress fill:#fff4e1
|
||||
style Middleware fill:#fff4e1
|
||||
style Secret fill:#fff4e1
|
||||
style Service fill:#e1ffe1
|
||||
style StatefulSet fill:#e1ffe1
|
||||
style PVC fill:#f0e1ff
|
||||
style Promtail fill:#e1ffe1
|
||||
style Grafana fill:#ffe1f5
|
||||
style Prometheus fill:#ffe1f5
|
||||
style ArgoCD fill:#e1f0ff
|
||||
style GitRepo fill:#e1f0ff
|
||||
style Longhorn fill:#f0e1ff
|
||||
```
|
||||
|
||||
## Data Flow - Логи
|
||||
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
participant Apps as Kubernetes Pods
|
||||
participant Promtail as Promtail DaemonSet
|
||||
participant Loki as Loki StatefulSet
|
||||
participant Storage as Longhorn PVC
|
||||
participant Grafana as Grafana
|
||||
|
||||
Apps->>Promtail: Write logs to stdout/stderr
|
||||
Note over Promtail: Parse & Label logs
|
||||
Promtail->>Loki: HTTP POST /loki/api/v1/push
|
||||
Note over Loki: Index labels<br/>Compress chunks
|
||||
Loki->>Storage: Write compressed chunks
|
||||
|
||||
Grafana->>Loki: LogQL Query
|
||||
Loki->>Storage: Read chunks
|
||||
Loki->>Grafana: Return log lines
|
||||
Note over Grafana: Display in UI
|
||||
```
|
||||
|
||||
## Access Flow - External User
|
||||
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
participant User as Browser
|
||||
participant DNS as DNS Server
|
||||
participant Traefik as Traefik
|
||||
participant Ingress as Ingress
|
||||
participant Middleware as Middleware
|
||||
participant Secret as Secret
|
||||
participant Loki as Loki Service
|
||||
|
||||
User->>DNS: Resolve loki.thedevops.dev
|
||||
DNS->>User: Return IPs
|
||||
User->>Traefik: HTTPS Request
|
||||
Note over Traefik: TLS Termination<br/>(Let's Encrypt)
|
||||
Traefik->>Ingress: Route to loki namespace
|
||||
Ingress->>Middleware: Apply loki-auth
|
||||
Middleware->>Secret: Get credentials
|
||||
Middleware->>Middleware: Validate Basic Auth
|
||||
alt Valid Credentials
|
||||
Middleware->>Loki: Forward request
|
||||
Loki->>Middleware: Response
|
||||
Middleware->>Traefik: Response
|
||||
Traefik->>User: HTTPS Response
|
||||
else Invalid Credentials
|
||||
Middleware->>User: 401 Unauthorized
|
||||
end
|
||||
```
|
||||
|
||||
## ArgoCD GitOps Flow
|
||||
|
||||
```mermaid
|
||||
graph LR
|
||||
subgraph "Developer"
|
||||
Dev[👨💻 Developer]
|
||||
Local[💻 Local Git]
|
||||
end
|
||||
|
||||
subgraph "Gitea"
|
||||
Repo[📚 k3s-gitops<br/>Repository]
|
||||
end
|
||||
|
||||
subgraph "ArgoCD"
|
||||
Sync[🔄 ArgoCD<br/>Controller]
|
||||
App[📦 Application<br/>loki]
|
||||
end
|
||||
|
||||
subgraph "Kubernetes"
|
||||
Resources[☸️ K8s Resources<br/>Ingress, Secret, etc]
|
||||
end
|
||||
|
||||
Dev -->|1. Edit YAML| Local
|
||||
Local -->|2. Git Push| Repo
|
||||
Repo -->|3. Webhook/Poll| Sync
|
||||
Sync -->|4. Detect Changes| App
|
||||
App -->|5. kubectl apply| Resources
|
||||
Resources -.->|6. Status| App
|
||||
App -.->|7. Sync Status| Dev
|
||||
|
||||
style Dev fill:#e1f5ff
|
||||
style Local fill:#e1f5ff
|
||||
style Repo fill:#e1f0ff
|
||||
style Sync fill:#e1ffe1
|
||||
style App fill:#e1ffe1
|
||||
style Resources fill:#ffe1e1
|
||||
```
|
||||
|
||||
## Component Relationships
|
||||
|
||||
```mermaid
|
||||
graph TB
|
||||
subgraph "Core Components"
|
||||
Loki[Loki StatefulSet<br/>Port 3100]
|
||||
Promtail[Promtail DaemonSet<br/>Port 3101]
|
||||
end
|
||||
|
||||
subgraph "Access Control"
|
||||
Ingress[Ingress]
|
||||
Middleware[Middleware]
|
||||
Secret[Secret]
|
||||
end
|
||||
|
||||
subgraph "Monitoring"
|
||||
ServiceMonitor[ServiceMonitor]
|
||||
Prometheus[Prometheus]
|
||||
Grafana[Grafana]
|
||||
end
|
||||
|
||||
subgraph "Storage"
|
||||
PVC[PersistentVolumeClaim<br/>loki-data]
|
||||
Longhorn[Longhorn]
|
||||
end
|
||||
|
||||
subgraph "GitOps"
|
||||
Git[Git Repository]
|
||||
ArgoCD[ArgoCD]
|
||||
end
|
||||
|
||||
Ingress --> Middleware
|
||||
Middleware --> Secret
|
||||
Middleware --> Loki
|
||||
Promtail --> Loki
|
||||
Loki --> PVC
|
||||
PVC --> Longhorn
|
||||
ServiceMonitor --> Loki
|
||||
ServiceMonitor --> Prometheus
|
||||
Grafana --> Loki
|
||||
Git --> ArgoCD
|
||||
ArgoCD --> Ingress
|
||||
ArgoCD --> Middleware
|
||||
ArgoCD --> Secret
|
||||
ArgoCD --> Loki
|
||||
ArgoCD --> Promtail
|
||||
|
||||
style Loki fill:#4CAF50
|
||||
style Promtail fill:#8BC34A
|
||||
style Ingress fill:#FFC107
|
||||
style Middleware fill:#FF9800
|
||||
style Secret fill:#FF5722
|
||||
style Grafana fill:#E91E63
|
||||
style Prometheus fill:#9C27B0
|
||||
style ArgoCD fill:#2196F3
|
||||
style Longhorn fill:#00BCD4
|
||||
```
|
||||
|
||||
## Deployment States
|
||||
|
||||
```mermaid
|
||||
stateDiagram-v2
|
||||
[*] --> GitPush: Developer commits
|
||||
GitPush --> ArgoCD_Detect: ArgoCD polls repo
|
||||
ArgoCD_Detect --> Syncing: Changes detected
|
||||
Syncing --> Deploying: Apply manifests
|
||||
|
||||
state Deploying {
|
||||
[*] --> CreateSecret
|
||||
CreateSecret --> CreateMiddleware
|
||||
CreateMiddleware --> CreateIngress
|
||||
CreateIngress --> RequestCert
|
||||
RequestCert --> ValidateCert
|
||||
ValidateCert --> [*]
|
||||
}
|
||||
|
||||
Deploying --> Healthy: All resources ready
|
||||
Healthy --> [*]: Deployment complete
|
||||
|
||||
Deploying --> Failed: Error occurred
|
||||
Failed --> Syncing: Retry
|
||||
|
||||
Healthy --> GitPush: New changes
|
||||
```
|
||||
|
||||
## Network Topology
|
||||
|
||||
```mermaid
|
||||
graph TB
|
||||
subgraph "Internet"
|
||||
Client[Client Browser]
|
||||
end
|
||||
|
||||
subgraph "Public IPs"
|
||||
IP1[5.182.17.194]
|
||||
IP2[62.169.30.194]
|
||||
IP3[62.169.30.206]
|
||||
end
|
||||
|
||||
subgraph "k3s Cluster"
|
||||
subgraph "kube-system"
|
||||
Traefik[Traefik LoadBalancer<br/>80/443]
|
||||
end
|
||||
|
||||
subgraph "loki namespace"
|
||||
Ingress[Ingress<br/>loki.thedevops.dev]
|
||||
Service[ClusterIP Service<br/>10.43.x.x:3100]
|
||||
Pod[Loki Pod<br/>10.42.x.x:3100]
|
||||
end
|
||||
|
||||
subgraph "cert-manager"
|
||||
CertManager[Cert Manager]
|
||||
Certificate[Certificate<br/>loki-tls]
|
||||
end
|
||||
end
|
||||
|
||||
Client -->|DNS| IP1
|
||||
Client -->|DNS| IP2
|
||||
Client -->|DNS| IP3
|
||||
IP1 --> Traefik
|
||||
IP2 --> Traefik
|
||||
IP3 --> Traefik
|
||||
Traefik -->|Route by Host| Ingress
|
||||
Ingress -->|ClusterIP| Service
|
||||
Service -->|Pod IP| Pod
|
||||
CertManager -.->|Provision| Certificate
|
||||
Certificate -.->|Use| Ingress
|
||||
|
||||
style Client fill:#e1f5ff
|
||||
style IP1 fill:#ffe1e1
|
||||
style IP2 fill:#ffe1e1
|
||||
style IP3 fill:#ffe1e1
|
||||
style Traefik fill:#fff4e1
|
||||
style Ingress fill:#e1ffe1
|
||||
style Service fill:#e1f0ff
|
||||
style Pod fill:#f0e1ff
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Legend
|
||||
|
||||
- 🌐 External Access Point
|
||||
- ⚡ Load Balancer / Proxy
|
||||
- 📥 Ingress / API Gateway
|
||||
- 🔒 Authentication / Security
|
||||
- 💾 Stateful Storage
|
||||
- 📡 Log Collection
|
||||
- 📊 Visualization
|
||||
- 🔄 Automation / GitOps
|
||||
- 💿 Persistent Storage
|
||||
- ☸️ Kubernetes Resources
|
||||
115
loki-ingress-argocd-setup/ARCHIVE_INFO.txt
Normal file
115
loki-ingress-argocd-setup/ARCHIVE_INFO.txt
Normal file
@@ -0,0 +1,115 @@
|
||||
╔══════════════════════════════════════════════════════════════════════════╗
|
||||
║ ║
|
||||
║ 📦 LOKI INGRESS ArgoCD SETUP - ARCHIVE INFO 📦 ║
|
||||
║ ║
|
||||
╚══════════════════════════════════════════════════════════════════════════╝
|
||||
|
||||
📁 Archive Name: loki-ingress-argocd-setup.zip
|
||||
📊 Archive Size: 24 KB
|
||||
📝 Total Files: 14 files (62 KB uncompressed)
|
||||
📅 Created: 2026-01-05
|
||||
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
📋 СОДЕРЖИМОЕ АРХИВА:
|
||||
|
||||
┌─ DOCUMENTATION (5 files)
|
||||
│
|
||||
├── 00-START-HERE.txt 7.8 KB → Начни отсюда!
|
||||
├── INDEX.md 6.3 KB → Навигация
|
||||
├── README.md 5.3 KB → Описание файлов
|
||||
├── CHEATSHEET.md 4.1 KB → Команды и шпаргалка
|
||||
└── ARGOCD_LOKI_INGRESS_SETUP.md 18.5 KB → Полная инструкция ⭐
|
||||
|
||||
┌─ DIAGRAMS & ARCHITECTURE (1 file)
|
||||
│
|
||||
└── ARCHITECTURE.md 8.0 KB → Mermaid диаграммы
|
||||
|
||||
┌─ YAML MANIFESTS (6 files)
|
||||
│
|
||||
├── secret-basic-auth.yaml 421 B → Basic Auth
|
||||
├── middleware-auth.yaml 298 B → Traefik middleware
|
||||
├── ingress-loki.yaml 1.1 KB → Main Ingress ⭐
|
||||
├── loki-ingress.yaml 1.7 KB → Alternative version
|
||||
├── loki-nodeport.yaml 447 B → NodePort alternative
|
||||
└── grafana-datasource-loki.yaml 1.2 KB → Grafana datasource
|
||||
|
||||
┌─ AUTOMATION (1 file)
|
||||
│
|
||||
└── deploy-loki-ingress.sh 5.1 KB → Auto-deploy script ⭐
|
||||
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
🎯 ЧТО ВНУТРИ:
|
||||
|
||||
✓ Полная документация на русском языке
|
||||
✓ Пошаговые инструкции (12 шагов)
|
||||
✓ Готовые YAML манифесты для ArgoCD
|
||||
✓ Bash скрипт для автоматического развертывания
|
||||
✓ Troubleshooting guide
|
||||
✓ Mermaid диаграммы архитектуры
|
||||
✓ Шпаргалка с командами
|
||||
✓ Интеграция с Grafana
|
||||
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
📖 КАК ИСПОЛЬЗОВАТЬ:
|
||||
|
||||
1. Распакуй архив:
|
||||
$ unzip loki-ingress-argocd-setup.zip
|
||||
|
||||
2. Начни с одного из файлов:
|
||||
- 00-START-HERE.txt → Краткий обзор
|
||||
- INDEX.md → Полная навигация
|
||||
|
||||
3. Следуй инструкциям в:
|
||||
- ARGOCD_LOKI_INGRESS_SETUP.md
|
||||
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
🚀 БЫСТРЫЙ СТАРТ:
|
||||
|
||||
После распаковки:
|
||||
|
||||
$ cd k3s-gitops
|
||||
$ cp secret-basic-auth.yaml apps/loki/
|
||||
$ cp middleware-auth.yaml apps/loki/
|
||||
$ cp ingress-loki.yaml apps/loki/
|
||||
$ chmod +x deploy-loki-ingress.sh
|
||||
$ ./deploy-loki-ingress.sh
|
||||
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
🎯 РЕЗУЛЬТАТ:
|
||||
|
||||
После развертывания:
|
||||
URL: https://loki.thedevops.dev
|
||||
Username: admin
|
||||
Password: lokipass123 (ИЗМЕНИ!)
|
||||
|
||||
Features:
|
||||
✓ HTTPS с Let's Encrypt
|
||||
✓ Basic Authentication
|
||||
✓ ArgoCD GitOps управление
|
||||
✓ Grafana интеграция
|
||||
✓ Production-ready
|
||||
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
📞 SUPPORT:
|
||||
|
||||
Для помощи см.:
|
||||
- CHEATSHEET.md → Быстрые команды
|
||||
- ARGOCD_LOKI_INGRESS_SETUP.md → Troubleshooting раздел
|
||||
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
Created for: Vladimiras Levinas
|
||||
Purpose: Loki Ingress deployment via ArgoCD GitOps
|
||||
Date: 2026-01-05
|
||||
|
||||
Happy Logging! 🚀📊
|
||||
|
||||
╔══════════════════════════════════════════════════════════════════════════╗
|
||||
║ Начни с файла 00-START-HERE.txt ║
|
||||
╚══════════════════════════════════════════════════════════════════════════╝
|
||||
712
loki-ingress-argocd-setup/ARGOCD_LOKI_INGRESS_SETUP.md
Normal file
712
loki-ingress-argocd-setup/ARGOCD_LOKI_INGRESS_SETUP.md
Normal file
@@ -0,0 +1,712 @@
|
||||
# ArgoCD GitOps Setup для Loki Ingress
|
||||
|
||||
## Текущая конфигурация
|
||||
|
||||
- **ArgoCD Application:** `loki`
|
||||
- **Git Repository:** `http://gitea-http.gitea.svc.cluster.local:3000/admin/k3s-gitops`
|
||||
- **Path:** `apps/loki`
|
||||
- **Auto-sync:** Включен (prune: true, selfHeal: true)
|
||||
- **Target Namespace:** `loki`
|
||||
|
||||
---
|
||||
|
||||
## Шаг 1: Подключись к Git репозиторию
|
||||
|
||||
### Вариант A: Через SSH (рекомендуется)
|
||||
|
||||
```bash
|
||||
# Клонируй репозиторий
|
||||
git clone git@gitea-http.gitea.svc.cluster.local:admin/k3s-gitops.git
|
||||
cd k3s-gitops
|
||||
|
||||
# Или если используешь внешний доступ
|
||||
git clone git@gitea.thedevops.dev:admin/k3s-gitops.git
|
||||
cd k3s-gitops
|
||||
```
|
||||
|
||||
### Вариант B: Через HTTP
|
||||
|
||||
```bash
|
||||
git clone http://gitea-http.gitea.svc.cluster.local:3000/admin/k3s-gitops.git
|
||||
cd k3s-gitops
|
||||
|
||||
# Введи credentials для Gitea
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Шаг 2: Проверь структуру директорий
|
||||
|
||||
```bash
|
||||
# Перейди в директорию приложения Loki
|
||||
cd apps/loki
|
||||
|
||||
# Посмотри текущую структуру
|
||||
tree .
|
||||
|
||||
# Должна быть примерно такая структура:
|
||||
# apps/loki/
|
||||
# ├── namespace.yaml
|
||||
# ├── configmap-loki.yaml
|
||||
# ├── configmap-promtail.yaml
|
||||
# ├── statefulset.yaml
|
||||
# ├── daemonset-promtail.yaml
|
||||
# ├── service.yaml
|
||||
# ├── ingress-promtail.yaml (уже существует)
|
||||
# ├── rbac.yaml
|
||||
# └── servicemonitor.yaml
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Шаг 3: Создай файлы для Loki Ingress
|
||||
|
||||
### 3.1 Secret для Basic Auth
|
||||
|
||||
Создай файл: `apps/loki/secret-basic-auth.yaml`
|
||||
|
||||
```yaml
|
||||
---
|
||||
# Basic Auth Secret для защиты Loki
|
||||
apiVersion: v1
|
||||
kind: Secret
|
||||
metadata:
|
||||
name: loki-basic-auth
|
||||
namespace: loki
|
||||
labels:
|
||||
app.kubernetes.io/name: loki
|
||||
argocd.argoproj.io/instance: loki
|
||||
type: Opaque
|
||||
stringData:
|
||||
# Username: admin
|
||||
# Password: lokipass123
|
||||
# Сгенерировано с помощью: htpasswd -nb admin lokipass123
|
||||
users: |
|
||||
admin:$apr1$8jGXMp0X$xR7yGcZqz.pPJY4IaGQ0n0
|
||||
```
|
||||
|
||||
**Как создать свой пароль:**
|
||||
|
||||
```bash
|
||||
# Установи htpasswd (если нужно)
|
||||
sudo apt-get install apache2-utils
|
||||
|
||||
# Создай новый пароль
|
||||
htpasswd -nb admin your-secure-password
|
||||
|
||||
# Результат замени в stringData.users выше
|
||||
```
|
||||
|
||||
### 3.2 Traefik Middleware
|
||||
|
||||
Создай файл: `apps/loki/middleware-auth.yaml`
|
||||
|
||||
```yaml
|
||||
---
|
||||
# Traefik Middleware для Basic Auth
|
||||
apiVersion: traefik.containo.us/v1alpha1
|
||||
kind: Middleware
|
||||
metadata:
|
||||
name: loki-auth
|
||||
namespace: loki
|
||||
labels:
|
||||
app.kubernetes.io/name: loki
|
||||
argocd.argoproj.io/instance: loki
|
||||
spec:
|
||||
basicAuth:
|
||||
secret: loki-basic-auth
|
||||
removeHeader: true
|
||||
```
|
||||
|
||||
### 3.3 Loki Ingress
|
||||
|
||||
Создай файл: `apps/loki/ingress-loki.yaml`
|
||||
|
||||
```yaml
|
||||
---
|
||||
# Ingress для Loki с HTTPS и аутентификацией
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: Ingress
|
||||
metadata:
|
||||
name: loki
|
||||
namespace: loki
|
||||
annotations:
|
||||
# Использовать Traefik ingress controller
|
||||
kubernetes.io/ingress.class: traefik
|
||||
|
||||
# Let's Encrypt сертификат
|
||||
cert-manager.io/cluster-issuer: letsencrypt-http
|
||||
cert-manager.io/acme-challenge-type: http01
|
||||
|
||||
# Применить Basic Auth middleware
|
||||
traefik.ingress.kubernetes.io/router.middlewares: loki-loki-auth@kubernetescrd
|
||||
|
||||
# Entry points (http и https)
|
||||
traefik.ingress.kubernetes.io/router.entrypoints: web,websecure
|
||||
labels:
|
||||
app.kubernetes.io/name: loki
|
||||
argocd.argoproj.io/instance: loki
|
||||
spec:
|
||||
ingressClassName: traefik
|
||||
rules:
|
||||
- host: loki.thedevops.dev
|
||||
http:
|
||||
paths:
|
||||
- path: /
|
||||
pathType: Prefix
|
||||
backend:
|
||||
service:
|
||||
name: loki
|
||||
port:
|
||||
number: 3100
|
||||
tls:
|
||||
- hosts:
|
||||
- loki.thedevops.dev
|
||||
secretName: loki-tls
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Шаг 4: Проверь файлы перед коммитом
|
||||
|
||||
```bash
|
||||
# Находясь в директории k3s-gitops/apps/loki/
|
||||
|
||||
# Проверь что файлы созданы
|
||||
ls -la
|
||||
|
||||
# Должны появиться:
|
||||
# - secret-basic-auth.yaml
|
||||
# - middleware-auth.yaml
|
||||
# - ingress-loki.yaml
|
||||
|
||||
# Валидируй YAML синтаксис
|
||||
kubectl apply --dry-run=client -f secret-basic-auth.yaml
|
||||
kubectl apply --dry-run=client -f middleware-auth.yaml
|
||||
kubectl apply --dry-run=client -f ingress-loki.yaml
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Шаг 5: Git Commit и Push
|
||||
|
||||
```bash
|
||||
# Из директории k3s-gitops/
|
||||
|
||||
# Добавь файлы в git
|
||||
git add apps/loki/secret-basic-auth.yaml
|
||||
git add apps/loki/middleware-auth.yaml
|
||||
git add apps/loki/ingress-loki.yaml
|
||||
|
||||
# Проверь статус
|
||||
git status
|
||||
|
||||
# Создай коммит
|
||||
git commit -m "feat(loki): Add Ingress with HTTPS and Basic Auth for loki.thedevops.dev"
|
||||
|
||||
# Push в репозиторий
|
||||
git push origin main
|
||||
# (или master - в зависимости от твоей ветки)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Шаг 6: ArgoCD Auto-Sync
|
||||
|
||||
Поскольку у тебя включен auto-sync, ArgoCD автоматически:
|
||||
1. Обнаружит изменения в git (в течение 3 минут)
|
||||
2. Применит новые манифесты
|
||||
3. Создаст Secret, Middleware и Ingress
|
||||
|
||||
### Ручная синхронизация (если не хочешь ждать)
|
||||
|
||||
#### Через ArgoCD CLI:
|
||||
|
||||
```bash
|
||||
# Синхронизируй приложение
|
||||
argocd app sync loki
|
||||
|
||||
# Посмотри статус
|
||||
argocd app get loki
|
||||
|
||||
# Посмотри логи синхронизации
|
||||
argocd app logs loki --follow
|
||||
```
|
||||
|
||||
#### Через ArgoCD UI:
|
||||
|
||||
1. Открой: `https://argocd.thedevops.dev` (или твой ArgoCD URL)
|
||||
2. Найди приложение `loki`
|
||||
3. Нажми кнопку **"SYNC"**
|
||||
4. Нажми **"SYNCHRONIZE"**
|
||||
|
||||
#### Через kubectl:
|
||||
|
||||
```bash
|
||||
# Триггер синхронизации через kubectl
|
||||
kubectl patch application loki -n argocd \
|
||||
--type merge \
|
||||
--patch '{"operation": {"initiatedBy": {"username": "manual"}}}'
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Шаг 7: Проверка развертывания
|
||||
|
||||
### 7.1 Проверь ресурсы в кластере
|
||||
|
||||
```bash
|
||||
# Проверь что все ресурсы созданы
|
||||
kubectl get all,ingress,secret,middleware -n loki
|
||||
|
||||
# Проверь конкретно Ingress
|
||||
kubectl get ingress loki -n loki -o wide
|
||||
|
||||
# Должен показать:
|
||||
# NAME CLASS HOSTS ADDRESS PORTS AGE
|
||||
# loki traefik loki.thedevops.dev 5.182.17.194,62.169.30.194,... 80, 443 1m
|
||||
|
||||
# Проверь Middleware
|
||||
kubectl get middleware -n loki
|
||||
|
||||
# Проверь Secret
|
||||
kubectl get secret loki-basic-auth -n loki
|
||||
```
|
||||
|
||||
### 7.2 Проверь сертификат
|
||||
|
||||
```bash
|
||||
# Посмотри статус сертификата
|
||||
kubectl get certificate -n loki
|
||||
|
||||
# Должен появиться:
|
||||
# NAME READY SECRET AGE
|
||||
# loki-tls True loki-tls 2m
|
||||
|
||||
# Если сертификат не готов, посмотри детали
|
||||
kubectl describe certificate loki-tls -n loki
|
||||
|
||||
# Проверь логи cert-manager
|
||||
kubectl logs -n cert-manager deployment/cert-manager --tail=50
|
||||
```
|
||||
|
||||
### 7.3 Проверь ArgoCD статус
|
||||
|
||||
```bash
|
||||
# Посмотри статус приложения
|
||||
argocd app get loki
|
||||
|
||||
# Должно показать:
|
||||
# Health Status: Healthy
|
||||
# Sync Status: Synced
|
||||
|
||||
# Посмотри ресурсы приложения
|
||||
argocd app resources loki
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Шаг 8: Настрой DNS
|
||||
|
||||
### 8.1 Проверь IP адреса Ingress
|
||||
|
||||
```bash
|
||||
kubectl get ingress loki -n loki -o jsonpath='{.status.loadBalancer.ingress[*].ip}'
|
||||
|
||||
# Получишь IP адреса: 5.182.17.194 62.169.30.194 62.169.30.206
|
||||
```
|
||||
|
||||
### 8.2 Добавь DNS запись
|
||||
|
||||
В DNS провайдере (Cloudflare, Route53, и т.д.) создай A-record:
|
||||
|
||||
```
|
||||
Type: A
|
||||
Name: loki.thedevops.dev
|
||||
Value: 5.182.17.194 (или любой из твоих IP)
|
||||
TTL: 300
|
||||
```
|
||||
|
||||
**Или для всех IP (если нужен load balancing):**
|
||||
|
||||
```
|
||||
Type: A, Name: loki.thedevops.dev, Value: 5.182.17.194
|
||||
Type: A, Name: loki.thedevops.dev, Value: 62.169.30.194
|
||||
Type: A, Name: loki.thedevops.dev, Value: 62.169.30.206
|
||||
```
|
||||
|
||||
### 8.3 Проверь DNS резолюцию
|
||||
|
||||
```bash
|
||||
# Проверь что DNS работает
|
||||
nslookup loki.thedevops.dev
|
||||
|
||||
# Или
|
||||
dig loki.thedevops.dev
|
||||
|
||||
# Должен показать твои IP адреса
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Шаг 9: Тестирование доступа
|
||||
|
||||
### 9.1 Тестовые запросы
|
||||
|
||||
```bash
|
||||
# Проверка health endpoint (требует Basic Auth)
|
||||
curl -u admin:lokipass123 https://loki.thedevops.dev/ready
|
||||
|
||||
# Должен вернуть: ready
|
||||
|
||||
# Проверка метрик
|
||||
curl -u admin:lokipass123 https://loki.thedevops.dev/metrics
|
||||
|
||||
# Проверка labels
|
||||
curl -u admin:lokipass123 https://loki.thedevops.dev/loki/api/v1/labels
|
||||
|
||||
# Тестовый LogQL запрос
|
||||
curl -u admin:lokipass123 -G -s "https://loki.thedevops.dev/loki/api/v1/query" \
|
||||
--data-urlencode 'query={namespace="loki"}' | jq
|
||||
```
|
||||
|
||||
### 9.2 Проверка через браузер
|
||||
|
||||
1. Открой: `https://loki.thedevops.dev`
|
||||
2. Должен появиться Basic Auth prompt
|
||||
3. Введи:
|
||||
- **Username:** `admin`
|
||||
- **Password:** `lokipass123`
|
||||
4. Должна открыться страница Loki (скорее всего 404 на корневом пути - это нормально)
|
||||
5. Попробуй endpoints:
|
||||
- `https://loki.thedevops.dev/ready`
|
||||
- `https://loki.thedevops.dev/metrics`
|
||||
|
||||
### 9.3 Проверка HTTPS сертификата
|
||||
|
||||
```bash
|
||||
# Проверь SSL сертификат
|
||||
openssl s_client -connect loki.thedevops.dev:443 -servername loki.thedevops.dev
|
||||
|
||||
# Или через curl
|
||||
curl -vI https://loki.thedevops.dev 2>&1 | grep -i "SSL\|certificate"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Шаг 10: Интеграция с Grafana
|
||||
|
||||
### 10.1 Добавь Loki DataSource в Grafana
|
||||
|
||||
Создай файл: `apps/monitoring/grafana-datasource-loki.yaml`
|
||||
|
||||
```yaml
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: grafana-datasource-loki
|
||||
namespace: monitoring
|
||||
labels:
|
||||
grafana_datasource: "1"
|
||||
data:
|
||||
loki.yaml: |
|
||||
apiVersion: 1
|
||||
|
||||
datasources:
|
||||
# Внутренний доступ (из Grafana pod в кластере) - РЕКОМЕНДУЕТСЯ
|
||||
- name: Loki
|
||||
type: loki
|
||||
access: proxy
|
||||
url: http://loki.loki.svc.cluster.local:3100
|
||||
isDefault: false
|
||||
editable: true
|
||||
jsonData:
|
||||
maxLines: 5000
|
||||
timeout: 60
|
||||
derivedFields:
|
||||
- datasourceUid: prometheus
|
||||
matcherRegex: "traceID=(\\w+)"
|
||||
name: TraceID
|
||||
url: '$${__value.raw}'
|
||||
|
||||
# Внешний доступ (через домен, требует Basic Auth)
|
||||
- name: Loki External
|
||||
type: loki
|
||||
access: proxy
|
||||
url: https://loki.thedevops.dev
|
||||
isDefault: false
|
||||
editable: true
|
||||
basicAuth: true
|
||||
basicAuthUser: admin
|
||||
secureJsonData:
|
||||
basicAuthPassword: lokipass123
|
||||
jsonData:
|
||||
maxLines: 5000
|
||||
timeout: 60
|
||||
tlsSkipVerify: false
|
||||
```
|
||||
|
||||
### 10.2 Примени конфигурацию
|
||||
|
||||
```bash
|
||||
cd k3s-gitops/
|
||||
|
||||
# Добавь файл
|
||||
git add apps/monitoring/grafana-datasource-loki.yaml
|
||||
|
||||
# Commit & Push
|
||||
git commit -m "feat(grafana): Add Loki datasource configuration"
|
||||
git push origin main
|
||||
|
||||
# Если у Grafana отдельное ArgoCD приложение, синхронизируй его
|
||||
argocd app sync k8s-monitoring
|
||||
# (или как называется твое Grafana приложение)
|
||||
```
|
||||
|
||||
### 10.3 Перезапусти Grafana (опционально)
|
||||
|
||||
```bash
|
||||
# Если datasource не появился автоматически
|
||||
kubectl rollout restart deployment k8s-monitoring-grafana -n monitoring
|
||||
```
|
||||
|
||||
### 10.4 Проверь в Grafana UI
|
||||
|
||||
1. Открой Grafana: `https://grafana.thedevops.dev`
|
||||
2. Перейди в: **Configuration → Data Sources**
|
||||
3. Должны появиться:
|
||||
- `Loki` (внутренний)
|
||||
- `Loki External` (внешний)
|
||||
4. Нажми **Test** на каждом
|
||||
5. Должно показать: **"Data source is working"**
|
||||
|
||||
---
|
||||
|
||||
## Шаг 11: Тестирование логов в Grafana
|
||||
|
||||
### 11.1 Через Explore
|
||||
|
||||
1. В Grafana перейди: **Explore** (иконка компаса)
|
||||
2. Выбери Data Source: **Loki**
|
||||
3. Попробуй запросы:
|
||||
|
||||
```logql
|
||||
# Все логи из namespace loki
|
||||
{namespace="loki"}
|
||||
|
||||
# Логи Loki pod'ов
|
||||
{namespace="loki", app="loki"}
|
||||
|
||||
# Ошибки из всех namespaces
|
||||
{} |= "error"
|
||||
|
||||
# Rate запросов за последние 5 минут
|
||||
rate({namespace="loki"}[5m])
|
||||
```
|
||||
|
||||
### 11.2 Создай Dashboard
|
||||
|
||||
1. **Dashboards → Import**
|
||||
2. Вставь ID: **13639** (Loki Dashboard)
|
||||
3. Выбери Loki datasource
|
||||
4. **Import**
|
||||
|
||||
---
|
||||
|
||||
## Шаг 12: Мониторинг и алерты
|
||||
|
||||
### 12.1 Проверь ServiceMonitor
|
||||
|
||||
```bash
|
||||
# ServiceMonitor уже должен существовать
|
||||
kubectl get servicemonitor loki -n loki -o yaml
|
||||
```
|
||||
|
||||
### 12.2 Prometheus метрики
|
||||
|
||||
```bash
|
||||
# Проверь что Prometheus собирает метрики Loki
|
||||
kubectl port-forward -n monitoring svc/k8s-monitoring-kube-promet-prometheus 9090:9090
|
||||
|
||||
# В браузере открой: http://localhost:9090
|
||||
# Попробуй запрос: loki_ingester_memory_chunks
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Проблема: Ingress не получает IP
|
||||
|
||||
```bash
|
||||
# Проверь Traefik
|
||||
kubectl get svc -n kube-system traefik
|
||||
|
||||
# Проверь логи Traefik
|
||||
kubectl logs -n kube-system deployment/traefik --tail=50
|
||||
```
|
||||
|
||||
### Проблема: 401 Unauthorized
|
||||
|
||||
```bash
|
||||
# Проверь что Secret создан
|
||||
kubectl get secret loki-basic-auth -n loki
|
||||
|
||||
# Проверь содержимое
|
||||
kubectl get secret loki-basic-auth -n loki -o jsonpath='{.data.users}' | base64 -d
|
||||
|
||||
# Проверь что Middleware применен
|
||||
kubectl get middleware loki-auth -n loki -o yaml
|
||||
```
|
||||
|
||||
### Проблема: Сертификат не создается
|
||||
|
||||
```bash
|
||||
# Проверь CertificateRequest
|
||||
kubectl get certificaterequest -n loki
|
||||
|
||||
# Проверь Challenge
|
||||
kubectl get challenge -n loki
|
||||
|
||||
# Проверь Order
|
||||
kubectl get order -n loki
|
||||
|
||||
# Логи cert-manager
|
||||
kubectl logs -n cert-manager deployment/cert-manager -f
|
||||
|
||||
# Проверь что домен резолвится
|
||||
nslookup loki.thedevops.dev
|
||||
```
|
||||
|
||||
### Проблема: ArgoCD не синхронизирует
|
||||
|
||||
```bash
|
||||
# Проверь статус приложения
|
||||
argocd app get loki
|
||||
|
||||
# Проверь логи ArgoCD
|
||||
kubectl logs -n argocd deployment/argocd-application-controller -f
|
||||
|
||||
# Вручную триггер sync
|
||||
argocd app sync loki --force
|
||||
```
|
||||
|
||||
### Проблема: Loki недоступен из Grafana
|
||||
|
||||
```bash
|
||||
# Проверь что Service работает
|
||||
kubectl get svc loki -n loki
|
||||
|
||||
# Проверь endpoints
|
||||
kubectl get endpoints loki -n loki
|
||||
|
||||
# Тест внутри кластера
|
||||
kubectl run -it --rm debug --image=curlimages/curl --restart=Never -- \
|
||||
curl -s http://loki.loki.svc.cluster.local:3100/ready
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Полезные команды
|
||||
|
||||
```bash
|
||||
# Просмотр всех ресурсов Loki
|
||||
kubectl get all,ingress,secret,middleware,certificate -n loki
|
||||
|
||||
# Логи Loki pod
|
||||
kubectl logs -n loki loki-0 -f
|
||||
|
||||
# Логи Promtail
|
||||
kubectl logs -n loki daemonset/promtail -f
|
||||
|
||||
# ArgoCD приложение
|
||||
argocd app get loki
|
||||
argocd app sync loki
|
||||
argocd app diff loki
|
||||
|
||||
# Удалить и пересоздать Ingress (если нужно)
|
||||
kubectl delete ingress loki -n loki
|
||||
argocd app sync loki
|
||||
|
||||
# Принудительный sync всего приложения
|
||||
argocd app sync loki --prune --force
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Итоговая структура Git репозитория
|
||||
|
||||
```
|
||||
k3s-gitops/
|
||||
└── apps/
|
||||
└── loki/
|
||||
├── namespace.yaml
|
||||
├── configmap-loki.yaml
|
||||
├── configmap-promtail.yaml
|
||||
├── secret-basic-auth.yaml # НОВЫЙ
|
||||
├── middleware-auth.yaml # НОВЫЙ
|
||||
├── ingress-loki.yaml # НОВЫЙ
|
||||
├── ingress-promtail.yaml # СУЩЕСТВУЮЩИЙ
|
||||
├── service.yaml
|
||||
├── statefulset.yaml
|
||||
├── daemonset-promtail.yaml
|
||||
├── rbac.yaml
|
||||
└── servicemonitor.yaml
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Безопасность и Best Practices
|
||||
|
||||
1. **Пароли:**
|
||||
- Используй strong passwords
|
||||
- Рассмотри интеграцию с Vault для хранения паролей
|
||||
- Регулярно меняй пароли
|
||||
|
||||
2. **HTTPS:**
|
||||
- Всегда используй HTTPS для production
|
||||
- Let's Encrypt сертификаты автоматически обновляются
|
||||
|
||||
3. **Rate Limiting:**
|
||||
- Добавь Traefik middleware для rate limiting если нужно
|
||||
|
||||
4. **Network Policies:**
|
||||
- Ограничь доступ к Loki только от Promtail и Grafana
|
||||
|
||||
5. **Backup:**
|
||||
- Настрой backup для PVC (`loki-data`)
|
||||
- Используй Longhorn snapshots
|
||||
|
||||
---
|
||||
|
||||
## Следующие шаги
|
||||
|
||||
1. ✅ Добавить Ingress для Loki
|
||||
2. ✅ Настроить HTTPS с Let's Encrypt
|
||||
3. ✅ Добавить Basic Authentication
|
||||
4. ✅ Интегрировать с Grafana
|
||||
5. 🔲 Настроить alerting rules в Loki
|
||||
6. 🔲 Добавить Grafana dashboards
|
||||
7. 🔲 Настроить retention policies
|
||||
8. 🔲 Интегрировать с Tempo (distributed tracing)
|
||||
9. 🔲 Добавить Network Policies
|
||||
10. 🔲 Настроить backup для Loki data
|
||||
|
||||
---
|
||||
|
||||
## Ресурсы
|
||||
|
||||
- [Loki Documentation](https://grafana.com/docs/loki/latest/)
|
||||
- [Traefik Middleware](https://doc.traefik.io/traefik/middlewares/overview/)
|
||||
- [ArgoCD Documentation](https://argo-cd.readthedocs.io/)
|
||||
- [Cert-Manager Documentation](https://cert-manager.io/docs/)
|
||||
|
||||
---
|
||||
|
||||
## Поддержка
|
||||
|
||||
Если возникли проблемы:
|
||||
1. Проверь логи компонентов
|
||||
2. Проверь ArgoCD sync status
|
||||
3. Проверь Kubernetes events: `kubectl get events -n loki --sort-by='.lastTimestamp'`
|
||||
180
loki-ingress-argocd-setup/CHEATSHEET.md
Normal file
180
loki-ingress-argocd-setup/CHEATSHEET.md
Normal file
@@ -0,0 +1,180 @@
|
||||
# Loki Ingress - Шпаргалка
|
||||
|
||||
## Быстрый старт
|
||||
|
||||
```bash
|
||||
# 1. Клонируй репозиторий
|
||||
git clone http://gitea-http.gitea.svc.cluster.local:3000/admin/k3s-gitops.git
|
||||
cd k3s-gitops
|
||||
|
||||
# 2. Скопируй файлы в apps/loki/
|
||||
cp secret-basic-auth.yaml apps/loki/
|
||||
cp middleware-auth.yaml apps/loki/
|
||||
cp ingress-loki.yaml apps/loki/
|
||||
|
||||
# 3. Commit и Push
|
||||
git add apps/loki/*.yaml
|
||||
git commit -m "feat(loki): Add Ingress with HTTPS and Basic Auth"
|
||||
git push origin main
|
||||
|
||||
# 4. Синхронизация ArgoCD (или жди 3 минуты)
|
||||
argocd app sync loki
|
||||
```
|
||||
|
||||
## Проверка статуса
|
||||
|
||||
```bash
|
||||
# Ingress
|
||||
kubectl get ingress loki -n loki -o wide
|
||||
|
||||
# Certificate
|
||||
kubectl get certificate loki-tls -n loki
|
||||
|
||||
# Все ресурсы
|
||||
kubectl get all,ingress,secret,middleware,certificate -n loki
|
||||
```
|
||||
|
||||
## Тестирование
|
||||
|
||||
```bash
|
||||
# Health check
|
||||
curl -u admin:lokipass123 https://loki.thedevops.dev/ready
|
||||
|
||||
# Metrics
|
||||
curl -u admin:lokipass123 https://loki.thedevops.dev/metrics
|
||||
|
||||
# Labels
|
||||
curl -u admin:lokipass123 https://loki.thedevops.dev/loki/api/v1/labels
|
||||
```
|
||||
|
||||
## Credentials по умолчанию
|
||||
|
||||
- **URL:** https://loki.thedevops.dev
|
||||
- **Username:** admin
|
||||
- **Password:** lokipass123
|
||||
|
||||
## Изменить пароль
|
||||
|
||||
```bash
|
||||
# Генерация нового пароля
|
||||
htpasswd -nb admin your-new-password
|
||||
|
||||
# Обновить secret-basic-auth.yaml
|
||||
# Замени строку в stringData.users
|
||||
```
|
||||
|
||||
## DNS настройка
|
||||
|
||||
```
|
||||
Type: A
|
||||
Name: loki.thedevops.dev
|
||||
Value: 5.182.17.194
|
||||
TTL: 300
|
||||
```
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Ingress нет IP
|
||||
```bash
|
||||
kubectl get svc -n kube-system traefik
|
||||
kubectl logs -n kube-system deployment/traefik --tail=50
|
||||
```
|
||||
|
||||
### Сертификат не создается
|
||||
```bash
|
||||
kubectl describe certificate loki-tls -n loki
|
||||
kubectl logs -n cert-manager deployment/cert-manager --tail=50
|
||||
kubectl get challenge -n loki
|
||||
```
|
||||
|
||||
### 401 Unauthorized
|
||||
```bash
|
||||
kubectl get secret loki-basic-auth -n loki
|
||||
kubectl get middleware loki-auth -n loki -o yaml
|
||||
```
|
||||
|
||||
### ArgoCD не синхронизирует
|
||||
```bash
|
||||
argocd app get loki
|
||||
argocd app sync loki --force
|
||||
kubectl logs -n argocd deployment/argocd-application-controller --tail=50
|
||||
```
|
||||
|
||||
## Полезные команды
|
||||
|
||||
```bash
|
||||
# Логи Loki
|
||||
kubectl logs -n loki loki-0 -f
|
||||
|
||||
# Логи cert-manager
|
||||
kubectl logs -n cert-manager deployment/cert-manager -f
|
||||
|
||||
# События
|
||||
kubectl get events -n loki --sort-by='.lastTimestamp'
|
||||
|
||||
# ArgoCD sync
|
||||
argocd app sync loki
|
||||
argocd app get loki
|
||||
argocd app diff loki
|
||||
|
||||
# Принудительная пересинхронизация
|
||||
argocd app sync loki --prune --force
|
||||
```
|
||||
|
||||
## Grafana интеграция
|
||||
|
||||
1. Скопируй `grafana-datasource-loki.yaml` в `apps/monitoring/`
|
||||
2. Commit & Push
|
||||
3. Sync ArgoCD приложение monitoring
|
||||
4. Перезапусти Grafana (если нужно):
|
||||
```bash
|
||||
kubectl rollout restart deployment k8s-monitoring-grafana -n monitoring
|
||||
```
|
||||
|
||||
## Endpoints
|
||||
|
||||
- `/ready` - health check
|
||||
- `/metrics` - Prometheus metrics
|
||||
- `/loki/api/v1/query` - LogQL queries
|
||||
- `/loki/api/v1/labels` - available labels
|
||||
- `/loki/api/v1/label/<name>/values` - label values
|
||||
|
||||
## LogQL примеры в Grafana
|
||||
|
||||
```logql
|
||||
# Все логи из loki namespace
|
||||
{namespace="loki"}
|
||||
|
||||
# Логи с ошибками
|
||||
{namespace="loki"} |= "error"
|
||||
|
||||
# Rate за 5 минут
|
||||
rate({namespace="loki"}[5m])
|
||||
|
||||
# Логи конкретного pod
|
||||
{namespace="loki", pod="loki-0"}
|
||||
```
|
||||
|
||||
## Безопасность
|
||||
|
||||
1. ✅ HTTPS включен (Let's Encrypt)
|
||||
2. ✅ Basic Auth включен
|
||||
3. 🔲 TODO: Изменить пароль по умолчанию
|
||||
4. 🔲 TODO: Добавить Network Policy
|
||||
5. 🔲 TODO: Настроить Rate Limiting
|
||||
|
||||
## Структура файлов
|
||||
|
||||
```
|
||||
apps/loki/
|
||||
├── secret-basic-auth.yaml ← Новый
|
||||
├── middleware-auth.yaml ← Новый
|
||||
├── ingress-loki.yaml ← Новый
|
||||
├── namespace.yaml
|
||||
├── configmap-loki.yaml
|
||||
├── configmap-promtail.yaml
|
||||
├── service.yaml
|
||||
├── statefulset.yaml
|
||||
├── daemonset-promtail.yaml
|
||||
└── ...
|
||||
```
|
||||
Reference in New Issue
Block a user