我正在尝试使用 helm 在 k8s 中部署我的 spring-batch 应用程序。
我的应用程序在资源文件夹中有许多 application.yaml 文件,如下所示:
job:
name: my-job
isActive: true
..... other stuff
现在我创建了一个具有以下骨架的图表模板:
batch
templates
configmap.yaml
job.yaml
pvc.yaml
secret.yaml
serviceaccount.yaml
Chart.yaml
values.yaml
values
test
values.yaml
我的configmap.yaml:
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ include "helm-job.fullname" . }}-config
labels: {{ include "helm-job.labels" . | indent 4 }}
data:
application.yaml: {{ toYaml .Values.application | indent 2 | trim }}
我的价值观.yaml:
application: |-
job:
name: test
我正在使用以下命令安装此图表:
helm升级--安装批处理--命名空间测试--值 ./values/test/values.yaml /values.yaml ./batch
安装命令后,当我尝试使用以下命令查看我的 pod 的环境变量时:
kubectl exec -it mypod -n 测试——环境
我明白了:
job.name 不像 env 变量那样转换,对此有同样的建议吗? 我哪里做错了?
更新
添加
spec:
containers:
env: |+
{{ .Files.Get "values/application.yaml" | indent 4 }}
在我的 job.yaml 中,我收到此错误:
错误:无法从发布清单构建 kubernetes 对象:验证“”时出错:验证数据时出错:ValidationError(Job.spec.template.spec.containers[0].env):io.k8s.api.core 的类型无效。 v1.Container.env:得到“字符串”,期望“数组”
您得到的与您的 Helm 定义一致。
如果要在 pod 内使用环境变量,则应将
env
定义添加到声明 pod 的文件中;在你的情况下,它应该是 job.yaml
文件。因此,添加这些行:
spec:
containers:
env:
- name: {{ .Values.application.name }}
value: {{ .Values.application.value }}
在
values.yaml
文件中声明:
application:
name: JOB_NAME
value: test
或者,您可以使用外部文件
application.yaml
以及名称和值列表:
- name1: JOB1
value: value1
- name: JOB2
value: value2
并将它们加载到
job.yaml
文件中:
spec:
containers:
env: |+
{{ .Files.Get "values/application.yaml" | indent 4 }}