0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

kubernetesの上で動いているpodの上でmemrayを動かす

Posted at

業務で役に立ったのでメモとして

pythonのdocker imageをkubernetes (EKS) の上で動かしていたが、このdocker image内でどのようにメモリを使っているか調べる必要があった。そこでmemrayを使うことにしたが、色々つまづいたので備忘録として残す。

結論

以下に書いてある。ただし、imageはroot userで動かす必要がある(と思う)。

つまり、runAsUser: 0なりをセットする必要がある(下参照)。

手順について

1. Pythonのpackageとしてmemrayをいれる

poetryならば、以下のコマンドで入る。

poetry add memray

Docker imageに入れる際は、requirements.txtを生成した上で、pipコマンドをたたくなりすればよい。

2. gdbとlibcap-2binをinstallする

dockerのpython imageはdebianなので、Dockerfileに以下を追記する(/etc/os-releaseをみるとほぼdebianだと思うので)。

RUN apt-get install -y gdb libcap2-bin

3. kubernetesのdeploymentのmanifestに追記をする。

おそらくdeploymentを使っていると思うので(そうでない場合でも同様にすればよいと思われる)、Deployment.spec.template.spec.containersの部分に以下を追記する。

securityContext:
  capabilities:
    add:
      - SYS_PTRACE

4. setcapのコマンドを走らせる

次のコマンドを走らせる

setcap cap_sys_ptrace+pe /usr/bin/gdb

Dockerfileに以下を追記でもよいと思われる(自分はこれでOKだった)

CMD ["setcap", "cap_sys_ptrace+pe", "/usr/bin/gdb"]

5. memrayを走らせる

以下のコマンドを走らせる。ただしPIDは1の場合である。必要ならば、あらかじめpsコマンドを入れるなどすればよい。

kubectl exec -it <your pod> -- memray attach 1

最後に

Capabilitiesなどわかっていないkubernetesの概念などがあったが、とりあえず上で動いた。ただ過剰な権限を付与していたりするかもしれない。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?