我正在寻找一种在 configmap 的数据部分获取环境变量的方法。在下面的 yml 配置中,我分配了 $NODE_NAME 这对我没有帮助。有什么办法可以完成这项工作吗
apiVersion: v1
kind: ConfigMap
metadata:
name: config
namespace: kube-system
data:
test.conf: |
{
"push": 5,
"test": $NODE_NAME
}
Run Code Online (Sandbox Code Playgroud)
Mat*_*att 14
实现此目的的一种方法是使用 envsubst,如下所示:
$ export NODE_NAME=my-node-name
$ cat << EOF | envsubst | kubectl apply -f-
apiVersion: v1
kind: ConfigMap
metadata:
name: config
namespace: kube-system
data:
test.conf: |
{
"push": 5,
"test": $NODE_NAME
}
EOF
Run Code Online (Sandbox Code Playgroud)
但是 sth 告诉我你想在 pod 中使用它并使用环境变量填充配置。
看看这个例子:
apiVersion: v1
kind: ConfigMap
metadata:
name: config
namespace: kube-system
data:
test.conf: |
{
"push": 5,
"test": $NODE_NAME
}
---
apiVersion: v1
kind: Pod
metadata:
labels:
run: example-pod
name: example-pod
spec:
initContainers:
- args:
- sh
- -c
- cat /test.conf | envsubst > /data/test.conf
image: bhgedigital/envsubst
name: envsubst
env:
- name: NODE_NAME
valueFrom:
fieldRef:
fieldPath: spec.nodeName
volumeMounts:
- mountPath: /data
name: data-volume
- mountPath: /test.conf
subPath: test.conf
name: config-volume
containers:
- image: busybox
name: busybox
args:
- sleep
- "1000"
volumeMounts:
- mountPath: /data
name: data-volume
volumes:
- name: data-volume
emptyDir: {}
- name: config-volume
configMap:
name: config
Run Code Online (Sandbox Code Playgroud)
当您应用上述 yaml 时,您可以检查文件是否被正确替换,如下所示:
$ kubectl exec -it example-pod -- cat /data/test.conf
{
"push": 5,
"test": minikube
}
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,我正在 minikube 中测试它(因此在我的例子中,nodeName = minikube)
| 归档时间: |
|
| 查看次数: |
17228 次 |
| 最近记录: |