所以我正在尝试构建一个掌舵图。
在我的模板文件中,我有一个像:
这样的文件apiVersion: v1
kind: ConfigMap
metadata:
name: config-map
data:
{{ Do something here to load up a set of files | indent 2 }}
我的图表中有另一个目录:configmaps
其中有一组json文件,它们本身将包含模板化变量:
a.json
b.json
c.json
最后,我想在我的图表中确定我可以参考:
volumes:
- name: config-a
configMap:
name: config-map
items:
- key: a.json
path: a.json
答案 0 :(得分:6)
几周前,我在将文件和模板直接添加到容器中时遇到了同样的问题。
查找示例语法:
apiVersion: v1
kind: ConfigMap
metadata:
name: nginx-configmap-{{ .Release.Name }}
namespace: {{ .Release.Namespace }}
labels:
chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
release: {{ .Release.Name }}
heritage: {{ .Release.Service }}
data:
nginx_conf: {{ tpl (.Files.Get "files/nginx.conf") . | quote }}
ssl_conf: {{ tpl (.Files.Get "files/ssl.conf") . | quote }}
dhparam_pem: {{ .Files.Get "files/dhparam.pem" | quote }}
fastcgi_conf: {{ .Files.Get "files/fastcgi.conf" | quote }}
mime_types: {{ .Files.Get "files/mime.types" | quote }}
proxy_params_conf: {{ .Files.Get "files/proxy_params.conf" | quote }}
第二步是从部署中引用它:
volumes:
- name: {{ $.Release.Name }}-configmap-volume
configMap:
name:nginx-configmap-{{ $.Release.Name }}
items:
- key: dhparam_pem
path: dhparam.pem
- key: fastcgi_conf
path: fastcgi.conf
- key: mime_types
path: mime.types
- key: nginx_conf
path: nginx.conf
- key: proxy_params_conf
path: proxy_params.conf
- key: ssl_conf
path: ssl.conf
现在是实际的。在这里,您可以找到两种导入类型:
请不要忘记阅读官方文档: https://github.com/helm/helm/blob/master/docs/chart_template_guide/accessing_files.md
祝你好运!
答案 1 :(得分:1)
包括目录config-dir/
中带有{{ range ..
的所有文件:
my-configmap.yaml:
apiVersion: v1
kind: ConfigMap
metadata:
name: my-configmap
data:
{{- $files := .Files }}
{{- range $key, $value := .Files }}
{{- if hasPrefix "config-dir/" $key }} {{/* only when in config-dir/ */}}
{{ $key | trimPrefix "config-dir/" }}: {{ $files.Get $key | quote }} {{/* adapt $key as desired */}}
{{- end }}
{{- end }}
my-deployment.yaml
apiVersion: apps/v1
kind: Deployment
...
spec:
template:
...
spec:
containers:
- name: my-pod-container
...
volumeMounts:
- name: my-volume
mountPath: /config
readOnly: true # is RO anyway for configMap
volumes:
- name: my-volume
configMap:
name: my-configmap
# defaultMode: 0555 # mode rx for all
答案 2 :(得分:0)
我假设a.json,b.json,c.json等是已定义的列表,并且您知道所有内容(除了要通过模板变量设置为值的位)。我还假设您只想向用户公开文件的部分内容,而不是让用户配置整个文件的内容。 (但是,如果我认为错误,并且您确实希望用户设置整个文件内容,那么对我来说,hypnoglow的@ following the datadog chart的建议对我来说是一个好建议。)如果是这样,我建议最简单的方法是:
apiVersion: v1
kind: ConfigMap
metadata:
name: config-map
data:
a.json:
# content of a.json in here, including any templated stuff with {{ }}
b.json:
# content of b.json in here, including any templated stuff with {{ }}
c.json:
# content of c.json in here, including any templated stuff with {{ }}
我猜您想将其挂载到同一目录。使用不同的configmap可能会很干净,但是that would then be a problem for mounting to the same directory.也很高兴能够使用.Files.Glob独立加载文件,从而能够引用文件而不必将整个内容放入文件中。 configmap但是I don't think you can do that and still use templated variables in them ...但是,您可以使用Files.Get来完成,以字符串形式读取文件内容,然后将其传递给tpl以通过模板引擎将其通过,如@Oleg Mykolaichenko在{{3 }}。我建议大家投票给他,因为这是更好的解决方案。我只在这里留下我的答案,因为它解释了为什么他的建议如此好,有些人可能更喜欢不太抽象的方法。