だから私はヘルムチャートを作成しようとしています。
私のテンプレートファイルには次のようなファイルがあります:
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
数週間前に、ファイルとテンプレートをコンテナに直接追加することで同じ問題が発生しました。
サンプル構文を探します。
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 }}
2番目のステップは、デプロイメントから参照することです。
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
それは今のところ実際のものです。ここには2種類のインポートがあります。
公式ドキュメントを必ずお読みください: https://github.com/helm/helm/blob/master/docs/chart_template_guide/accessing_files.md
幸運を!
私は、a.json、b.json、c.jsonなどが定義済みのリストであり、すべての内容(テンプレート変数を介して値として設定するビットを除く)を知っていると想定しています。また、ファイルのコンテンツの一部のみをユーザーに公開し、ユーザーにファイルコンテンツ全体を構成させたくない場合も想定しています。 (しかし、私が間違っていると仮定し、ユーザーがファイル全体のコンテンツを設定できるようにしたい場合、@ hypnoglow からの提案 データドッグチャートに従う は私には良いようです1)もしそうなら、私はそれを行う最も簡単な方法を行うことをお勧めします:
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 {{ }}
同じディレクトリにマウントしたいと思います。クリーン度が異なるconfigmapsを使用するのは魅力的ですが、 それは同じディレクトリにマウントする場合の問題になります .Files.Globを使用してファイルを個別にロードできることもいいでしょう内容全体をconfigmapに入れなくてもファイルを参照できますが、 それができるとは思いませんが、テンプレート変数を使用できます ...ただし、次のようにできますFiles.Get @Oleg Mykolaichenkoが示唆しているように、ファイルの内容を文字列として読み取り、それをtplに渡してテンプレートエンジンに渡します https://stackoverflow.com/a/52009992/9705485 。それがより良い解決策であるため、私は誰もが彼の答えに投票することをお勧めします。私の答えはここに残しておきます。彼の提案がなぜそれほど優れているのかを説明しており、一部の人々はあまり抽象的なアプローチを好まないかもしれないからです。
ディレクトリ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