无法为 volumeMount 准备子路径

Failed to prepare subPath for volumeMount

收到此错误。

Error: failed to prepare subPath for volumeMount "solr-collection-config" of container "upload-config-container"

使用 kubernetes 1.10.11

- name: upload-config-container image: solr:7.4.0-alpine imagePullPolicy: Always resources: requests: memory: "128Mi" cpu: "100m" limits: memory: "256Mi" cpu: "200m" volumeMounts: - name: solr-collection-config mountPath: /tell/carbon/conf subPath: conf

solr-collection-config是一个代表ConfigMap

的卷

volumes: - name: solr-collection-config configMap: name: solr-collection-resources items: - key: stopwords_en.txt path: "conf/lang/stopwords_en.txt" - key: _rest_managed.json path: "conf/_rest_managed.json" - key: currency.xml path: "conf/currency.xml" - key: protwords.txt path: "conf/protwords.txt" - key: schema.xml path: "conf/schema.xml" - key: solrconfig.xml path: "conf/solrconfig.xml" - key: stopwords.txt path: "conf/stopwords.txt" - key: synonyms.txt path: "conf/synonyms.txt" restartPolicy: Never

非常感谢您的帮助。谢谢

如果不使用 subPath 会怎样?

来自 configMap 的所有密钥都将安装在目录 /tell/carbon/conf 中。这意味着,每个密钥都将是该目录下的一个单独文件。

现在,subPath 有什么作用?根据您的示例,

volumeMounts:
  - name: solr-collection-config
    mountPath: /tell/carbon/conf
    subPath: conf

意味着,来自 configMap 的密钥 conf 将作为文件 conf 安装在 /tell/carbon 目录下。

但是,您没有这个密钥。所以得到这个错误。

Error: failed to prepare subPath for volumeMount "solr-collection-config" of container "upload-config-container"

现在,你可以这样做

volumeMounts:
  - name: solr-collection-config
    mountPath: /tell/carbon/conf
    subPath: stopwords_en.txt

这意味着,configMapstopwords_en.txt 的值将作为 conf 文件安装在 /tell/carbon.

最后一句话,这个 subPath 实际上是一条来自 volume 的路径,来自您的数据来源。在您的情况下,subPath 应该是 configMap

中的关键之一