我在 CentOS 7 上运行 Kubernetes,但该版本似乎不perf
支持命名空间。
如果在主机节点(使用 找到的主机节点)上的 PID 上运行 perf,kubectl describe pods --namespace
我会收到有关未找到符号的错误。这似乎是因为它在主机节点的文件系统上查找相对于容器的文件路径。
如果我将 exe(包含符号的 Go exe)复制到主机节点上的预期路径(使用kubectl cp ...
,或通过在 中找到 overlay2 下的文件/var/lib/docker
),则可以perf top -p <pid>
从主机主机节点运行,因为它可以找到与容器中的 exe 匹配的相同符号。
有没有更好/更干净的方法来perf
针对在 CentOS 7 主机的容器中运行的进程运行?
参考:
答案1
从 Kubernetes 1.17 开始,可以在 Pod 中的容器之间共享进程命名空间。这似乎就是您要找的东西。
使用 v1.PodSpec 的 shareProcessNamespace 字段启用进程命名空间共享。例如:
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 文档提供了有关如何使用此 sidecar 方法的更多详细信息。