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