簡體   English   中英

如何檢索運行給定進程的 pod/容器

[英]How to retrieve the pod/container in which run a given process

使用crictl an containerd , is there an easy way to find to which pod/container belongs a given process, using it's

例如,如何檢索運行以下進程的 pod 的名稱( 1747 ):

root@k8s-worker-node:/# ps -ef | grep mysql
1000        1747    1723  0 08:58 ?        00:00:01 mysqld

假設您正在查看 pod 中的主要進程,您可以執行以下操作:

crictl ps -q | while read cid; do
    if crictl inspect -o go-template --template '{{ .info.pid }}' $cid | grep -q $target_pid; then
        echo $cid
    fi
done

這將遍歷所有 crictl 托管的 pod,並根據$target_pid值(您預先設置為您感興趣的主機 pid)的值檢查 pod pid。

使用@Iarsks 的答案,我提出了一個強大且經過測試的解決方案,它顯示命名空間、pod、容器和容器的主要 PID。 例如,可以將下面的腳本復制粘貼到名為get_pid.sh的文件中,然后運行./get_pid.sh 2345

#!/bin/bash

# Display pod information about a process, using its host PID as input

set -euo pipefail

usage() {
  cat << EOD

Usage: `basename $0` PID

  Available options:
    -h          this message

Display pod information about a process, using its host PID as input:
- display namespace, pod, container, and primary process pid for this container if the process is running in a pod
- else exit with code 1
EOD
}

if [ $# -ne 1 ] ; then
    usage
    exit 2
fi

pid=$1
is_running_in_pod=false

pod=$(nsenter -t $pid -u hostname 2>&1)
if [ $? -ne 0 ]
then
    printf "%s %s:\n %s" "nsenter command failed for pid" "$pid" "$pod"
fi

cids=$(crictl ps -q)
for cid in $cids
do
  current_pod=$(crictl inspect -o go-template --template '{{ index .info.config.labels "io.kubernetes.pod.name"}}' "$cid")
  if [ "$pod" == "$current_pod" ]
  then
    tmpl='NS:{{ index .info.config.labels "io.kubernetes.pod.namespace"}} POD:{{ index .info.config.labels "io.kubernetes.pod.name"}} CONTAINER:{{ index .info.config.labels "io.kubernetes.container.name"}} PRIMARY PID:{{.info.pid}}'
    crictl inspect --output go-template --template "$tmpl" "$cid"
    is_running_in_pod=true
    break
  fi
done

if [ "$is_running_in_pod" = false ]
then
  echo "Process $pid is not running in a pod."
  exit 1
fi

暫無
暫無

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

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