Перейти к содержимому
Skip to main content

Интеграция с Kubernetes

info

Перевод в процессе / Translation in progress. See русская версия.

Интеграция получает метрики kubelet, события API-сервера и контейнерные логи через агент, задеплоенный как DaemonSet в кластере. Сбор выполняется per-node: каждый агент скрейпит свой kubelet, читает /var/log/containers/*.log на своём узле и подписывается на API-events через общий service account с read-only RBAC.

Предварительные требования

  • Кластер Kubernetes версии ≥ 1.24 с включённым kubelet summary API на порту 10250.
  • Агент Flaree установлен как DaemonSet (обычно через Helm: helm install flaree-agent flaree/flaree-agent).
  • ServiceAccount агента имеет RBAC на get/list/watch ресурсов pods, nodes, namespaces, events, endpoints и подресурсов nodes/metrics, nodes/stats.
  • На узлах доступна монтируемая директория /var/log/containers (стандартный путь для kubelet).
  • Токен агента и endpoint ingestion-шлюза переданы как Kubernetes Secret (${FLAREE_TOKEN}, ${FLAREE_ENDPOINT}).

Минимальная конфигурация

Минимальный agent.yaml в режиме DaemonSet использует переменную окружения KUBE_NODE_NAME, которую Kubernetes подставляет через fieldRef: spec.nodeName:

# agent.yaml
integrations:
kubernetes:
enabled: true
mode: daemonset
kubelet:
host: ${KUBE_NODE_NAME}
port: 10250

Полная конфигурация

Развёрнутый пример со списками namespace, метриками kubelet, сбором логов и событий:

# agent.yaml
integrations:
kubernetes:
enabled: true
mode: daemonset

kubelet:
host: ${KUBE_NODE_NAME}
port: 10250
scheme: https
token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
insecure_skip_verify: false

# Фильтрация по namespace и меткам
include_namespaces:
- default
- production
- staging
exclude_namespaces:
- kube-system
exclude_labels:
- flaree.monitor=false

# Метрики kubelet + cadvisor
metrics:
enabled: true
interval: 30s
resource_metrics: true
cadvisor: true

# Логи подов
logs:
enabled: true
path: /var/log/containers/*.log
fields_redact:
- password
- token
sampling:
info: 0.1
warn: 1.0
error: 1.0

# Kubernetes Events
events:
enabled: true
types:
- Warning
- Normal

# Credentials — только через env
token: ${FLAREE_TOKEN}
endpoint: ${FLAREE_ENDPOINT}

Проверка работы

  1. Убедитесь, что все поды DaemonSet-а агента запущены: на каждом узле должен быть ровно один pod в статусе Running.
  2. Проверьте, что агент читает kubelet — в его логах не должно быть ошибок 401 Unauthorized или connection refused.
  3. Откройте дашборд Flaree: в списке узлов должен появиться каждый nodeName, по которому агенту разрешено скрейпить kubelet.
# Статус DaemonSet
kubectl get daemonset -n flaree flaree-agent

# Логи одного из подов агента
kubectl logs -n flaree -l app=flaree-agent --tail 50

# Быстрая проверка kubelet summary API с узла
kubectl get --raw "/api/v1/nodes/${KUBE_NODE_NAME}/proxy/stats/summary" | head -c 500

Troubleshooting

warning

Не выдавайте агенту RBAC на secrets или configmaps — достаточно read-only прав на pods, nodes, namespaces и events. Переизбыток прав нарушает принцип наименьших привилегий.