我運行這個作業:
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
相同/空結果:
$ kubectl logs -f sample
BEGIN END
uj5u.com熱心網友回復:
發生這種情況的原因是您的 shell 在將變數${MY_VAR}發送到 kubernetes 之前對其進行了擴展。您可以通過參考終止符來禁用 heredoc 內部的引數擴展:
kubectl apply -f - <<'EOF'
添加這些引號應該可以解決您的問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/458993.html
標籤:重击 Kubernetes 环境变量
