kubectl exe c ведет себя странно, заявив, что команда не найдена, хотя в модуле есть бинарный файл - PullRequest
0 голосов
/ 27 февраля 2020

Итак, у вас есть кластер OpenShift и запущенный модуль в пространстве имен mongodb-test. Модуль работает нормально

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

Когда я запускаю c в модуль и запускаю команду 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

Ниже приведены выходные данные echo $PATH и which 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$ 

Ответы [ 2 ]

1 голос
/ 01 марта 2020

Итак, вот в чем проблема. Когда я попытался выполнить mongo на самом деле после проникновения внутрь модуля, используя команду

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

, каким-то образом путь к месту установки исполняемого файла mongo был установлен в PATH (через .bash_profile: в замешательстве), но когда я попытался вызвать mongo, используя приведенную ниже команду, этого не произошло.

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

Поскольку мы подозревали, что PATH устанавливается в .bash_profile, я попытался выполнить mongo в bash и ниже команда сработала.

kubectl exec -it -n mongodb-test mongodb-1-7ww9k -c mongodb -- bash -c mongo
0 голосов
/ 27 февраля 2020

Можете ли вы попробовать, как показано ниже

# 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
...