Назад | Перейти на главную страницу

Есть ли быстрый способ запросить запуск модулей из узла Kubernetes?

Можно использовать kubectl describe pods для получения списка модулей и последующей обработки для определения узлов, на которых работают эти модули. Однако выполнение этой команды занимает более 1 секунды.

Если я попал в конкретный узел Kubernetes, есть ли быстрый способ (менее 100 мс) поговорить с локальным агентом Kubernetes и получить список подов, работающих на localhost?

Например, есть ли клиенты командной строки для разговора с локальным kubelet и получить эту информацию?

с kubectl:

kg po --all-namespaces --field-selector spec.nodeName=nodename

с api:

curl --cacert ca.crt --cert apiserver.crt --key apiserver.key  https://<server>:<port>/api/v1/namespaces/<namespace>/pods?fieldSelector=spec.nodeName%3Dsomenodename

пс. если docker ps у вас не работает, вы можете разговаривать только с api

Обратите внимание, что kubelet - это просто агент узла и не содержит информации о других узлах, принадлежащих кластеру. Событие, если вы сделаете docker container ls, у вас будет как минимум 2 контейнера на контейнер (контейнер + песочница).

При использовании kubectl на время влияет множество факторов. kubectl get pods берет. Например, размер главного узла (ов), задержка в сети между клиентом (kubectl) и сервером (главный узел), объем ответа (количество pos, запущенных в вашем кластере) и т. Д.

Помните, что размер ваших главных узлов зависит от количества узлы в вашем кластере. Вы можете создать экземпляр GCE рядом с зоной, в которой работает ваш мастер, пройти аутентификацию с помощью файла kubeconfig и выполнять запросы к своему мастеру.

Если kubectl вам не подходит, вы можете попробовать сделать HTTP-запросы к мастеру напрямую (что делает kubectl)

Команда kubectl describe pods объединяет различные источники для предоставления информации. Наверное, одна из причин, почему на это требуется больше времени.

Если вы ищете данные о производительности для каждого узла, есть много вариантов на выбор:

  • kube-prometheus помогает настроить мониторинг контейнеров, а также узлов. Вы можете отфильтровать интересующие вас данные. Эта система работает по принципу "вытягивания", возможно, временное разрешение недостаточно детально для вас.
  • Аналогичным образом вы можете настроить Metricbeat с модулем Kubernetes для регистрации показателей. Это работает на основе «push», возможно, у вас здесь больше контроля над разрешением времени.

Если они связаны со слишком большими накладными расходами, вот несколько других идей:

  • kubectl get events
  • kubectl get pods --watch
  • docker ps и сопоставьте контейнеры с модулями, обработав метаданные откуда-то еще. Вы можете запустить ls -l /var/log/containers чтобы получить имя модуля и пространство имен для контейнера из имен символических ссылок.
  • Может ты найдешь что-нибудь еще интересное в /var/lib/kubelet/pods.