- Добавлен новый коллектор 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
12 KiB
12 KiB
Коллектор kubernetes
Автор: Сергей Антропов
Сайт: https://devops.org.ru
Описание
Коллектор kubernetes
собирает агрегированную информацию о Kubernetes кластере через kubectl. Предоставляет детальную информацию о нодах, подах, сервисах и других ресурсах кластера.
Поддерживаемые платформы
- Linux: Полная поддержка
- macOS: Полная поддержка
- Windows: Не поддерживается (возвращает пустой JSON)
Собираемые данные
Информация о кластере
{
"cluster": {
"name": "production-cluster", // Имя кластера
"version": "v1.28.2", // Версия Kubernetes
"context": "production", // Контекст kubectl
"server": "https://kubernetes.default.svc.cluster.local:443" // Сервер API
}
}
Информация о нодах
{
"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": ""
}
}
]
}
Информация о подах
{
"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" // Память
}
}
]
}
Информация о сервисах
{
"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"
}
}
]
}
Информация о деплойментах
{
"deployments": [
{
"name": "web-server", // Имя деплоймента
"namespace": "default", // Namespace
"replicas": 3, // Желаемое количество реплик
"ready_replicas": 3, // Готовые реплики
"available_replicas": 3, // Доступные реплики
"updated_replicas": 3, // Обновленные реплики
"strategy": "RollingUpdate", // Стратегия обновления
"labels": { // Метки деплоймента
"app": "web-server"
}
}
]
}
Статистика кластера
{
"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
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
- утилита командной строки Kuberneteskubectl get nodes
- список нодkubectl get pods
- список подовkubectl get services
- список сервисовkubectl get deployments
- список деплойментовkubectl get namespaces
- список namespace
Примеры использования
Проверка работы коллектора
# Запуск коллектора напрямую
./bin/agent/collectors/kubernetes
# Запуск через агент
make run
Фильтрация данных
# Информация о кластере
./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}'
Устранение неполадок
Частые проблемы
-
"kubectl not found"
- Убедитесь, что kubectl установлен
- Проверьте PATH для команды kubectl
-
"Unable to connect to the server"
- Проверьте конфигурацию kubeconfig
- Убедитесь в доступности Kubernetes API
- Проверьте права доступа к кластеру
-
"Permission denied"
- Проверьте права доступа к ресурсам кластера
- Убедитесь в правильности RBAC настроек
-
"Context not found"
- Проверьте конфигурацию kubeconfig
- Убедитесь в правильности контекста
Отладка
# Проверка установки 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