helm3自定义chart编写

摘要:
安装helm后,我们可以开始自定义图表。然后我们需要创建如下模板:在helmcreatemyapp之后,我们可以查看目录结构。我将简要介绍目录的作用:templates/directory包含模板文件。当Helm评估图表时,所有文件将通过模板渲染引擎_ Helpers发送到模板/目录。tpl:可以通过图表重用的模板助手对象values.yaml文件也被导入到模板中。当用户执行helmnstall或helmcupgrade时,这些值将被覆盖。Chart.yaml文件包含图表的描述。

当我们安装好helm之后我们可以开始自定义chart,那么我们需要先创建出一个模板如下:

helm create myapp

之后我们可以一下目录结构,目录的作用我简要介绍一下:

templates/ 目录包括了模板文件。当Helm评估chart时,会通过模板渲染引擎将所有文件发送到templates/目录中。 然后收集模板的结果并发送给Kubernetes。

  • _helpers.tpl里面的内容是定义模板用的,所有模板都可以再这里定义,然后再任何yaml文件当中都可以调用这个文件下的模板
  • NOTES.txt: chart的"帮助文本"。这会在你的用户执行helm install时展示给他们。
  • deployment.yaml: 创建Kubernetes 工作负载的基本清单
  • service.yaml: 为你的工作负载创建一个 service终端基本清单。
  • _helpers.tpl: 放置可以通过chart复用的模板辅助对象

values.yaml 文件也导入到了模板。这个文件包含了chart的 默认值 。这些值会在用户执行helm install 或 helm upgrade时被覆盖。

Chart.yaml 文件包含了该chart的描述。你可以从模板中访问它。charts/目录 可以 包含其他的chart(称之为 子chart)。 指南稍后我们会看到当涉及模板渲染时这些是如何工作的。

$tree myapp/
myapp/
├── charts
├── Chart.yaml
├── templates
│   ├── deployment.yaml
│   ├── _helpers.tpl
│   ├── hpa.yaml
│   ├── ingress.yaml
│   ├── NOTES.txt
│   ├── serviceaccount.yaml
│   ├── service.yaml
│   └── tests
│       └── test-connection.yaml
└── values.yaml

3 directories, 10 files

现在展示一下我所创建的chart为例

$tree myapp/
myapp/
├── charts
├── Chart.yaml
├── templates
│   ├── configmap.yaml
│   └── _helpers.tpl
├── test.yaml
├── values.yaml
└── values.yaml.bak

2 directories, 7 files

其中我修改过的内容如下:

$cat values.yaml
favorite:
  drink: coffee
  food: pizza
pizzaToppings:
- mushrooms
- cheese
- peppers
- onions
$cat templates/configmap.yaml
{{ $release := "ok" }}
apiVersion: v1
kind: ConfigMap
metadata:
    name: {{ .Release.Name }}-configmap
    labels:
    {{- include "mychart.labels" . | indent 8 }}
data:
    myvalue: "Hello World"
    {{- with .Values.favorite }}
    drink: {{ .drink }}
    food: {{ .food }}
    release: {{ $release }}
    {{- end }}
    {{- if eq .Values.favorite.drink "coffee" }}
    mug: true
    {{- end }}
    toppings: |-
        {{- range $.Values.pizzaToppings }}
        -{{ . | title | quote }}
        {{- end }}
    size: |-
        {{- range $index,$name := tuple "small" "medium" "large" }}
        {{ $index }}: {{ $name }}
        {{- end }}
$cat templates/_helpers.tpl
{{/* Generate basic labels */}}
{{- define "mychart.labels" }}
generator: helm
date: {{ now | htmlDate }}
chart: {{ .Chart.Name }}
version: {{ .Chart.Version }}
{{- end }}

 上述所需要的技术点:

设置自定义变量

{{ $release := "ok" }}

引用内部变量,其中.就是当前作用域的变量,Release.Name为helm install的名字

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

引用模板,其中{{-代表去除前面的空格-}}代表去除后面的空格,include代表引用模板,mychart.labels为引用模板的内容(内容再_helpers.tpl中),后面的.代表全局作用域,否则_helpers中的有些内容将获取不到,管道符|代表把前面的内容赋予给管道符,然后缩进8个空格

{{- include "mychart.labels" . | indent 8 }}

with代表循环,循环的只为values.yam文件中的内容,注意,必须为大写Values,{{.drink}}为所循环出来的下一级,也就是values.yaml下的favorite下的drink字段,其实也可以循环tuple等类型

{{- with .Values.favorite }}
    drink: {{ .drink }}
    food: {{ .food }}
    release: {{ $release }}
{{- end }}

if判断语句,eq代表等于(还有ge,lt,ne等),那么下面的意思是如果values.yaml文件中favorite下的drink内容为coffee,那么就添加一个mug:true字段

{{- if eq .Values.favorite.drink "coffee" }}
mug: true
{{- end }}

range也代表循环,$代表顶级作用域,意思是说不管再那个作用域,只要出现$都可以调用顶级的变量,那么循环的内容也再_helpers.tpl文件中,.代表循环出来的单个内容然后给title处理变成抬头,再给quote函数处理,quote代表字符串化

toppings: |-
        {{- range $.Values.pizzaToppings }}
        -{{ . | title | quote }}
        {{- end }}

对于range也可以循环tuple等类型,如下,其中$index代表索引,$name代表循环tuple的具体内容

size: |-
        {{- range $index,$name := tuple "small" "medium" "large" }}
        {{ $index }}: {{ $name }}
        {{- end }}

对于_helpers.tpl内容解释如下,{{/* */}}代表注释,{{- define代表定义一个模板,后面跟着模板名字,其中.Chart代表调用Chart.yaml文件的内容

{{/* Generate basic labels */}}
{{- define "mychart.labels" }}
generator: helm
date: {{ now | htmlDate }}
chart: {{ .Chart.Name }}
version: {{ .Chart.Version }}
{{- end }}

以上内容执行后如下:可以跟着文件对照一下结果

$helm install mytest ../myapp/ --dry-run --debug
install.go:173: [debug] Original chart version: ""
install.go:190: [debug] CHART PATH: /home/admin/myapp

NAME: mytest
LAST DEPLOYED: Thu Jun 10 19:08:17 2021
NAMESPACE: default
STATUS: pending-install
REVISION: 1
TEST SUITE: None
USER-SUPPLIED VALUES:
{}

COMPUTED VALUES:
favorite:
  drink: coffee
  food: pizza
pizzaToppings:
- mushrooms
- cheese
- peppers
- onions

HOOKS:
MANIFEST:
---
# Source: myapp/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
    name: mytest-configmap
    labels:
        generator: helm
        date: 2021-06-10
        chart: myapp
        version: 0.1.0
data:
    myvalue: "Hello World"
    drink: coffee
    food: pizza
    release: ok
    mug: true
    toppings: |-
        -"Mushrooms"
        -"Cheese"
        -"Peppers"
        -"Onions"
    size: |-
        0: small
        1: medium
        2: large

未完待续...................

免责声明:文章转载自《helm3自定义chart编写》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Django + Vue 使用Nginx + uWsgi部署(前后端分离)Bootstrap 之 Carousel下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

基于Siverlight 3.0的超炫图表工具Visifire 最后一个免费版本,你还等什么?

概述              Visifire 是一个基于SilverLight的Chart组件,VISIFire 公司提供了 Open Source 的 Silverlight  Chart 组件,遵循GPL v3,可以在 ASP, ASP.Net, PHP, JSP, CodeFusion, Ruby on Rails 以及 HTML 中使用。支持...

k8s~helm里的yaml的介绍

Chart.yaml 文件作用 name: [必须] Chart的名称 version: [必须] Chart的版本号,版本号必须符合 SemVer 2:http://semver.org/ description: [可选] Chart的简要描述 keywords: - [可选] 关键字列表,便于检索 home: [可选] 项目地址 sources:...

C# Excel 为图表添加模拟运算表

  Excel中的图表能够将数据可视化,方便我们比较分析数据。但也有一定的局限,例如:不能够直接从图表中读出原来数据的准确值。Excel提供的解决方案是,在图表下方添加一个模拟运算表,即在坐标轴下方添加包含建表时所依照的数据的表格。本文旨在介绍通过免费的Free Spire.XLS在C#独立创建Excel文件,添加数据,生成图表,并添加模拟运算表。 需要使...

Chart控件,鼠标选择区域,可以局部放大缩小

例子: 代码设置部分: chartArea1.CursorX.Interval = 0D; chartArea1.CursorX.IntervalOffsetType = System.Windows.Forms.DataVisualization.Charting.DateTimeIntervalType.Minutes; chartArea1.Cu...

c++之标准库iomanip

C++ 标准库之iomanip istream & istream::get(char *, int, char = ‘ ’); istream & istream::getline(char *, int, char = ‘ ’); 作用: 从文本中提取指定个数的字符串, 并在串数组末尾添加一个空字符. 区别: get() 不从流中提取终...

容器编排系统K8s之包管理器Helm基础使用(二)

前文我们介绍了helm的相关术语和使用helm安装和卸载应用,回顾请参考:https://www.cnblogs.com/qiuhom-1874/p/14305902.html;今天我们来介绍下自定义chart以及打包chart,helm其他命令使用和私有helm仓库搭建相关话题; 继上一篇博客,我们了解了使用helm在k8s上安装应用,卸载应用,以及仓库...