使用docker向Pod注入脚本会返回EOF

时间:2018-04-18 12:51:01

标签: bash docker kubernetes eof

我的目标是在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上运行脚本:

  • 未创建文件testtest-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表示文件结束。结束哪个文件对我来说很重要,为什么这个问题?

在此先感谢,任何帮助表示赞赏:)

0 个答案:

没有答案