helm-读取配置文件到ConfigMap并映射到容器中
- 未分类
- 2024-08-30
- 43热度
- 0评论
背景
有个 tomcat 镜像,开发想改 tomcat/conf/web.xml 文件进行问题调试,为了避免调试过程中反复打镜像,所以定了将 web.xml
文件作为 key-value 写入 ConfigMap
内,再将 key-value 读出映射到容器内的文件。
操作
chart 文件结构
.
|-- example
| |-- Values.yaml
| |-- Chart.yaml
| |-- conf
| | |-- web.xml # 这是 tomcat 的 web.xml 文件
| |-- templates
| | |-- deployment.yaml
| | |-- configmap.yaml
| | |-- service.yaml
ConfigMap.yaml
做如下配置,会在配置中生成一个 key=web.xml,value=<web.xml文件中内容> 的键值对配置。
apiVersion: v1
kind: ConfigMap
metadata:
name: config
data:
{{ (.Files.Glob "conf/web.xml").AsConfig | indent 2 }}
port: 3001
env: dev
..其他的配置键值对
Deployment.yaml
做如下配置,主要是定义一个卷,此卷从 configMap 读取配置;再在容器中将此卷挂载,定义子路径
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: {{ template "fullname" . }}
labels:
app: {{ template "name" . }}
spec:
replicas: {{ .Values.replicaCount }}
template:
metadata:
labels:
app: {{ template "name" . }}
release: {{ .Release.Name }}
spec:
imagePullSecrets:
- name: {{ .Values.image.secret }}
volumes:
- name: conf-volume
configMap:
name: config
containers:
- name: {{ .Chart.Name }}
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
volumeMounts:
- name: conf-volume
mountPath: /usr/local/tomcat/conf/web.xml
subPath: web.xml
存在问题
java 应用,configMap 中的 k-v 都是作为环境变量注入启动参数的,web.xml 文件内容非常大,有四千多行,在容器启动的时候,提示参数太长,jvm无法启动,最终还是走了重新打镜像的方案,,,因是调试下功能,所以没选择给挂载存储卷的方案。