SensusAgent/docs/collectors/kubernetes.md
Sergey Antropoff 15e6260ac3 feat: добавлен коллектор proxvms и обновлена документация
- Добавлен новый коллектор proxvms для сбора информации о виртуальных машинах и контейнерах Proxmox
- Реализован парсинг конфигураций VM/контейнеров с структурированием данных
- Добавлена поддержка парсинга сетевых интерфейсов, IP конфигураций, SCSI/IDE устройств
- Реализован парсинг JSON из поля description с переводом русских ключей на английский
- Добавлена генерация уникальных идентификаторов (cluster_uid, node_uid, machine_uid)
- Обновлена документация для всех коллекторов:
  - proxcluster (существующая)
  - gpu (существующая)
  - proxnode (новая)
  - proxvms (новая)
  - system (новая)
  - docker (новая)
  - hba (новая)
  - sensors (новая)
  - kubernetes (новая)
  - macos (новая)
  - uptime (новая)
- Обновлен основной файл docs/collectors.md с полным списком коллекторов
- Добавлена поддержка платформ для каждого коллектора
- Включены примеры использования и устранение неполадок

Автор: Сергей Антропов, сайт: https://devops.org.ru
2025-09-15 12:47:44 +03:00

348 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Коллектор kubernetes
**Автор:** Сергей Антропов
**Сайт:** https://devops.org.ru
## Описание
Коллектор `kubernetes` собирает агрегированную информацию о Kubernetes кластере через kubectl. Предоставляет детальную информацию о нодах, подах, сервисах и других ресурсах кластера.
## Поддерживаемые платформы
- **Linux**: Полная поддержка
- **macOS**: Полная поддержка
- **Windows**: Не поддерживается (возвращает пустой JSON)
## Собираемые данные
### Информация о кластере
```json
{
"cluster": {
"name": "production-cluster", // Имя кластера
"version": "v1.28.2", // Версия Kubernetes
"context": "production", // Контекст kubectl
"server": "https://kubernetes.default.svc.cluster.local:443" // Сервер API
}
}
```
### Информация о нодах
```json
{
"nodes": [
{
"name": "worker-1", // Имя ноды
"status": "Ready", // Статус ноды
"roles": ["worker"], // Роли ноды
"version": "v1.28.2", // Версия kubelet
"os": "linux", // Операционная система
"arch": "amd64", // Архитектура
"kernel": "5.4.0-74-generic", // Версия ядра
"container_runtime": "containerd://1.6.6", // Контейнерный runtime
"capacity": { // Емкость ноды
"cpu": "4", // CPU (cores)
"memory": "8Gi", // Память
"pods": "110", // Максимум подов
"ephemeral_storage": "20Gi" // Эфемерное хранилище
},
"allocatable": { // Доступные ресурсы
"cpu": "3920m", // CPU (millicores)
"memory": "7.5Gi", // Память
"pods": "110", // Максимум подов
"ephemeral_storage": "18Gi" // Эфемерное хранилище
},
"conditions": [ // Условия ноды
{
"type": "Ready",
"status": "True",
"last_heartbeat": "2024-01-01T12:00:00Z"
}
],
"taints": [], // Taints ноды
"labels": { // Метки ноды
"kubernetes.io/hostname": "worker-1",
"node-role.kubernetes.io/worker": ""
}
}
]
}
```
### Информация о подах
```json
{
"pods": [
{
"name": "web-server-7d4b8c9f6-abc12", // Имя пода
"namespace": "default", // Namespace
"node": "worker-1", // Нода
"status": "Running", // Статус пода
"phase": "Running", // Фаза пода
"restart_count": 0, // Количество перезапусков
"age": "2d", // Возраст пода
"containers": [ // Контейнеры в поде
{
"name": "web-server", // Имя контейнера
"image": "nginx:1.21", // Образ
"ready": true, // Готовность
"restart_count": 0, // Количество перезапусков
"state": "running" // Состояние
}
],
"labels": { // Метки пода
"app": "web-server",
"version": "v1.0.0"
},
"requests": { // Запрошенные ресурсы
"cpu": "100m", // CPU
"memory": "128Mi" // Память
},
"limits": { // Лимиты ресурсов
"cpu": "500m", // CPU
"memory": "512Mi" // Память
}
}
]
}
```
### Информация о сервисах
```json
{
"services": [
{
"name": "web-server-service", // Имя сервиса
"namespace": "default", // Namespace
"type": "ClusterIP", // Тип сервиса
"cluster_ip": "10.96.0.1", // Cluster IP
"external_ip": "", // External IP
"ports": [ // Порты
{
"name": "http",
"port": 80,
"target_port": 8080,
"protocol": "TCP"
}
],
"selector": { // Селектор
"app": "web-server"
},
"labels": { // Метки сервиса
"app": "web-server"
}
}
]
}
```
### Информация о деплойментах
```json
{
"deployments": [
{
"name": "web-server", // Имя деплоймента
"namespace": "default", // Namespace
"replicas": 3, // Желаемое количество реплик
"ready_replicas": 3, // Готовые реплики
"available_replicas": 3, // Доступные реплики
"updated_replicas": 3, // Обновленные реплики
"strategy": "RollingUpdate", // Стратегия обновления
"labels": { // Метки деплоймента
"app": "web-server"
}
}
]
}
```
### Статистика кластера
```json
{
"stats": {
"nodes_total": 3, // Общее количество нод
"nodes_ready": 3, // Готовые ноды
"nodes_not_ready": 0, // Неготовые ноды
"pods_total": 15, // Общее количество подов
"pods_running": 12, // Запущенные поды
"pods_pending": 2, // Ожидающие поды
"pods_failed": 1, // Неудачные поды
"services_total": 5, // Общее количество сервисов
"deployments_total": 3, // Общее количество деплойментов
"namespaces_total": 4, // Общее количество namespace
"total_cpu_cores": 12, // Общее количество CPU ядер
"total_memory_gb": 24, // Общая память в ГБ
"used_cpu_cores": 6, // Использованные CPU ядра
"used_memory_gb": 12 // Использованная память в ГБ
}
}
```
## Конфигурация
### config.yaml
```yaml
collectors:
kubernetes:
enabled: true
type: exec
key: kubernetes
interval: "300s" # 5 минут
timeout: "12s"
exec: "./collectors/kubernetes"
platforms: [linux, darwin]
```
### Переменные окружения
- `COLLECTOR_TIMEOUT`: Таймаут выполнения коллектора (по умолчанию 12s)
- `KUBECONFIG`: Путь к файлу конфигурации kubectl
## Требования
### Системные требования
- Kubernetes кластер
- Настроенный kubeconfig
- Доступ к Kubernetes API
- Права на чтение ресурсов кластера
### Команды
Коллектор использует следующие команды (должны быть доступны):
- `kubectl` - утилита командной строки Kubernetes
- `kubectl get nodes` - список нод
- `kubectl get pods` - список подов
- `kubectl get services` - список сервисов
- `kubectl get deployments` - список деплойментов
- `kubectl get namespaces` - список namespace
## Примеры использования
### Проверка работы коллектора
```bash
# Запуск коллектора напрямую
./bin/agent/collectors/kubernetes
# Запуск через агент
make run
```
### Фильтрация данных
```bash
# Информация о кластере
./bin/agent/collectors/kubernetes | jq '.cluster'
# Все ноды
./bin/agent/collectors/kubernetes | jq '.nodes'
# Только готовые ноды
./bin/agent/collectors/kubernetes | jq '.nodes[] | select(.status == "Ready")'
# Все поды
./bin/agent/collectors/kubernetes | jq '.pods'
# Только запущенные поды
./bin/agent/collectors/kubernetes | jq '.pods[] | select(.status == "Running")'
# Поды с определенным namespace
./bin/agent/collectors/kubernetes | jq '.pods[] | select(.namespace == "default")'
# Все сервисы
./bin/agent/collectors/kubernetes | jq '.services'
# Все деплойменты
./bin/agent/collectors/kubernetes | jq '.deployments'
# Статистика кластера
./bin/agent/collectors/kubernetes | jq '.stats'
# Общее количество нод
./bin/agent/collectors/kubernetes | jq '.stats.nodes_total'
# Общее количество подов
./bin/agent/collectors/kubernetes | jq '.stats.pods_total'
# Использование ресурсов
./bin/agent/collectors/kubernetes | jq '.stats | {total_cpu_cores, used_cpu_cores, total_memory_gb, used_memory_gb}'
```
## Устранение неполадок
### Частые проблемы
1. **"kubectl not found"**
- Убедитесь, что kubectl установлен
- Проверьте PATH для команды kubectl
2. **"Unable to connect to the server"**
- Проверьте конфигурацию kubeconfig
- Убедитесь в доступности Kubernetes API
- Проверьте права доступа к кластеру
3. **"Permission denied"**
- Проверьте права доступа к ресурсам кластера
- Убедитесь в правильности RBAC настроек
4. **"Context not found"**
- Проверьте конфигурацию kubeconfig
- Убедитесь в правильности контекста
### Отладка
```bash
# Проверка установки kubectl
kubectl version --client
# Проверка подключения к кластеру
kubectl cluster-info
# Проверка конфигурации
kubectl config view
# Проверка текущего контекста
kubectl config current-context
# Проверка прав доступа
kubectl auth can-i get pods
kubectl auth can-i get nodes
kubectl auth can-i get services
# Проверка ресурсов
kubectl get nodes
kubectl get pods --all-namespaces
kubectl get services --all-namespaces
```
## Безопасность
- Коллектор требует права на чтение ресурсов кластера
- Не передает пароли или секретные ключи
- Собирает только публичную информацию о кластере
- Не выполняет привилегированные операции
## Производительность
- Время выполнения: ~5-12 секунд
- Интервал сбора: рекомендуется 5 минут (300s)
- Потребление ресурсов: минимальное
- Собирает только локальную информацию о кластере
## Совместимость
- **Kubernetes**: 1.20+
- **Платформы**: Linux, macOS
- **Архитектуры**: x86_64, ARM64
- **Типы нод**: master, worker
- **Контейнерные runtime**: containerd, docker, cri-o