Helm文档 - Chart模板教程:新手入门

新手入门

在这部分的教程中,我们将创建一个chart,并添加一个模板。我们在这里创建的chart将会贯穿整个教程的其余部分。
在开始之前,让我们先简单地看一下Helm Chart。

Charts

如在Charts教程里所描述的,Helm charts的结构如下所示:

mychart/
  Chart.yaml
  values.yaml
  charts/
  templates/
  ...
  • templates目录用来存放template文件的地方。当Helm在计算一个chart的时候,template目录下的所有文件都将通过模板渲染引擎(template rendering engine),发送给Helm进行计算。最终Helm将收集这些模板的结果,并将他们发送给Kubernetes。
  • values.yaml文件对于模板文件是非常重要的。这个文件中包含了一个chart中的默认值。用户在执行helm instal或者helm upgrade命令是可以重置这些默认值。
  • Chart.yaml文件包含了对当前chart的描述信息。我们也可以在模板中访问这些信息。
  • charts目录允许包含其它的charts(我们称之为子charts)。在本指南的后面部分,我们将看到在模板渲染时这些是如何工作的。

第一个chart

在本指南中,我们将创建一个名叫mychart的简单的chart,紧接着我们将在这个chart中创建一些模板。

$ helm create mychart
Creating mychart

从现在开始,我们后续的操作都将位于mychart目录下。

快速浏览mychart/templates/目录

如果你查看一下mychart下的templates目录,你会发现这个目录下已经有一些文件了。

  • NOTES.txt:是你的chart的帮助文档。当用户执行helm install命令是,这个文档的内容将会展示给用户。
  • deployment.yaml:一个用来创建Kubernetes deployment资源的基本清单文件。
  • service.yaml:一个为deployment创建service端点的基本清单文件。
  • _helpers.tpl:放置模板帮助程序的地方,我们可以在整个chart中重复使用这些模板帮助程序

接下来我们要做的是,删除所有的文件!这样我们就可以从头开始学习教程。随着教程的深入,我们将创建自己的NOTES.txt和_helpers文件。

$ rm -rf mychart/templates/*

当然了,当你在编写生产级的chart时候,自动生成的这些基本模板文件是非常有用的。所以在日常编写chart的工作中,你有可能不会删除它们。

第一个模板文件

我们要创建的第一个模板是ConfigMap。在Kubernetes中,ConfigMap只是用来存储配置数据的容器。其他东西,比如pods,可以访问ConfigMap中的数据。因为ConfigMaps是基本的资源,所以它们对我们来说是一个很好的起点。
我么接下来要创建的第一个模板是一个ConfigMap。在Kubernetes中,Configmap是用来存储皮遏制数据的容器。而其它的一些资源对象,比如pods,可以访问ConfigMap中的数据。由于ConfigMap是最基本资源之一而且其定义比较简单,所以对于我们来说它是一个很好的起点。

让我们开始在mychart/templates/目录下创建一个名叫configmap.yaml的模板文件,文件内容如下:

apiVersion: v1
kind: ConfigMap
metadata:
  name: mychart-configmap
data:
  myvalue: "Hello World"

TIPs:模板文件的命名没有严格的命名规则。然而,我们建议为YAML文件使用.yaml后缀,为帮助程序(helpers)使用.tpl后缀。

上面的YAML文件是一个简单的ConfigMap,只有最少的必要字段。由于该文件位于templates/目录中,因此它将通过模板引擎发送。

将这样一个普通的YAML文件放到templates/目录中就可以了。当Helm读取该模板时,它将简单地按原样将其发送给Kubernetes。

有了这个简单的模板,我们现在就有了一个可安装的chart。我们可以使用如下的命令来安装它:

$ helm install full-coral ./mychart
NAME: full-coral
LAST DEPLOYED: Tue Nov  1 17:36:01 2016
NAMESPACE: default
STATUS: DEPLOYED
REVISION: 1
TEST SUITE: None

使用Helm,我们可以检索已发布的release,并查看实际加载的模板。

$ helm get manifest full-coral
---
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: mychart-configmap
data:
  myvalue: "Hello World"

helm get manifest命令后边跟着一个release名字,这样就可以打印出所有上传到服务器上的Kubernetes资源。每一个文件都是以—作为开头,来表明一个YAML文档的起始,紧接着第二行是自动生成的注释,用来告诉我们这个YAML文档是根据哪一个模板文件生成的。

从上边命令的输出,我们可以看到返回的YAML数据正是我们放在configmap.yaml文件中的内容。

现在我们可以通过以下命令删除上边我们按照的release:
$ helm uninstall full-coral

添加一个简单的模板调用

给一个资源硬编码一个名字,被认为是不好的实践经验。对于release来说名字是必须唯一的。所以我们可能希望通过插入release名称来生成名称字段。

TIP:由于DNS域名系统的原因,name字段的长度被限制为63个字符。由于这个原因,release名字被限制为53个字符。Kubernetes 1.3及之前的版本限制为24个字符。

让我们将configmap.yaml文件的内容更改成以下:

apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-configmap
data:
  myvalue: "Hello World"

最大的改变是name字段被改成了 {{ .Release.Name }}-configmap
模板指令被包含在{{ 和 }}块之间。

模板指令{{ .Release.Name }}将release的名字注入到模板中。传递给模板的值可以看作是有名称空间的对象,其中点(.)用来分隔每个名称空间的元素。

Release前边的点(.)表示我们从这个作用域的最顶层的名称空间开始(我们将稍微讨论一下作用域)。我们可以将 .Release.Name 读作“从最顶部的名称空间开始,找到Release对象,然后在其中查找一个名为Name的对象”。

Release是Helm的内置对象之一,后边我们会更深入的介绍它。但是现在,只要说明通过调用 {{ .Release.Name }} 将会显示库给我们的release分配的release名称就足够了。

现在当我们安装我们的资源,我们将立即看到使用这个模板指令的结果:

$ helm install clunky-serval ./mychart
NAME: clunky-serval
LAST DEPLOYED: Tue Nov  1 17:45:37 2016
NAMESPACE: default
STATUS: DEPLOYED
REVISION: 1
TEST SUITE: None

注意,现在kubernetes中configmap的名字是clunky-serval-configmap,而不是之前的mychart-configmap。

你可以通过运行 helm get manifest clunky-serval 命令来查看整个生成的YAML文件。

至此,我们已经看到了模板最基本的部分:在{{和}}中嵌入了模板指令的YAML文件。在下一部分中,我们将更深入地研究模板。

但在继续之前,有一个快速技巧可以使构建模板更快: 当您想要测试模板渲染,但实际上没有安装任何东西时,您可以使用helm install --debug --dry-run good-guppy ./mychart命令。这条命令会渲染模板,但并会不实际安装chart,它会将渲染后的模板返回给你,所以你可以看到如下的输出:

$ helm install --debug --dry-run goodly-guppy ./mychart
install.go:149: [debug] Original chart version: ""
install.go:166: [debug] CHART PATH: /Users/ninja/mychart

NAME: goodly-guppy
LAST DEPLOYED: Thu Dec 26 17:24:13 2019
NAMESPACE: default
STATUS: pending-install
REVISION: 1
TEST SUITE: None
USER-SUPPLIED VALUES:
{}

COMPUTED VALUES:
affinity: {}
fullnameOverride: ""
image:
  pullPolicy: IfNotPresent
  repository: nginx
imagePullSecrets: []
ingress:
  annotations: {}
  enabled: false
  hosts:
  - host: chart-example.local
    paths: []
  tls: []
nameOverride: ""
nodeSelector: {}
podSecurityContext: {}
replicaCount: 1
resources: {}
securityContext: {}
service:
  port: 80
  type: ClusterIP
serviceAccount:
  create: true
  name: null
tolerations: []

HOOKS:
MANIFEST:
---
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: goodly-guppy-configmap
data:
  myvalue: "Hello World"

使用–dry-run来测试你的代码,但它不能确保Kubernetes本身接受您生成的模板。最好不要因为–dry-run可以正常工作,就想当然地认为你的chart会正确安装。

在Chart模板教程里,我们采用我们在这里定义的基本chart,并详细研究Helm的模板语言。接下来我们将从helm模板语言里的内置对象开始。

本文为个人在学习Helm chart过程中的学习记录,文章内容翻译自Helm官方文档,如有翻译不当之处,还请不吝赐教。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值