我对海图和K8s并不熟悉,所以请原谅我。我正在做一个项目,它部署了一个应用程序项目,其中包含了几个应用程序。把图表放在一起的前一个开发工具是使用“查找和替换”技术来填充诸如图像存储库、标签等的值。这使得我们的CICD管道开发变得棘手和不可扩展。我正在尝试更新图表以使用变量和values.yml文件。它似乎大部分都在工作,值被传递到模板中,除了一个部分之外,我不知道为什么。这是一个大项目,所以我不会复制所有的图表文件。我将试着列出重要的部分:
文件夹结构:
helm
project1
dev
charts
app1
templates
*template files
Chart.yaml
values.yaml
app2
*same subfolders
app3
*same subfolders
Chart.yml
values.yml碱Values.yml
artifactory_base_url: company.repo.io/repo_folder
imageversions:
app1_tag: 6.1.2-alpine-edge
app2_tag: 8.1.0.0-edge
app3_tag: 8.1.0.0-alpine-edge
app4_tag: 10.1.1-alpine-edge
initcontainer: latest应用程序Values.yml文件
app:
image:
repository: "{{ .Values.artifactory_base_url }}/pingaccess"
tag: "{{ .Values.pa_tag }}"deployment.yml模板文件
containers:
- name: {{ .Chart.Name }}
image: "{{ .Values.app.image }}"在实际部署到app1集群之前,我正在运行以下helm模板命令,以确认至少在k8s部件上获得了正确的输出。
helm template app1 --set date="$EPOCHSECONDS" --set namespace='porject_namespace' --values helm/project1/dev/values.yaml helm/project1/dev/charts/app1
大多数得到的yaml看起来都很棒,而且我在基本values.yml文件中定义的值也是在其他领域中传递的,如下例所示:
initContainers:
- name: appinitcontainer
image: "company.repo.io/repo_folder/initcontainer:latest"但是有一部分是从deployment.yml模板文件中填充的,它仍然显示变量的大括号。
containers:
- name: app1
image: "map[repository:{{ .Values.image_repo_base_url }}/app1 tag:{{ .Values.app1_tag }}]"
imagePullPolicy: Always我尝试在上面提到的所有文件中进行修改,以删除引号、使用单引号等。在这些尝试中,我通常会得到以下错误的变体:“错误将yaml转换为json.。没有找到预期的键”“错误映射值”
我一直没能找到解决办法。我假设"helm template“命令不应该包含任何类似的大括号,所有变量和值都应该解析。我希望有人能提供一些我可能丢失的东西的提示。
发布于 2021-02-14 00:33:10
你在这里碰到两个问题。首先,.Values.app.image是一个包含repository和tag两个键的映射;这就是为什么输出中有奇怪的map[repository:... tag:...]语法。其次,values.yaml中的字符串值不会被重新解释为Helm模板语法;这就是为什么{{ ... }}标记被传递到输出。
这反过来意味着你需要做两件事。要解析映射,请从字典的内容构造字符串;若要解析字符串值中的模板标记,请使用Helm的tpl函数。
{{- $repository := tpl .Values.app.image.repository . }}
{{- $tag := tpl .Values.app.image.tag . }}
image: "{{ $repository }}:{{ $tag }}"(您可能会发现将“存储库”、“注册表”或“图像”和“标记”分成三个单独的部分是有用的,因为您的所有映像可能都来自同一个存储库;这将使您能够在一个地方配置存储库并自定义每个组件的图像名称。bitnami/postgresql图表就是这种设置的一个例子。)
https://stackoverflow.com/questions/66160890
复制相似问题