kubectl exec 行为异常,即使二进制文件在 pod 中,也未找到命令

kubectl exec behaving strangely, stating command not found even though the binary is there in the pod

所以在 mongodb-test 命名空间中有一个 OpenShift 集群和 运行ning 一个 pod。豆荚 运行 很好

$ kubectl get pods -n mongodb-test                                             
NAME               READY   STATUS      RESTARTS   AGE
mongodb-1-7ww9k    1/1     Running     0          14m

当我执行 pod 和 运行 mongo 命令时,我没有遇到任何问题,命令按预期工作。

$ kubectl exec -it -n mongodb-test  mongodb-1-7ww9k   -c mongodb  sh
sh-4.2$ mongo
MongoDB shell version v3.6.3
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.6.3
> 

现在的问题是,当我尝试使用以下语法 运行 相同的命令时,我得到 mongo not found

$ kubectl exec -it -n mongodb-test mongodb-1-7ww9k -c mongodb -- sh -c mongo
sh: mongo: command not found
E0227 13:02:01.728579   24237 v3.go:79] EOF
                                           command terminated with exit code 127

下面是 pod 内部 echo $PATHwhich mongo 的输出。

$ kubectl exec -ti -n mongodb-test mongodb-1-7ww9k -c mongodb -- sh 
sh-4.2$ echo $PATH
/opt/rh/rh-mongodb36/root/usr/bin:/opt/rh/rh-mongodb36/root/usr/sbin:/opt/app-root/src/bin:/opt/app-root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
sh-4.2$ which mongo
/opt/rh/rh-mongodb36/root/usr/bin/mongo
sh-4.2$ 

你可以试试下面的方法吗

# kubectl run mongo --image=mongo --port=27017

# kubectl exec -it mongo-857dc9fb9d-scknx -- mongo
MongoDB shell version v4.2.3
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb

if it doesnt work then try below

 # kubectl exec -it mongo-857dc9fb9d-scknx -- /opt/rh/rh-mongodb36/root/usr/bin/mongo

所以,这就是问题所在。当我尝试在使用命令

进入 pod 后实际执行 mongo
$ kubectl exec -it -n mongodb-test  mongodb-1-7ww9k   -c mongodb  sh

不知何故 mongo 可执行文件所在的路径被设置为 PATH(通过 .bash_profile :confused),但是当我尝试调用 mongo 时,使用下面的命令,同样的事情没有发生。

kubectl exec -it -n mongodb-test mongodb-1-7ww9k -c mongodb -- sh -c mongo

因为我们怀疑 PATH 是在 .bash_profile 中设置的,所以我尝试在 bash 中执行 mongo 并且下面的命令有效。

kubectl exec -it -n mongodb-test mongodb-1-7ww9k -c mongodb -- bash -c mongo