Kubernetes-如何定义使用yaml中的文件构建的ConfigMap



目前我正在通过执行以下命令从config.json文件创建一个configmap

kubectl create configmap jksconfig --from-file=config.json

我希望ConfigMap被创建作为部署的一部分,并尝试这样做:

apiVersion: v1
kind: ConfigMap
metadata:
name: jksconfig
data:
config.json: |-
{{ .Files.Get "config.json" | indent 4 }}

但似乎不起作用。configmap.yaml中应该包含什么,以便创建相同的configmap?

---更新---

当我进行头盔安装试运行时:

# Source: mychartv2/templates/jks-configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: jksconfig
data:
config.json: |

注意:我使用minikube作为我的kubernetes集群

您的config.json文件应该在mychart/目录中,而不是在mychart/templates

图表模板指南

configmap.yaml

apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .Release.Name }}-configmap
data:
config.json: |-
{{ .Files.Get "config.json" | indent 4}}

config.json

{
"val": "key"
}

helm install --dry-run --debug mychart

[debug] Created tunnel using local port: '52091'     

[debug] SERVER: "127.0.0.1:52091"                    

...           

NAME:   dining-saola                                 
REVISION: 1                                          
RELEASED: Fri Nov 23 15:06:17 2018                   
CHART: mychart-0.1.0                                 
USER-SUPPLIED VALUES:                                
{}                                                   

...

---                                                  
# Source: mychart/templates/configmap.yaml           
apiVersion: v1                                       
kind: ConfigMap                                      
metadata:                                            
name: dining-saola-configmap                       
data:                                                
config.json: |-                                    
{                                                
"val": "key"                                 
}     

编辑:

但我希望config.json文件中的值取自values.yaml。这可能吗?

configmap.yaml

apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .Release.Name }}-configmap
data:
config.json: |-
{
{{- range $key, $val := .Values.json }}
{{ $key | quote | indent 6}}: {{ $val | quote }}
{{- end}}
}

值.yaml

json:
key1: val1
key2: val2
key3: val3

helm install --dry-run --debug mychart

# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: mangy-hare-configmap
data:
config.json: |-
{
"key1": "val1"
"key2": "val2"
"key3": "val3"
}

以下是连接到Deployment:的ConfigMap的示例

ConfigMap:

---
apiVersion: v1
kind: ConfigMap
metadata:
name: jksconfig
data:
config.json: |-
{{ .Files.Get "config.json" | indent 4 }}

部署:

---
apiVersion: apps/v1beta2
kind: Deployment
metadata:
name: jksapp
labels:
app: jksapp
spec:
selector:
matchLabels:
app: jksapp
template:
metadata:
labels:
app: jksapp
containers:
- name: jksapp
image: jksapp:1.0.0
ports:
- containerPort: 8080
volumeMounts:
- name: config #The name(key) value must match pod volumes name(key) value 
mountPath: /path/to/config.json
volumes:
- name: config
configMap:
name: jksconfig

Soln 01:

  • config.json文件内容插入到模板中
  • 然后将此模板用于dataconfig.json
  • 然后运行$ helm install命令

最后,

{{define "config"}}
{
"a": "A",
"b": {
"b1": 1
}
}
{{end}}
apiVersion: v1
kind: ConfigMap
metadata:
name: jksconfig
labels:
chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
app: "my-app"
heritage: "{{ .Release.Service }}"
release: "{{ .Release.Name }}"
data:
config.json: {{ (include "config" .) | trim | quote }}

最新更新