如何向Kubernetes Pod传递带参数的本地脚本?
解决kubectl exec传递参数给本地脚本的问题
正确命令
直接用以下写法即可将本地脚本和参数传递到Pod内执行:
kubectl exec -i <pod> -c <container> -n "$namespace" -- bash -s "$var" < script.sh
如果需要传递多个参数,只需依次追加:
kubectl exec -i <pod> -c <container> -n "$namespace" -- bash -s "$var1" "$var2" "$var3" < script.sh
错误写法分析
第一种写法
kubectl exec -i <pod> -c <container> -n "$namespace" -- bash -c "`sh script.sh "$var"`"
- 错误核心:反引号会让
sh script.sh "$var"在本地执行,把脚本的输出内容作为字符串传给Pod内的bash -c执行,而非将脚本本身传到Pod里运行。相当于Pod里执行的是本地脚本的输出,而非脚本本身,自然不存在$1参数。
第二种写法
kubectl exec -i <pod> -c <container> -n "$namespace" -- bash -c "bash -s" -- "$var" < script.sh
- 错误核心:
-- "$var"的位置错误。--是kubectl用来区分自身参数和容器命令参数的分隔符,此处bash -c "bash -s"是容器内要执行的命令,"$var"应该作为容器内bash -s的参数,但当前写法下"$var"被识别为kubectl的参数,并未传递给容器内的shell。
第三种写法
kubectl exec -i <pod-name> -c <container-name> -n "$namespace" -- bash -c 'bash -s' < script.sh "$var"
- 错误核心:重定向和参数的顺序混乱。
"$var"被解析为kubectl的额外参数,而非传递给容器内bash -s的参数;同时本地脚本的输入重定向没有正确关联到容器内的bash -s进程,导致参数无法被脚本接收。
内容的提问来源于stack exchange,提问作者ryanflynn001
相关产品推荐
相关产品推荐

