首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >helm模板输出,显示未解析的值

helm模板输出,显示未解析的值
EN

Stack Overflow用户
提问于 2021-02-11 18:44:56
回答 1查看 3.2K关注 0票数 1

我对海图和K8s并不熟悉,所以请原谅我。我正在做一个项目,它部署了一个应用程序项目,其中包含了几个应用程序。把图表放在一起的前一个开发工具是使用“查找和替换”技术来填充诸如图像存储库、标签等的值。这使得我们的CICD管道开发变得棘手和不可扩展。我正在尝试更新图表以使用变量和values.yml文件。它似乎大部分都在工作,值被传递到模板中,除了一个部分之外,我不知道为什么。这是一个大项目,所以我不会复制所有的图表文件。我将试着列出重要的部分:

文件夹结构:

代码语言:javascript
复制
helm
  project1
     dev
       charts
          app1
            templates
               *template files
            Chart.yaml
            values.yaml
          app2
            *same subfolders
          app3
            *same subfolders
       Chart.yml
       values.yml

碱Values.yml

代码语言:javascript
复制
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文件

代码语言:javascript
复制
app:
  image: 
    repository: "{{ .Values.artifactory_base_url }}/pingaccess"
    tag: "{{ .Values.pa_tag }}"

deployment.yml模板文件

代码语言:javascript
复制
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文件中定义的值也是在其他领域中传递的,如下例所示:

代码语言:javascript
复制
initContainers:
  - name: appinitcontainer
      image: "company.repo.io/repo_folder/initcontainer:latest"

但是有一部分是从deployment.yml模板文件中填充的,它仍然显示变量的大括号。

代码语言:javascript
复制
containers:
  - name: app1
    image: "map[repository:{{ .Values.image_repo_base_url }}/app1 tag:{{ .Values.app1_tag }}]"
    imagePullPolicy: Always

我尝试在上面提到的所有文件中进行修改,以删除引号、使用单引号等。在这些尝试中,我通常会得到以下错误的变体:“错误将yaml转换为json.。没有找到预期的键”“错误映射值”

我一直没能找到解决办法。我假设"helm template“命令不应该包含任何类似的大括号,所有变量和值都应该解析。我希望有人能提供一些我可能丢失的东西的提示。

EN

回答 1

Stack Overflow用户

发布于 2021-02-14 00:33:10

你在这里碰到两个问题。首先,.Values.app.image是一个包含repositorytag两个键的映射;这就是为什么输出中有奇怪的map[repository:... tag:...]语法。其次,values.yaml中的字符串值不会被重新解释为Helm模板语法;这就是为什么{{ ... }}标记被传递到输出。

这反过来意味着你需要做两件事。要解析映射,请从字典的内容构造字符串;若要解析字符串值中的模板标记,请使用Helm的tpl函数。

代码语言:javascript
复制
{{- $repository := tpl .Values.app.image.repository . }}
{{- $tag := tpl .Values.app.image.tag . }}
image: "{{ $repository }}:{{ $tag }}"

(您可能会发现将“存储库”、“注册表”或“图像”和“标记”分成三个单独的部分是有用的,因为您的所有映像可能都来自同一个存储库;这将使您能够在一个地方配置存储库并自定义每个组件的图像名称。bitnami/postgresql图表就是这种设置的一个例子。)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66160890

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档