如何使用configmap在Kubernetes中挂载整个目录?

Joh*_*erg 5 docker kubernetes

我希望能够在/ etc / configs中挂载未知数量的配置文件

我使用以下命令将一些文件添加到configmap中:

kubectl创建configmap etc-configs --from-file = / tmp / etc-config

文件数量和文件名永远不会知道,我想重新创建configmap,并且Kubernetes容器中的文件夹应在同步间隔后更新。

我尝试挂载此文件,但无法这样做,该文件夹始终为空,但是configmap中有数据。

bofh$ kubectl describe configmap etc-configs
Name:         etc-configs
Namespace:    default
Labels:       <none>
Annotations:  <none>

Data
====
file1.conf:
----
{
 ... trunkated ...
}
file2.conf:
----
{
 ... trunkated ...
}
file3.conf:
----
{
 ... trunkated ...
}

Events:  <none>
Run Code Online (Sandbox Code Playgroud)

我在容器volumeMounts中使用这个:

- name: etc-configs
  mountPath: /etc/configs
Run Code Online (Sandbox Code Playgroud)

这是卷:

- name: etc-configs
  configMap:
    name: etc-configs
Run Code Online (Sandbox Code Playgroud)

我可以挂载单个项目,但不能挂载整个目录。

有什么建议如何解决这个问题?

Joh*_*erg 5

我现在感觉真的很傻。

对不起,我的错。

Docker 容器没有启动,所以我使用 docker run -it --entrypoint='/bin/bash' 手动启动它,但我看不到 configMap 中的任何文件。

这不起作用,因为在 Kubernetes 启动之前 docker 对我的部署一无所知。

docker 镜像失败,Kubernetes 配置一直正确。

我调试错了。


sol*_*ola 5

您可以将 ConfigMap 作为特殊卷安装到您的容器中。

在这种情况下,挂载文件夹会将每个键显示为挂载文件夹中的一个文件,并且这些文件将地图值作为内容。

来自Kubernetes 文档

apiVersion: v1
kind: Pod
metadata:
  name: dapi-test-pod
spec:
  containers:
    - name: test-container
      image: k8s.gcr.io/busybox
...
      volumeMounts:
      - name: config-volume
        mountPath: /etc/config
  volumes:
    - name: config-volume
      configMap:
        # Provide the name of the ConfigMap containing the files you want
        # to add to the container
        name: special-config
Run Code Online (Sandbox Code Playgroud)


Nic*_*Ben 4

通过您的配置,您将挂载配置映射中列出的每个文件。

如果需要挂载文件夹中的所有文件,则不应使用 configmap,而应使用 persistenceVolume 和 persistenceVolumeClaims:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-volume-jenkins
spec:
  capacity:
    storage: 50Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/data/pv-jenkins"
Run Code Online (Sandbox Code Playgroud)
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pv-claim-jenkins
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: ""
  resources:
    requests:
      storage: 50Gi
Run Code Online (Sandbox Code Playgroud)

在您的部署.yml 中:

 volumeMounts:
        - name: jenkins-persistent-storage
          mountPath: /data

  volumes:
        - name: jenkins-persistent-storage
          persistentVolumeClaim:
            claimName: pv-claim-jenkins
Run Code Online (Sandbox Code Playgroud)

您还可以使用以下内容:

kubectl create configmap my-config --from-file=/etc/configs
Run Code Online (Sandbox Code Playgroud)

使用该文件夹中的所有文件创建配置映射。

希望这可以帮助。

  • 您好,但我想挂载 configMap 中的每个文件,因为我们正在从第 3 方系统填充 configMap。 (2认同)