Env var 在 scipt/command 中不可用(Kubernetes)
Env var not available in scipt/command in a kind Job (Kubernetes)
我运行这份工作:
kubectl apply -f - <<EOF
apiVersion: batch/v1
kind: Job
metadata:
name: sample
spec:
template:
spec:
containers:
- command:
- /bin/bash
- -c
- |
env
echo "MY_VAR : ${MY_VAR}"
sleep 800000
env:
- name: MY_VAR
value: MY_VALUE
image: mcr.microsoft.com/azure-cli:2.0.80
imagePullPolicy: IfNotPresent
name: sample
restartPolicy: Never
backoffLimit: 4
EOF
但是当我查看日志时,值 MY_VALUE
是空的,即使 env
打印它:
$ kubectl logs -f sample-7p6bp
...
MY_VAR=MY_VALUE
...
MY_VAR :
为什么此行包含 ${MY_VAR}
的空值:
echo "MY_VAR : ${MY_VAR}"
?
更新: 用一个简单的 pod 进行同样的尝试:
kubectl -f - <<EOF
apiVersion: v1
kind: Pod
metadata:
name: sample
spec:
containers:
- name: sample
imagePullPolicy: Always
command: ["/bin/sh", "-c", "echo BEGIN ${MY_VAR} END"]
image: radial/busyboxplus:curl
env:
- name: MY_VAR
value: MY_VALUE
EOF
Same/empty 结果:
$ kubectl logs -f sample
BEGIN END
发生这种情况的原因是因为您的 shell 在将变量 ${MY_VAR}
发送到 kubernetes 之前对其进行了扩展。您可以通过引用终止符来禁用 heredoc 内部的参数扩展:
kubectl apply -f - <<'EOF'
添加这些引号应该可以解决您的问题。
我运行这份工作:
kubectl apply -f - <<EOF
apiVersion: batch/v1
kind: Job
metadata:
name: sample
spec:
template:
spec:
containers:
- command:
- /bin/bash
- -c
- |
env
echo "MY_VAR : ${MY_VAR}"
sleep 800000
env:
- name: MY_VAR
value: MY_VALUE
image: mcr.microsoft.com/azure-cli:2.0.80
imagePullPolicy: IfNotPresent
name: sample
restartPolicy: Never
backoffLimit: 4
EOF
但是当我查看日志时,值 MY_VALUE
是空的,即使 env
打印它:
$ kubectl logs -f sample-7p6bp
...
MY_VAR=MY_VALUE
...
MY_VAR :
为什么此行包含 ${MY_VAR}
的空值:
echo "MY_VAR : ${MY_VAR}"
?
更新: 用一个简单的 pod 进行同样的尝试:
kubectl -f - <<EOF
apiVersion: v1
kind: Pod
metadata:
name: sample
spec:
containers:
- name: sample
imagePullPolicy: Always
command: ["/bin/sh", "-c", "echo BEGIN ${MY_VAR} END"]
image: radial/busyboxplus:curl
env:
- name: MY_VAR
value: MY_VALUE
EOF
Same/empty 结果:
$ kubectl logs -f sample
BEGIN END
发生这种情况的原因是因为您的 shell 在将变量 ${MY_VAR}
发送到 kubernetes 之前对其进行了扩展。您可以通过引用终止符来禁用 heredoc 内部的参数扩展:
kubectl apply -f - <<'EOF'
添加这些引号应该可以解决您的问题。