如何登录到 kubernetes 中任何命名空间中的任何 pod 并运行任何命令?



我的要求是登录到pod,而不选择命名空间和pod名称,然后提供一个在其中运行的命令。没有回答查询的线程或问题。以下是我想出的解决方案。如果可以对此进行改进,请提供这些改进。

我正在寻找构建自动化或 krew 插件来登录任何命名空间中的任何 pod 并在其中运行任何命令。它纯粹是基于自动化的,有很多插件可以像 k9s 和其他 krew 插件一样做同样的工作,但我的要求更像是基于通用的轻量级,可以在没有任何第三方工具的情况下在管道中实现。

创建一个 shell 脚本

login.sh

#$1 is namespace $2 is the row number where the pod is located $3 is the command to run inside the pod
#$3 is command can be bash,sh or some command like echo "test"
#Example ./login.sh test-ns 1 bash or ./login.sh test-ns 1 'echo "test"'
pod=$(kubectl get pods -n $1 | grep -v NAME | awk -v i=1 -v j=$2 'FNR == j {print $i}')
kubectl exec -it $pod -n $1 -- $3

如何使用?

login.sh $namespace $pod_数字$command

1.创建上面的脚本,使其可执行并将其复制到/usr/local/bin目录或$PATH变量中

chmod +x login.sh
#Check if /usr/local/bin exists in PATH variable, if not then run the export command
echo $PATH
export PATH=$PATH:/usr/local/bin
cp -p login.sh /usr/local/bin/login.sh

2.运行kubectl 获取 pods以获取要在其中运行命令的 pod 编号

helloworld-v1-5dfcf5d5cd-v7xtw   1/1     Running   0          8d
httpbin-56db79f4f5-j2cxz         1/1     Running   1          8d
test-cc5b6bfd-2hhmr              1/1     Running   0          39h

我想进入第二个豆荚,外壳是bash

3.运行命令以使用脚本

login.sh default 2 bash

演示输出

输出如下所示:

shubham.yadav@my-MAC:~/k8s $ ./login.sh default 2 bash
root@httpbin-56db79f4f5-j2cxz:/# 

另一个例子只是为了让实现更清晰

shubham.yadav@my-MAC:~/k8s $ login.sh qa-test 2 'echo "From the pod Login Succeeded"'
"From the pod Login Succeeded"

注意:如果命名空间中有大量 pod,您可以使用 awk 的NR实用程序来获取 pod 的列号

KPkubectl get pods别名

kp | grep -v NAME | awk '{print NR, $1}'

1 details-v1-78d78fbddf-zksf7
2 helloworld-v1-5dfcf5d5cd-wl2nx
3 httpbin-56db79f4f5-wj4ql
4 load-generator-5cdbd66865-fxpbm
5 productpage-v1-85b9bf9cd7-qp79l
6 ratings-v1-6c9dbf6b45-xm6ww
7 reviews-v1-564b97f875-cx86c
8 reviews-v2-568c7c9d8f-xxc86
9 reviews-v3-67b4988599-p98ft
10 test-cc5b6bfd-68tqg
11 test-cc5b6bfd-8q694
12 unset-deployment-7896c75bf6-5w27b
13 web-v1-fc4d58bdc-pcv9p
14 web-v2-7bf5dd654d-684t9
15 web-v3-7567d5d6b9-sqrpg

为 shell 脚本创建二进制文件

如果您有兴趣为上述脚本创建二进制文件,您可以点击以下链接,该链接可让您为上述 shell 脚本创建二进制文件。

还可以将二进制名称更改为更友好的名称,从login.sh更改为仅执行

shubham.yadav@my-MAC:/usr/local/bin $ mv login.sh execute
shubham.yadav@my-MAC:/usr/local/bin $ execute qa-test 2 'echo "Binary Name Changed"'
"Binary Name Changed"

最新更新