当前位置: 首页 > 知识库问答 >
问题:

多线舵图模板的继承

欧阳安阳
2023-03-14

我想用头盔图和subchart中资源部分的模板将资源设置为吊舱。因为subchart中应该有几个不同的资源模板。我有价值观。亚马尔,主要价值观。yaml和模板/部署。yaml更新舵图的命令是

helm upgrade -i mynamespace ./kubernetes/mynamespace --namespace mynamespace --create-namespace -f kubernetes/mynamespace/main-values.yaml --reset-values

文件被剪切以仅显示一个示例:主值。亚马尔:

namespace: mynamespace
baseUrl: myurl.com
customBranch: dev

components:

  postgresql:
    nodeport: 5432

  elasticsearch:
    nodeport: 9200

resources_minimum:
  requests:
    memory: "100M"
    cpu: "100m"
  limits:
     memory: "300M"
     cpu: "200m"

价值观亚马尔

namespace: 
baseUrl: 
customBranch: 

components:
  service:
    name: service
    image: docker-registry.service.{{ .Values.customBranch }}
    imagePullPolicy: Always
    resources: "{{ .Values.resources_minimum }}"
    tag: latest
    port: 8080
    accessType: ClusterIP
cut

以及部署。亚马尔是

cut
      containers:
        - name: {{ $val.name }}
          securityContext:
            {{- toYaml $.Values.securityContext | nindent 12 }}
          image: "{{ tpl $val.image $ }}:{{ $val.tag | default "latest" }}"
          imagePullPolicy: {{ $val.imagePullPolicy }}
          resources: "{{ tpl $val.resources $ }}"
cut

而且资源的部署部分根本不起作用。然而,中间模板{.Values.customBranch}的图像部分可以工作,而节点端口模板在服务中也可以正常工作。亚马尔

spec:
  type: {{ $val.accessType }}
  ports:
    - port: {{ $val.port }}
      name: mainport
      targetPort: {{ $val.port }}
      protocol: TCP
      {{ if and $val.nodeport  }}
      nodePort:  {{ $val.nodeport }}

我试过$val、toYaml、tpl和plain$。在“部署”的“资源”部分中为选项赋值。yaml并出现了以下错误:

将YAML转换为JSON时出错:YAML:无效的映射键:映射[接口{}]接口{}{.Values.resources_minimum:接口{}(nil)}

将YAML转换为JSON时出错:YAML:第29行:找不到预期的“:”

和其他类似的错误。

是否不可能通过值推送多行资源的yaml值_minimum。yaml需要部署。亚马尔?我应该使用哪种语法?你能建议我阅读哪些文件?

共有2个答案

蔡辰钊
2023-03-14

好啊同事们帮我想出了一个优雅的解决方案。价值观亚马尔:

resource_pool:
  minimum:
    limits:
      memory: "200M"
      cpu: "200m"
    requests:
      memory: "100M"
      cpu: "100m"
...
components:
  service:
    name: service
    image: docker.image
    imagePullPolicy: Always
    tag: latest
    resources_local: minimum

deployment.yaml:

          {{- range $keyResources, $valResources := $.Values.resource_pool }}
            {{- if eq $val.resources_local $keyResources }}
              {{ $valResources | toYaml | nindent 12}}
            {{- end }}
          {{- end }}

有什么建议可以让你熟悉所有的舵手吗?

潘修为
2023-03-14

无法在值中使用模板代码。yaml文件。但是你可以合并多个值。yaml文件以重用配置值。

main-values.yaml

components:
  service:
    image: docker-registry.service.dev
    resources:
      requests:
        memory: "100M"
        cpu: "100m"
        limits:
          memory: "300M"
          cpu: "200m"

价值观亚马尔

components:
  service:
    name: service
    imagePullPolicy: Always
    tag: latest
    port: 8080
    accessType: ClusterIP

如果将其添加到模板中,它将包含两个值文件中的值:

components: {{ deepCopy .Values.components | merge | toYaml | nindent 6 }}
  • mergedeepCopy将合并所有值文件的值
  • toYaml将以yaml语法输出结果
  • 你还必须检查正确的缩进。6只是个猜测

调用helm模板--debug 这甚至会生成无效的yaml输出,您可以轻松检查正确的缩进并查看其他错误。

 类似资料:
  • 问题内容: 我按行业来做html / css,并且我一直作为模板设计者从事django项目的工作。我目前正在使用Jinja2的网站上工作,该网站已经使用了大约2周。通过阅读文档,我发现Jinja2不支持多级模板继承,因为您不能做多个 每个渲染。现在,我非常确定您可以在Django中执行此操作,该功能非常强大,因为您可以指定基本模板,基于该模板指定3或4个模板,然后使用这些基本模板构建页面的内容。继

  • Jinja 最为强大的地方在于他的模板继承功能,模板继承允许你创建一个基础的骨架模板, 这个模板包含您网站的通用元素,并且定义子模板可以重载的 blocks 。 听起来虽然复杂,但是其实非常初级。理解概念的最好方法就是通过例子。 基础模板 在这个叫做 layout.html 的模板中定义了一个简单的 HTML 文档骨架,你可以 将这个骨架用作一个简单的双栏页面。而子模板负责填充空白的 block:

  • 模板继承可以减少页面内容的重复定义,实现页面内容的重用 典型应用:网站的头部、尾部是一样的,这些内容可以定义在父模板中,子模板不需要重复定义 block标签:在父模板中预留区域,在子模板中填充 extends继承:继承,写在模板文件的第一行 定义父模板base.html { % block block_name % } 这里可以定义默认值 如果不定义默认值,则表示空字符串 { %

  • Jade 支持通过 block 和 extends 关键字来实现模板继承。 一个块就是一个Jade的"block" ,它将在子模板中实现,同时是支持递归的。 Jade 块如果没有内容,Jade会添加默认内容,下面的代码默认会输出block scripts, block content, 和 block foot. html head h1 My Site - #{title}

  • 继承 继承能够创建可复用的模板,定义页面的骨架,然后被子模板填充,子模板又可以作为父模板被继承。 继承主要通过两个标签语法实现 <t:template> 定义要继承的父模板 <b:block> 在父模板中用来定义可以被填充的区域;在子模板中用来定义将内容填充到父模板的指定区域 定义父模板 layout.vdt <div> <b:header> <div>父模板头部</div> </

  • 模板继承是 ThinkCMF推荐一种布局方式,它比上一篇讲的模板布局更灵活;模板继承就是你先定义一个基础的模板,在这个基础模板你可以设置很多个区块( block),然后在其它实际要渲染的子模板文件中用 extend标签继承这个基础模板,在子模板中定义name相同的 block,这样就可以对基础模板中定义的区块进行重载; 每个区块都是<block></block>这样的标签,如: <block na