Можно использовать 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
помогает настроить мониторинг контейнеров, а также узлов. Вы можете отфильтровать интересующие вас данные. Эта система работает по принципу "вытягивания", возможно, временное разрешение недостаточно детально для вас.Если они связаны со слишком большими накладными расходами, вот несколько других идей:
kubectl get events
kubectl get pods --watch
docker ps
и сопоставьте контейнеры с модулями, обработав метаданные откуда-то еще. Вы можете запустить ls -l /var/log/containers
чтобы получить имя модуля и пространство имен для контейнера из имен символических ссылок./var/lib/kubelet/pods
.