CentOS 7でKubernetesを実行していますが、perf
のバージョンが名前空間に対応していないようです。
ホストノード(ホストノードがkubectl describe pods --namespace
で見つかりました)のPIDでperfを実行すると、シンボルが見つからないというエラーが発生します。これは、コンテナに対するホストのファイルシステム上でのファイルの相対パスを探すためと思われます。
Exe(シンボルを含むGo exe)をホストノードの予想されるパスにコピーすると(kubectl cp ...
を使用するか、/var/lib/docker
のoverlay2の下にあるファイルを見つけることにより)、perf top -p <pid>
は、コンテナー内のexeに一致する同じシンボルを見つけることができるため、ホストホストノードから機能します。
CentOS 7ホストを備えたコンテナで実行されているプロセスに対してperf
を実行するためのより良い/よりクリーンな方法はありますか?
参照:
Kubernetes 1.17以降、ポッド内のコンテナー間でプロセス名前空間を 共有することが可能です 。これがあなたが探しているもののようです。
プロセス名前空間の共有は、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
リンクしたKubernetesDocsには、このサイドカーアプローチの操作方法についてもう少し詳しく説明しています。