如何在 kubernetes 的环境变量中设置 mountPath 的值?

tou*_*med 3 kubernetes kubernetes-pod

我使用 configMap 来存储挂载路径值,但是当我调用 pod 时,它不起作用,似乎无法将 mountPath 属性分配给环境变量。

这是我的代码:

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"
Run Code Online (Sandbox Code Playgroud)

Dan*_*ues 5

如果您使用 k8s 1.17 或更高版本,您可以使用subPath实现您想要的效果。

    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"
Run Code Online (Sandbox Code Playgroud)

容器内的结果:

# ls -l /opt
total 4
drwxrwxrwx    2 root     root          4096 Oct 29 14:58 somepath
Run Code Online (Sandbox Code Playgroud)