如何使用配置映射在容器中创建单个文件?

How to use a config map to create a single file within container?

我正在尝试在 Openshift 上配置 Nginx 容器。我的最终目标是覆盖 Nginx 配置文件。我知道可以使用配置映射。因为修改 Nginx 配置目录的任何失败都会导致容器崩溃,暂时我的目标是在 /opt/app-root/src 目录中创建一个 index.html 文件。

我面临两个问题,具体取决于配置

配置图:

apiVersion: v1
data:
  index: |-
    <html>
    <body>
    yo yo!
    </body>
    </html>
kind: ConfigMap
metadata:
  creationTimestamp: '2020-01-16T12:53:25Z'
  name: index-for-nginx
  namespace: some-namespace

部署配置(部分,与主题相关):

spec:
  containers:
    - image: someimage
      ...
      volumeMounts:
        - mountPath: /opt/app-root/src/index.html
          name: index
  volumes:
    - configMap:
        defaultMode: 420
        name: index-for-nginx
      name: index

时间:

volumeMounts:
            - mountPath: /opt/app-root/src/index.html

它在 /opt/app-root/src

中创建 index.html 目录和索引文件(具有适当的内容)

时间:

volumeMounts:
            - mountPath: /opt/app-root/src/

覆盖/opt/app-root/src目录

我的问题是 - 我应该如何配置它以在 /opt/app-root/src 中创建 index.html 文件而不覆盖目录?

您可以使用subPath挂载您想要的单个文件。

volumeMounts:
  - mountPath: /opt/app-root/src/index.html
    subPath: index
    name: index

https://kubernetes.io/docs/concepts/storage/volumes/#using-subpath

您可以执行以下操作,摘自此 GitHub 问题

containers:
- volumeMounts:
  - name: config-volumes
    mountPath: /opt/app-root/src/index.html
    subPath: index
volumes:
- name: config-volumes
  configMap:
    name: index-for-nginx

注意:使用 ConfigMap 作为子路径卷的容器将不会收到 ConfigMap 更新。