【笔记】Helm-5 Chart模板指南-11 子chart和全局值

子chart和全局值

到目前为止,我们只使用了一个chart。但chart可以使用依赖,称为子chart,且有自己的值和模板。该章节我们会创建一个子chart并能看到访问模板中的值的不同方式。

在深入研究代码之前,需要了解一些应用的子chart的重要细节:

1、子chart被认为是“独立的”,意味着子chart从来不会显示依赖它的父chart。

2、因此,子chart无法访问父chart的值。

3、父chart可以覆盖子chart的值。

4、Helm有一个全局值的概念,所有的chart都可以访问。

小贴士:这些限制不一定都适用于提供标准化辅助功能的 library charts。

Helm | 库类型Chart

浏览本节的示例之后,这些概念会变得更加清晰。

创建子chart

为了做这些练习,我们可以从本指南开始时创建的mychart/开始,并在其中添加一个新的chart。

$ cd mychart/charts

$ helm create mysubchart

Creating musubchart

$ rm -rf mysubchart/templates/*

$ cd mychart/charts
$ helm create mysubchart
Creating mysubchart
$ rm -rf mysubchart/templates/*

注意,和以前一样,我们删除了所有的基本模板,然后从头开始,在这个指南中,我们聚焦于模板如何工作,而不是管理依赖。但 Chart指南 提供了更多子chart运行的信息。

Helm | Chart

在子chart中添加值和模板

下一步,为mysubchart创建一个简单的模板和values文件。mychart/charts/mychart应该已经有一个values.yaml。设置如下:

dessert: cake

下一步,在mychart/charts/mysubchart/templates/configmap.yaml中创建一个新的配置映射模板:

apiVersion: v1

kind: ConfigMap

metadata:

  name: {{ .Release.Name }}-cfgmap2

data:

  dessert: {{ .Values.dessert }}

apiVersion: v1
kind: ConfigMap
metadata:name: {{ .Release.Name }}-cfgmap2
data:dessert: {{ .Values.dessert }}

因为每个子chart都是 独立的chart,可以单独测试mysubchart:

$ helm install --generate-name --dry-run --debug mychart/charts/mysubchart

$ helm install --generate-name --dry-run --debug mychart/charts/mysubchart
SERVER: "localhost:44134"
CHART PATH: /Users/mattbutcher/Code/Go/src/helm.sh/helm/_scratch/mychart/charts/mysubchart
NAME:   newbie-elk
TARGET NAMESPACE:   default
CHART:  mysubchart 0.1.0
MANIFEST:
---
# Source: mysubchart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:name: newbie-elk-cfgmap2
data:dessert: cake

用父chart的值来覆盖

原始chart,mychart现在是mysubchart的父。这种关系是基于mysubchart在mychart/charts中这一事实。

因为mychart是父级,可以在mychart指定配置并将配置推送到mysubchart。比如可以修改m ychart/values.yaml如下:

favorite:

  drink: coffee

  food: pizza

pizzaToppings:

  - mushrooms

  - cheese

  - peppers

  - onions

mysubcharts:

  dessert: ice cream

favorite:drink: coffeefood: pizza
pizzaToppings:- mushrooms- cheese- peppers- onionsmysubchart:dessert: ice cream

注意最后两行,在mychart中的所有指令会被发送到mysubchart chart中。因此如果运行helm install --dry-run --debug mychart,会看到一项mysubchart的配置:

# Source: mychart/charts/mysubchart/templates/configmap.yaml

apiVersion: v1

kind: ConfigMap

metadata:

  name: unhinged-bee-cfgmap2

data:

  dessert: ice cream

# Source: mychart/charts/mysubchart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:name: unhinged-bee-cfgmap2
data:dessert: ice cream

现在,子chart的值已经被顶层的值覆盖了。

这里需要注意个重要细节。我们不会改变mychart/charts/mysubchart/templates/configmap.yaml模板到.Values.mysubchart.dessert的指向。从模板的角度来看,值依然是在.Values.dessert。当模板引擎传递值时,会设置范围。因此对于mysubchart模板,.Values中只提供专门用于mysubchart的值。

但是有时确实希望某些值对所有模板都可用。这是使用全局chart值完成的。

全局Chart值

全局值是使用完全一样的名字在所有的chart及子chart中都能访问的值。全局变量需要显示声明。不能将现有的非全局值作为全局值使用。

这些值数据类型有个保留部分叫Values.global,可以用来设置全局值。在mychart/values.yaml文件中设置一个值如下:

favorite:

  drink: coffee

  food: pizza

pizzaToppings:

  - mushrooms

  - cheese

  - onions

mysubchart:

  dessert: ice cream

global:

  salad: caesar

favorite:drink: coffeefood: pizza
pizzaToppings:- mushrooms- cheese- peppers- onionsmysubchart:dessert: ice creamglobal:salad: caesar

因为全局的工作方式,mychart/templates/configmap.yaml和mysubchart/templates/configmap.yaml应该都能以{{ .Values.global.salad }}进行访问。

mychart/templates/configmap.yaml:

apiVersion: v1

kind: ConfigMap

metadata:

  name: {{ .Release.Name }}-configmap

data:

  salad: {{ .Values.global.salad }}

apiVersion: v1
kind: ConfigMap
metadata:name: {{ .Release.Name }}-configmap
data:salad: {{ .Values.global.salad }}

mysubchart/templates/configmap.yaml:

apiVersion: v1

kind: ConfigMap

metadata:

  name: {{ .Release.Name }}-cfgmap2

data:

  dessert: {{ .Values.dessert }}

  salad: {{ .Values.global.salad }}

apiVersion: v1
kind: ConfigMap
metadata:name: {{ .Release.Name }}-cfgmap2
data:dessert: {{ .Values.dessert }}salad: {{ .Values.global.salad }}

现在如果预安装,两个输出会看到相同的值:

# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:name: silly-snake-configmap
data:salad: caesar---
# Source: mychart/charts/mysubchart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:name: silly-snake-cfgmap2
data:dessert: ice creamsalad: caesar

全局值在类似这样传递信息时很有用,不过要确保使用全局值配置正确的模板,确实需要一些计划。

与子chart共享模板

父chart和子chart可以共享模板。在任意chart中定义的块在其他chart中也是可用的。

比如,我们可以这样定义一个简单的模板:

{{- define "labels" }}from: mychart{{ end }}

回想一下模板标签是如何共享的。因此,标签chart可以包含在任何其他chart中。

当chart开发者在include和template之间选择时,使用include的一个优势是include可以动态引用模板:

{{ include $mytemplate }}

上述会取消对$mytemplate的引用,相反,template函数只接收字符串字符。

避免使用块

Go模板语言提供了一个block关键字允许开发者提供一个稍后会被重写的默认实现。在Helm chart中,块并不是用于覆盖的最好工具,因为如果提供了同一个块的多个实现,无法预测哪个会被选定。

建议改为使用include。

————————————

仅用于本人学习

来源:Helm | Docs

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/678778.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

波奇学Linux:文件重定向和虚拟文件系统

重定向 文件描述符所对应的分配规则,从0开始,寻找最小没有使用的数组位置。 如图所示,关闭文件描述符的0,新打开的文件描述符为0,而关闭2,文件描述符为2。 重定向:文件输出的对象发生改变 例…

【ESLint】TypeError:this.libOptions.parse is not a function

打开vue文件之后遇到如下错误: ESLint: TypeError: this.libOptions.parse is not a function该问题是由 ESLint 8.23 版本引起的 解决方法: 将 ESLint 降级到 8.22.x 或更早版本 npm install eslint8.22.0 --save-exact

C++对象继承

继承概念: 首先引入一个生活例子,普通人是一个类对象,学生是一个类对象,普通人拥有的属性学生一定会有,学生拥有的属性普通人不一定有。类比一下,把普通人抽象为A对象,学生抽象为B对象&#xf…

Centos7安装nginx yum报错

Centos7安装nginx yum报错,yum源报错解决办法: 1、更新epel源后,出现yum报错 [roothacker117 ~]# yum install epel-release(安装成功) [roothacker117 ~]# yum install nginx(安装失败,提示如…

Java 对象字段基本类型和包装类型的选择以及 null 处理的一些思考

文章目录 版本起因解决方案方案一方案二方案三 聊聊几种方案的优劣方案一禁止使用方案二建议使用方案三依据实际情况选择 方案二 NullPointerException 的处理总结个人简介 版本 JDK 8 起因 最近合并代码中发现了一个有意思的报错:Lombok builder is missing non…

Windows系统特定快捷键

Windows系统特定快捷键 Windows系统提供了许多特定快捷键,这些快捷键用于快速访问系统设置、控制面板等功能。掌握这些快捷键可以大大提高您的工作效率。以下是一些常用的Windows系统特定快捷键: 1. 启动菜单和搜索: - WinS&#…

复习面经哦

1.函数可以变量提升 JavaScript 中的函数存在变量提升的概念,这意味着在执行代码之前,函数声明会被提升到其作用域的顶部。这使得你可以在函数声明之前调用函数。然而,这种行为只适用于函数声明,而不是函数表达式。 下面是一些关…

深度学习之线性模型

深度学习之线性模型 y w * x模型思路 y w * x b模型思路 y w * x模型 思路 这里求权重w , 求最适合的权重,就是求损失值最小的时候 这里用穷举法:在一个范围内,列出w的所有值,并且计算出每组数据的平均损失值,以w 为横坐标, 损失值为纵坐…

【Java】学习笔记:关于java.sql;

Connection conn null; Connection:这是一个 Java 接口,表示与数据库的连接。在这里,conn 是一个 Connection 类型的变量。 conn:这是变量的名称,可以根据需要进行更改。通常,conn 被用作表示数据库连接的…

Android 移动应用开发 创建第一个Android项目

文章目录 一、创建第一个Android项目1.1 准备好Android Studio1.2 运行程序1.3 程序结构是什么app下的结构res - 子目录(所有图片、布局、字AndroidManifest.xml 有四大组件,程序添加权限声明 Project下的结构 二、开发android时,部分库下载异…

在没有鼠标或键盘的情况下在 Mac 上如何启用蓝牙?

通过这个技巧,小编将向您展示几种无需鼠标或键盘即可在 Mac 上重新启用蓝牙的方法。如果您想开始使用蓝牙配件,但还没有连接,这会很有用。 无需鼠标即可启用蓝牙 蓝牙是iPhone、iPad和 Mac 的标准配置。它确保您可以无线使用各种配件&#…

yolo层数连接

head [-1,6]连接的是第六层 [-1,4连接的是第四层

Leecode之合并两个有序链表

一.题目及剖析 https://leetcode.cn/problems/merge-two-sorted-lists/description/ 二.思路引入 用指针遍历两个链表并实时比较,较小的元素进行尾差,然后较小元素的指针接着向后遍历 三.代码引入 /*** Definition for singly-linked list.* struct ListNode {* int va…

ChatGPT-4.0:塑造未来对话的智能架构

ChatGPT-4.0:塑造未来对话的智能架构 引言 在人工智能领域,ChatGPT-4.0的问世标志着对话智能技术的重大突破。这个最新的模型不仅在技术层面上实现了革命性的进步,而且在真实世界的应用中展示了前所未有的潜力。本文将深入探讨ChatGPT-4.0的…

深入Pandas:精通文本数据处理的20+技巧与应用实例【第68篇—python:文本数据处理】

文章目录 Pandas文本数据处理方法详解1. str/object类型转换2. 大小写转换3. 文本对齐4. 获取长度5. 出现次数6. 编码方向7. 字符串切片8. 字符串替换9. 字符串拆分10. 字符串连接11. 字符串匹配12. 去除空格13. 多条件过滤14. 字符串排序15. 字符串格式化16. 多列文本操作17. …

网络扫描神器:Nmap 保姆级教程(附链接)

一、介绍 Nmap(Network Mapper)是一款用于网络发现和安全审计的开源工具。它最初由 Gordon Lyon(也被称为 Fyodor Vaskovich)开发,是一款功能强大且广泛使用的网络扫描工具。Nmap 允许用户在网络上执行主机发现、端口…

uTools工具使用

之前发现一款非常有用的小工具,叫uTools,该软件集成了比如进制转换、json格式化、markdown、翻译、取色等等集插件大成,插件市场提供了很多开源插件工具。可以帮助开发人员节省了寻找各种处理工具的时间,非常推荐。 1、软件官方下…

类与结构体(4)

简明扼要:上一期我们说了,这一期讲类的入门。 类是什么,类该怎么用,为什么要用类? 我们先来回答第一个问题,类是什么? 类是什么? C在C的基础上增加了面向对象编程(C是面向过程编…

【维生素C语言】附录:strlen 函数详解

写在前面:本篇将专门为 strlen 函数进行讲解,总结了模拟实现 strlen 函数的三种方法,并对其进行详细的解析。手写库函数是较为常见的面试题,希望通过本篇博客能够加深大家对 strlen 的理解。 0x00 strlen函数介绍 【百度百科】str…

vb.net极简版扫雷16*16,40雷源代码,仅供学习和参考

效果图:下载地址:链接:https://pan.baidu.com/s/14rrZujpQbfs-9HMw_lL-3Q?pwd1234 提取码:1234 源代码:只有120行 Imports System.Math Public Class Form1Dim Booms As New List(Of Point)Dim MyBooms As New List…