我的目标是在kubernetes中永久运行的pod上执行一次脚本。该pod被称为busybox-<SOME_ID>
,并在命名空间default
中找到它。因此,我编写了这个脚本 - 名为scan-one-pod.sh
:
#!/bin/bash
export MASTER_IP=192.168.56.102
export SCRIPT_NAME=script.sh
export POD_NAMESPACE=default
export POD_NAME=busybox
echo "echo HALLO" | ssh ubuntu@$MASTER_IP
export POD_ID=$(kubectl get po | grep busybox | sed -n '1p'|awk '{print $1}')
kubectl cp $SCRIPT_NAME $POD_NAMESPACE/$POD_ID:.
kubectl exec $POD_ID -- chmod +x $SCRIPT_NAME
export CONTAINER_ID=$(kubectl describe pod busybox | grep 'Container ID' | sed -n '1p'|awk '{print $3}')
ssh -t ubuntu@$MASTER_IP "sudo docker exec -u root $CONTAINER_ID -- ./script.sh"
引用的脚本script.sh
具有以下内容:
$ kubectl exec $POD_ID -- cat script.sh
#!/bin/bash
echo "test" >> test
cp test test-is-working
但是,无法在pod上运行脚本:
test
和test-is-working
脚本scan-one-pod.sh
仅返回EOF
:
$ ./scan-one-pod.sh
Pseudo-terminal will not be allocated because stdin is not a terminal.
Welcome to Ubuntu 16.04.3 LTS (GNU/Linux 4.4.0-87-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
155 Software-Pakete können aktualisiert werden.
72 Aktualisierungen sind Sicherheitsaktualisierungen.
HALLO
[sudo] Passwort für ubuntu:
EOF
Connection to 192.168.56.102 closed.
如果我直接执行docker
- 命令,远程执行我的kubernetes-controller,我会收到EOF
的相同消息:
ubuntu@controller:~$ export CONTAINER_ID=$(kubectl describe pod busybox | grep 'Container ID' | sed -n '1p'|awk '{print $3}')
ubuntu@controller:~$ sudo docker exec -u root $CONTAINER_ID ./script.sh
EOF
如果我通过kubectl exec
从我的本地工作站执行它,我会收到此错误:
$ kubectl exec $POD_ID ./script.sh
rpc error: code = 13 desc = invalid header field value "oci runtime error: exec failed: container_linux.go:247: starting container process caused \"no such file or directory\"\n"
我不知道,他们指的是哪个丢失的文件,但script.sh
- 文件存在且busybox-pod似乎正在运行:
$ kubectl exec $POD_ID ls script.sh
script.sh
$ kubectl get po busybox-6bdf9b5bbc-4skds
NAME READY STATUS RESTARTS AGE
busybox-6bdf9b5bbc-4skds 1/1 Running 10 12d
问题:据我所知,EOF
表示文件结束。结束哪个文件对我来说很重要,为什么这个问题?
在此先感谢,任何帮助表示赞赏:)