如何在kubernetes中设置环境变量中mountPath的值?
我使用configMap来存储mount path值,但当我在pod中调用它时,它似乎无法将mountPath属性分配给env变量 这是我的密码:如何在kubernetes中设置环境变量中mountPath的值?,kubernetes,kubernetes-pod,Kubernetes,Kubernetes Pod,我使用configMap来存储mount path值,但当我在pod中调用它时,它似乎无法将mountPath属性分配给env变量 这是我的密码: apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 1 selector: matchLabels: app: nginx template:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
env:
- name: MOUNT_PATH
valueFrom:
configMapKeyRef:
name: my-configMap
key: MOUNT_PATH
volumeMounts:
- name: nginx-volume
mountPath: $(MOUNT_PATH)
volumes:
- name: nginx-volume
persistentVolumeClaim:
claimName: my-pvc
---
apiVersion: v1
kind: ConfigMap
metadata:
name: my-configMap
namespace: default
data:
MOUNT_PATH: "/opt/somepath"
我建议检查本文档中的限制列表,以便将ConfigMaps与POD一起使用: 我想到了几个潜在的问题 首先需要创建ConfigMap,以便Pod可以使用它,因此请确保正在进行
另外,我看到您正在默认名称空间中创建ConfigMap,这是运行Pod的地方吗?它们需要在同一名称空间中。我在实验室中部署了它,在使用kubectl部署某些东西时,不可能在清单上动态定义任何参数 当您定义一个env变量时,只有在pod部署之后,并且在它发生之前,您正在引用它,它才会被访问。因此,当您应用您创建的清单时,没有
$(MOUNT\u PATH)
在任何地方都不存在
您还可以通过使用外部工具helm或kustomize(如@所述)以编程方式实现这一点
当您执行此操作时,容器中的信息是它应该在$(mount\u PATH)
处装入卷
使用Helm,您可以在values.yaml上定义挂载路径,并在清单中使用此变量
关于helm的几个有用链接:
如果您使用的是k8s 1.17或更高版本,则可以实现您想要的功能
env:
- name: MOUNT_PATH
valueFrom:
configMapKeyRef:
name: myconfigmap
key: MOUNT_PATH
volumeMounts:
- name: nginx-volume
mountPath: /opt
subPathExpr: $(MOUNT_PATH)
volumes:
- name: nginx-volume
persistentVolumeClaim:
claimName: my-pvc
---
apiVersion: v1
kind: ConfigMap
metadata:
name: myconfigmap
namespace: default
data:
MOUNT_PATH: "somepath"
容器内的结果:
# ls -l /opt
total 4
drwxrwxrwx 2 root root 4096 Oct 29 14:58 somepath
是的,它在同一个名称空间中,我已经测试了一些其他环境变量,它们可以工作,但是当我将环境变量附加到volumeMounts下的mounPath属性时,它就不工作了——可能是PodPreset?看起来您可以根据标签选择器选择一个。好的,环境变量是用于容器中运行的进程的,在部署时不进行评估。再次提醒您,使用configmap无法完成您要做的事情。@BurakSerdar是否有其他方法可以动态传递mountPath值?您可以在部署期间使用kustomize进行设置
# ls -l /opt
total 4
drwxrwxrwx 2 root root 4096 Oct 29 14:58 somepath