Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kubernetes 掌舵人获得分包服务名称_Kubernetes_Yaml_Kubernetes Helm - Fatal编程技术网

Kubernetes 掌舵人获得分包服务名称

Kubernetes 掌舵人获得分包服务名称,kubernetes,yaml,kubernetes-helm,Kubernetes,Yaml,Kubernetes Helm,让helm subchart服务名称引用到位于父图表中的我的入口控制器中的最佳方法是什么 values.yaml --- ingress: paths: - serviceName: app-1 path: /app-1/* port: 8080 - serviceName: app-2 path: /app-2/* port: 8080 ingress.yaml --- {{- range .Values.ingress

让helm subchart服务名称引用到位于父图表中的我的入口控制器中的最佳方法是什么

values.yaml
---
ingress:
  paths:
    - serviceName: app-1
      path: /app-1/*
      port: 8080
    - serviceName: app-2
      path: /app-2/*
      port: 8080


ingress.yaml 
---
{{- range .Values.ingress.paths }}
          - path: {{ .path }}
            backend:
              {{- $subchart := .serviceName -}}
              serviceName: {{- include "$subchart.fullname" .}}
              servicePort: {{ .port }}
        {{- end }}

模板:没有与模板“gotpl”关联的模板“$subchart.fullname”

按版本范围硬编码的subchart名称如何


{{.Release.Name}-

这取决于子图表的定义

例如,
elasticsearch
chart(参见此处)定义了2个服务


两个服务名称都可以声明为value
clusterName

我发现引用服务名称的最佳方法是重写它们正在使用的模板。然而,这样做有一些警告

  • 子图表和图表将具有不同的上下文,因此它们很可能以不同的方式呈现模板
  • 有些东西只对subchart可用
  • 大多数图表在其_helpers.tpl文件中都有类似于下面的模板

    {{/*
    Create a default fully qualified app name.
    We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
    If release name contains chart name it will be used as a full name.
    */}}
    {{- define "newchart.fullname" -}} 
    {{- if .Values.fullnameOverride }}
    {{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }}
    {{- else }}
    {{- $name := default .Chart.Name .Values.nameOverride }}
    {{- if contains $name .Release.Name }}
    {{- .Release.Name | trunc 63 | trimSuffix "-" }}
    {{- else }}
    {{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }}
    {{- end }}
    {{- end }}
    {{- end }}
    
    子图表与图表具有不同的
    。值。当我们通过创建一个类似于subcharts上下文的上下文来呈现这个模板时,我们将修复这个问题

    我们不使用
    上下文调用它,而是通过将
    .Values
    替换为subcharts
    .Values
    来创建一个新上下文

    {{ template "newchart.fullname" (set (deepCopy .) "Values" .Values.newchart }}
    
    我们使用deepCopy,这样我们就不会实际更改
    上下文,而是创建一个新的上下文来使用

    子图表有权访问自己的
    .Chart
    值,我们无法复制这些值。在这种情况下,我们必须将
    .Chart.Name
    的值硬编码到模板中。在这种情况下,我们可以将其替换为图表名称
    newchart


    完成此操作后,子图表上的
    nameOverride
    fullnameOverride
    都将正常工作,而无需手动更改模板文件中的任何内容。

    如果子图表使用
    \u helpers.tpl中的
    fullname
    功能,则可以使用此功能(将
    postgresql
    替换为子图表的名称):


    当名称长度超过X时,它将失败。因为大多数图表都是从模板函数中获取名称的,模板函数会截断集合的名称。
    {{- $fullName := include "postgresql.fullname" (mustMerge (dict "Chart" (dict "Name" "postgresql") "Values" .Values.postgresql) (deepCopy .)) -}}