Helm 中如何在另一个子图中使用一个子图的参数

问题描述 投票:0回答:1

我有一个 Helm 图表,其中包含两个子图表:

charts/subchart1
charts/subchart2
。 每个子图都有自己的
values.yaml
templates/deployment.yaml
和类似文件。

在父图表的

values.yaml
文件中,我使用的参数如下:

subchart1:
  serverPort: 1234

我可以使用 subchart1 中的这个值。

但是,我想在

subchart2/templates/service.yaml
文件中使用相同的值。 使用
{{ .Values.subchart1.serverPort }}
访问无效。 有什么办法可以访问吗?

kubernetes kubernetes-helm
1个回答
1
投票

这是可以实现的,但是会比较复杂。

❗❗❗ 您可能需要先学习一些概念。

  1. 子图和全局值
  2. 依赖
  3. 出口和进口值

这是一个例子:

演示结构

multi
├── Chart.yaml
├── charts
│   ├── sub0
│   │   ├── Chart.yaml
│   │   ├── charts
│   │   ├── templates
│   │   │   └── configmap.yaml
│   │   └── values.yaml
│   └── sub1
│       ├── Chart.yaml
│       ├── charts
│       ├── templates
│       │   └── configmap.yaml
│       └── values.yaml
├── templates
│   └── configmap.yaml
└── values.yaml
  • multi:父图表
  • sub0:子图0
  • sub1:cub-chart 1

我们将展示如何在

test1: t1
中使用
sub1
,其定义在
sub0

multi/charts/sub0/templates/configmap.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-cm
data:
  sub0: {{ .Values.sub0 }}
  g0: {{ .Values.global.test0 }}
  g1: {{ .Values.global.test1 }}

multi/charts/sub0/values.yaml

sub0: sub0

global:
  test0: t0

exports:
  data:
    global:
      test1: t1

multi/charts/sub1/templates/configmap.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-cm
data:
  sub1: {{ .Values.sub1 }}
  g1: {{ .Values.global.test1 }}
  g2: {{ .Values.global.test2 }}

multi/charts/sub1/values.yaml

sub1: sub1

multi/templates.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-cm
data:
  dessert: {{ .Values.parent }}
  g1: {{ .Values.global.test1 }}
  g2: {{ .Values.global.test2 }}

multi/values.yaml

parent: parent

global:
  test2: t2

❗ 多/Chart.yaml

apiVersion: v2
name: multi
description: A Helm chart for Kubernetes
type: application
version: 0.1.0
appVersion: "1.16.0"

dependencies:
  - name: sub0
    repository: file://./charts/sub0
    version: 0.1.0
    import-values:
      - data

helm --dry-run --debug template multi .

---
# Source: multi/charts/sub0/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: multi-cm
data:
  sub0: sub0
  g0: t0
  g1: t1
---
# Source: multi/charts/sub1/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: multi-cm
data:
  sub1: sub1
  g1: t1
  g2: t2
---
# Source: multi/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: multi-cm
data:
  dessert: parent
  g1: t1
  g2: t2

如您所见,

sub1
通过访问全局值从
{{ .Values.global.test1 }}
读取
parent-chart (multi)

但是这个值

{{ .Values.global.test1 }}
并不是直接定义在
multi/values.yaml
中,而是从
sub0
派生出来,然后``multi
imports this value through
依赖```

由于子chart中parent-chart的值需要通过

global value
访问,所以全局值写在sub0
values.yaml

当然,如果只需要

sub1
来访问
sub0
中的值,name 可以直接
dependency
sub0
中的值,类似
sub1
中的方法。

我们的上述方法将在所有子图表中可用。

© www.soinside.com 2019 - 2024. All rights reserved.