根據 Pid 獲取 K8s Pod 名稱
腳本工具
$ vim pod_name_info.sh #!/bin/bash Check_jq() { which jq &> /dev/null if [ $? != 0 ];then echo -e "\033[32;32m 系統沒有安裝 jq 命令,請參考下面命令安裝! \033[0m \n" echo -e "\033[32;32m Centos 或者 RedHat 請使用命令 yum install jq -y 安裝 \033[0m" echo -e "\033[32;32m Ubuntu 或者 Debian 請使用命令 apt-get install jq -y 安裝 \033[0m" exit 1 fi } Pod_name_info() { CID=`cat /proc/${pid}/cgroup | head -1 | awk -F '/' '{print $5}'` CID=$(echo ${CID:0:8}) docker inspect $CID | jq '.[0].Config.Labels."io.kubernetes.pod.name"' } pid=$1 Check_jq Pod_name_info
上面 Shell
腳本需要服務器上安裝 jq
命令,因為腳本依賴 jq
來處理 json
格式。
JSON
是一種輕量級的數據交換格式。其采用完全獨立於語言的文本格式,具有方便人閱讀和編寫,同時也易於機器的解析和生成。這些特性決定了 JSON
格式越來越廣泛的應用於現代的各種系統中。作為系統管理員,在日常的工作中無論是編輯配置文件或者通過 http
請求查詢信息,我們都不可避免的要處理 JSON
格式的數據。
jq
是一款命令行下處理 JSON 數據的工具
。其可以接受標准輸入
,命令管道
或者文件中的 JSON 數據
,經過一系列的過濾器(filters)和表達式的轉后形成我們需要的數據結構並將結果輸出到標准輸出中。jq
的這種特性使我們可以很容易地在 Shell
腳本中調用它。
運行方式
# 通過 Pid 獲取 Pod 名稱 $ ./pod_name_info.sh Pid
根據 Pod 名稱獲取 Pid
$ vim pod_pid_info.sh #!/usr/bin/env bash Check_jq() { which jq &> /dev/null if [ $? != 0 ];then echo -e "\033[32;32m 系統沒有安裝 jq 命令,請參考下面命令安裝! \033[0m \n" echo -e "\033[32;32m Centos 或者 RedHat 請使用命令 yum install jq -y 安裝 \033[0m" echo -e "\033[32;32m Ubuntu 或者 Debian 請使用命令 apt-get install jq -y 安裝 \033[0m" exit 1 fi } Pid_info() { docker_storage_location=`docker info | grep 'Docker Root Dir' | awk '{print $NF}'` for docker_short_id in `docker ps | grep ${pod_name} | grep -v pause | awk '{print $1}'` do docker_long_id=`docker inspect ${docker_short_id} | jq ".[0].Id" | tr -d '"'` cat ${docker_storage_location}/containers/${docker_long_id}/config.v2.json | jq ".State.Pid" done } pod_name=$1 Check_jq Pid_info
運行
# 通過 Pod名稱 獲取 Pid $ ./pod_pid_info.sh Pod名稱
https://mp.weixin.qq.com/s/HF5rzr5fULiMWq1NPe780g
https://mp.weixin.qq.com/s/sOyCLoYR0E1fFTcr2MnQCw Pod 如何獲取 IP 地址的原理