Лучший способ использовать Perf для Программы в Kubernetes/Docker?
Я запускаю Kubernetes на CentOS 7, и не похоже, что версия perf
осознает пространство имен.
Если запустить perf для PID на узле узла (узел узла найден с kubectl describe pods --namespace
) Я получаю сообщение об ошибке, что символы не найдены. Кажется, это происходит потому, что он ищет путь к файлу относительно контейнера, но в файловой системе узла.
Если я скопирую exe (Go exe, который содержит символы) в ожидаемый путь на узле хоста (либо с kubectl cp ...
или путем нахождения файла под overlay2 в /var/lib/docker
) затем perf top -p <pid>
работает с хост-узла хоста, так как он может найти те же символы, которые соответствуют exe в контейнере.
Есть ли лучший / более чистый способ запуска perf
против процесса, запущенного в контейнере с хостом CentOS 7?
Рекомендации:
0 ответов
Начиная с Kubernetes 1.17 стало возможным разделять пространство имен процессов между контейнерами в поде. Похоже, это то, что вы ищете.
Совместное использование пространства имен процессов включается с помощью поля share ProcessNamespace v1.PodSpec. Например:
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
shareProcessNamespace: true
containers:
- name: nginx
image: nginx
- name: shell
image: busybox
securityContext:
capabilities:
add:
- SYS_PTRACE
stdin: true
tty: true
Документы Kubernetes, на которые я ссылаюсь, дают немного больше подробностей о том, как работать с этим подходом.