Mounting Kubernetes config map as single file returns error: "caused: mount through procfd: not a directory: unknown"

2/11/2022

This is my pod:

spec:
  containers:
    volumeMounts:
    - mountPath: /etc/configs/config.tmpl
      name: config-main
      readOnly: true
      subPath: config.tmpl
  volumes:
  - configMap:
      defaultMode: 420
      name: config-main
    name: config-main

This is my config map:

apiVersion: v1
kind: ConfigMap
metadata:
  name: config-main
data:
  config.tmpl: |
        # here goes my config content

This produces the following error:

Error: failed to create containerd task: failed to create shim: OCI runtime create failed: container_linux.go:380: starting container process caused: process_linux.go:545: container init caused: rootfs_linux.go:76: mounting "/var/lib/kubelet/pods/dc66ebd1-90ef-4c25-bb69-4b3329f61a5a/volume-subpaths/config-main/podname/1" to rootfs at "/etc/configs/config.tmpl" caused: mount through procfd: not a directory: unknown

The container has pre-existing /etc/configs/config.tmpl file that I want to override

-- chingis
kubernetes

2 Answers

2/11/2022

To mount as file instead of directory try:

spec:
  containers:
    volumeMounts:
    - mountPath: /etc/configs/config.tmpl
      name: config-main
      readOnly: true
      subPath: config.tmpl
  volumes:
  - configMap:
      defaultMode: 420
      items:
      - key: config.tmpl
        path: config.tmpl
      name: config-main
    name: config-main
-- gohm'c
Source: StackOverflow

2/12/2022

I've managed to make it work:

  1. mountPath must be a directory
  2. using subPath didn't work for me, anyway official doc says "using a ConfigMap as a subPath volume mount will not receive ConfigMap updates", which isn't an option for me

so I guess you can't mount a single file, you always mount a directory but then you can optionally limit which files from the configmap's data you want there via items in a volume.

spec:
  containers:
    volumeMounts:
    - mountPath: /etc/configs
      name: config-main
      readOnly: true
  volumes:
  - configMap:
      defaultMode: 420
      name: config-main
    name: config-main
-- chingis
Source: StackOverflow