如何通过环境变量在Kubernetes中创建3个pi-1/2/3命名的Job?
问题解答
不行,你当前的方式无法创建出pi-1、pi-2、pi-3这三个Job。原因是:bash不会自动替换job.yaml文件内容里的$count变量,kubectl也不会解析配置文件中的shell环境变量,所以三次执行kubectl apply都会尝试创建名为pi-$count的Job(变量不会被替换),最终只会得到一个Job(后两次执行是更新同一个Job)。
要实现需求,你可以通过以下几种方式修改部署脚本:
方法一:使用
envsubst替换变量
利用envsubst工具将环境变量的值替换到配置文件中,再传给kubectl执行:for i in {1..3} do count=$i envsubst < job.yaml | kubectl apply -f - done注意:
job.yaml保持你原来的内容即可,envsubst会自动识别并替换其中的$count变量。方法二:使用
sed命令替换文本
在循环中用sed直接替换配置文件里的$count为当前循环的i值:for i in {1..3} do sed "s/\$count/$i/" job.yaml | kubectl apply -f - done方法三:直接在脚本中生成Job配置(无需单独的job.yaml)
用here-doc在循环内直接生成带变量的Job配置,避免文件读取的问题:for i in {1..3} do kubectl apply -f - <<EOF apiVersion: batch/v1 kind: Job metadata: name: pi-$i spec: template: spec: containers: - name: pi image: perl:5.34.0 command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"] restartPolicy: Never backoffLimit: 4 EOF done
内容的提问来源于stack exchange,提问作者jipot
相关产品推荐
相关产品推荐

