簡體   English   中英

有什么辦法可以在 pod 中獲取進程的堆棧跟蹤嗎?

[英]Is there any way to get stacktrace of process inside pod?

我正在嘗試獲取在 k8s pod 內運行的進程的堆棧跟蹤。 為此,我已將 gstack 二進制文件安裝到其中,但它沒有給我任何輸出。

這是示例演示:

sh-4.3# gstack
Usage: gstack <process-id>
sh-4.3# sleep 100 &
[2] 1594
sh-4.3# gstack 1594
sh-4.3# gstack 1594 > test
sh-4.3# cat test
sh-4.3#

有人可以幫我嗎?

PS:如果您也有其他方法來收集堆棧跟蹤(除了 gstack),那也很好。

您應該以 root 身份連接到 pod 以查看跟蹤。

使用最新的opensuse/tumbleweed例如 pod

#suse-pod.yaml

apiVersion: v1
kind: Pod
metadata:
  name: suse
spec:
  containers:
  - name: suse
    image: opensuse/tumbleweed
    command: [ "/bin/bash", "-ce", "tail -f /dev/null" ]

以正常方式連接到 pod 並啟動進程

suse:/ # kubectl exec suse -ti -- bash
suse:/ # sleep 100000&
[1] 677


suse:/ # ps aux | grep sleep
root         677  0.0  0.0   2324   764 pts/3    S    14:16   0:00 sleep 100000

查看:

suse:/ # gstack 677 --> empty

suse:/ # gdb
(gdb) attach 677
Attaching to process 677
ptrace: Operation not permitted.

ptrace:不允許操作。 <-- 這是根本原因

你可以做什么:

1)你可以(和我一樣)安裝 3rd party awesome kubectl-plugins並使用kubectl ssh -u root [pod]來訪問 root 下的 pod。

git clone https://github.com/jordanwilson230/kubectl-plugins.git
cd kubectl-plugins
./install-plugins.sh
source ~/.bash_profile
kubectl ssh -u root suse

Connecting...
Pod: suse
Namespace: NONE
User: root
Container: NONE
Command: /bin/sh

If you don't see a command prompt, try pressing enter.
sh-5.0# gstack 677
#0  0x00007f8eeb2a7603 in nanosleep () from /lib64/libc.so.6
#1  0x000055fd4fc88677 in ?? ()
#2  0x000055fd4fc88450 in ?? ()
#3  0x000055fd4fc85500 in ?? ()
#4  0x00007f8eeb201e0b in __libc_start_main () from /lib64/libc.so.6
#5  0x000055fd4fc855da in ?? ()


sh-5.0# gdb       
GNU gdb (GDB; openSUSE Tumbleweed) 8.3.1
(gdb) attach 677
Attaching to process 677
Reading symbols from /usr/bin/sleep...
(No debugging symbols found in /usr/bin/sleep)
Reading symbols from /lib64/libc.so.6...
(No debugging symbols found in /lib64/libc.so.6)
Reading symbols from /lib64/ld-linux-x86-64.so.2...
(No debugging symbols found in /lib64/ld-linux-x86-64.so.2)
0x00007f8eeb2a7603 in nanosleep () from /lib64/libc.so.6
Missing separate debuginfos, use: zypper install coreutils-debuginfo-8.31-2.2.x86_64

2)您可以關注@mac 答案

-找出它在 kubectl 上運行的節點 get po -n [NAMESPACE] -o wide

-ssh 節點

- 找到 docker 容器 sudo docker ps | grep [命名空間]

- 以 root 身份登錄容器 sudo docker exec -it -u root [DOCKER ID] /bin/bash

希望能幫助到你

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM