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

12 KiB
Raw Permalink Blame History

Коллектор 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 - утилита командной строки Kubernetes
  • kubectl 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}'

Устранение неполадок

Частые проблемы

  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
    • Убедитесь в правильности контекста

Отладка

# Проверка установки 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