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

news/2024/7/4 8:00:13 标签: Helm, 云原生, kubernetes, k8s

子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: coffee
  food: pizza
pizzaToppings:
  - mushrooms
  - cheese
  - peppers
  - onions

mysubchart:
  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: coffee
  food: pizza
pizzaToppings:
  - mushrooms
  - cheese
  - peppers
  - onions

mysubchart:
  dessert: ice cream

global:
  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 cream
  salad: 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.niftyadmin.cn/n/5372884.html

相关文章

springboot176基于Spring Boot的装饰工程管理系统

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的 适用于计算机类毕业设计,课程设计参考与学习用途。仅供学习参考, 不得用于商业或者非法用途,否则,一切后果请用户自负。 看运行截图看 第五章 第四章 获取资料方式 **项…

【正在更新】从零开始认识语音识别:DNN-HMM混合系统语音识别(ASR)原理

摘要 | Abstract TO-BE-FILLED 1.前言 | Introduction 近期想深入了解语音识别(ASR)中隐马尔可夫模型(HMM)和深度神经网络-隐马尔可夫(DNN-HMM)混合模型,但是尽管网络上有许多关于DNN-HMM的介绍,如李宏毅教授的《深度学习人类语言处理》[1],…

uniapp 上传多张图片到django后端

uniapp 上传多张图片到django后端 要在UniApp中上传多张图片到Django后端,你可以按照以下步骤进行操作: 在UniApp中,使用uni.chooseImage()方法选择多张图片,并将其保存在一个数组中。例如: uni.chooseImage({count…

【十四】【C++】list 的常见用法

list 的初始化和遍历 /*list的初始化和遍历*/ #if 1 #include <list> #include <vector> #include <iostream> #include<algorithm> using namespace std;void TestList1(){list<int> L1;list<int> L2(10, 5);vector<int> v{1,2,3,4…

【思科ssh】思科模拟器配置ssh登录

配置路由器的名称为R1 配置路由器的域名为aaa.com 使用rsa来加密传输数据&#xff0c;密钥位数为2048 配置登录用户名为cj&#xff0c;密码为123456 只允许ssh登录&#xff0c;不能以其他方式登录 本地验证

HiveSQL——sum(if()) 条件累加

注&#xff1a;参考文章&#xff1a; HiveSql面试题10--sum(if)统计问题_hive sum if-CSDN博客文章浏览阅读5.8k次&#xff0c;点赞6次&#xff0c;收藏19次。0 需求分析t_order表结构字段名含义oid订单编号uid用户idotime订单时间&#xff08;yyyy-MM-dd&#xff09;oamount订…

【ASP.NET Core 基础知识】--部署和维护--日志记录和错误处理

一、日志记录(Logging) 1.1 日志记录的概念 日志记录是一种记录系统运行状态、活动和事件的重要机制。在软件开发和系统管理中&#xff0c;日志记录扮演着关键角色&#xff0c;用于追踪应用程序的执行过程、监视系统的健康状况、诊断问题和安全审计等。在ASP.NET Core等现代W…

K8S容器挂了后一直重启但不成功原因及解决

K8S容器挂了后一直重启但不成功原因及解决 背景&#xff1a; 应用迁移K8S后&#xff0c;因为POD OOM挂了后&#xff0c;会进行重启&#xff0c;但一直在重启&#xff0c;重启多次都不成功&#xff0c;且应用无报错日志。其他K8S上应用挂了后会自动重启成功。 原因&#xff1…