Helm Chart YAML中内部Shell脚本引用的正确性咨询
Helm Chart Shell脚本引用问题解答
背景配置
在用于helm install及Helm Hooks触发的Helm Chart YAML配置文件中,该文件被导入Kubernetes DaemonSet作为配置,脚本会在节点容器内执行,现有配置如下:
data: ex1.sh: | #!/bin/bash -x . /shellscriptloc/ex2.sh ... ex2.sh: | <no bin bash>
问题与解答
Q1:. /shellscriptloc/ex2.sh的路径是否正确?
这个路径不正确,是引发错误的直接原因:
- 当ConfigMap被挂载到DaemonSet的Pod容器中时,
ex2.sh的实际路径由Pod模板里的volumeMounts配置决定,而非你写的/shellscriptloc/ex2.sh。 - 举个例子:如果Pod将该ConfigMap挂载到
/opt/app/scripts目录,那么ex2.sh的实际路径是/opt/app/scripts/ex2.sh,此时引用命令应改为. /opt/app/scripts/ex2.sh。 - 可以通过
kubectl exec进入容器,执行ls <挂载路径>确认文件是否存在,验证路径正确性。
Q2:仅含函数的ex2.sh不写#!/bin/bash是否正确?
完全正确:
ex2.sh是作为函数库被ex1.sh用.(source命令)导入的,不会被直接执行,它的代码会在ex1.sh的bash环境中加载运行。#!/bin/bash(shebang)仅在脚本被直接执行时生效,用来指定解释器。对于被source的脚本,不需要指定shebang,会直接继承父脚本的shell环境。
内容的提问来源于stack exchange,提问作者Lakshmi Narayanan
相关产品推荐
相关产品推荐

