helm入门1——模板语法详解

Helm 是 Kubernetes 的包管理器,允许你通过模板来动态生成 Kubernetes 的资源配置文件。模板在 Helm Chart 中使用 Go 语言的 text/template 语法,Helm 在其基础上添加了一些特定的功能和内置对象,例如 .Values.Release.Chart 等。

1. 基本模板语法

1.1 变量表达式

Helm 模板使用双大括号 {{ ... }} 包裹 Go 语言模板的表达式。例如,引用一个变量可以通过:

{{ .Values.someValue }}

在这个例子中,someValuevalues.yaml 文件中的一个配置项。

1.2 条件语句

你可以使用 if 来控制逻辑:

{{ if .Values.enabled }}
apiVersion: v1
kind: ConfigMap
metadata:
  name: my-config
{{ end }}

这里,只有当 enabledtrue 时,才会生成 ConfigMap

1.3 循环

通过 range 遍历列表或字典:

{{ range .Values.items }}
- {{ .name }}: {{ .value }}
{{ end }}

这个例子会循环 items 数组,并生成相应的 namevalue

1.4 注释

Helm 中的注释可以使用 {{/* */}} 包裹:

{{/* This is a comment in Helm template */}}
1.5 模板函数

Helm 内置了一些模板函数,例如 quote, toYaml, default 等。你可以使用这些函数来处理数据:

image: "{{ .Values.image.repository }}:{{ .Values.image.tag | quote }}"

2. .Values.Release.Chart 详解

在 Helm 中,模板通过 上下文对象 来提供数据,这些对象可以在模板中访问。

2.1 .Values

.Values 代表 Helm Chart 的 values.yaml 文件中定义的值。它包含了用户传入的所有可配置项。通过 .Values,你可以动态地将用户定义的配置值插入到模板中。

  • 示例:假设 values.yaml 文件包含以下内容:

replicaCount: 3
image:
  repository: myapp
  tag: latest

那么你可以在模板中这样引用:

replicas: {{ .Values.replicaCount }}
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"

.Values 是一个对象,通常会反映 values.yaml 的层次结构,因此可以像访问结构体字段一样访问其嵌套值。

2.2 .Release

.Release 是一个全局对象,包含有关当前 Helm 部署的信息。它提供了以下常用字段:

  • .Release.Name:发布的名称,通常是用户通过 Helm 安装命令指定的名称。

  • .Release.Namespace:发布的命名空间。

  • .Release.Revision:当前发布的修订版本号,每次升级发布时该值会递增。

  • .Release.Service:部署此 Helm Chart 的 Helm 服务,通常为 Helm

metadata:
  name: {{ .Release.Name }}-app
  namespace: {{ .Release.Namespace }}
2.3 .Chart

.Chart 是一个对象,包含当前 Helm Chart 的元数据信息,这些信息来源于 Chart.yaml 文件。常用的字段包括:

  • .Chart.Name:Chart 的名称。

  • .Chart.Version:Chart 的版本号。

  • .Chart.AppVersion:应用程序的版本(通常是 Chart 部署的应用程序的版本,而不是 Chart 本身的版本)。

  • .Chart.Description:Chart 的描述。

  • 示例:在模板中,您可以通过 .Chart 获取 Chart 的元数据信息:

annotations:
  chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"

3. 示例模板

假设我们有一个 values.yaml 文件:

replicaCount: 3
image:
  repository: nginx
  tag: 1.19.0
service:
  port: 80
enabled: true

我们可以创建一个模板文件 deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ .Release.Name }}-{{ .Values.image.repository }}
  namespace: {{ .Release.Namespace }}
  labels:
    app: {{ .Release.Name }}
spec:
  replicas: {{ .Values.replicaCount }}
  selector:
    matchLabels:
      app: {{ .Release.Name }}
  template:
    metadata:
      labels:
        app: {{ .Release.Name }}
    spec:
      containers:
      - name: {{ .Values.image.repository }}
        image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
        ports:
        - containerPort: {{ .Values.service.port }}

在这个模板中,我们使用 .Values 来获取用户定义的值,使用 .Release.Name.Release.Namespace 来动态生成 Deployment 的名称和命名空间。

4. 内置对象总结

  • .Values:引用 values.yaml 文件中的内容,允许用户自定义 Chart 的配置。
  • .Release:包含与 Helm Release(发布)相关的元数据信息,如名称、命名空间、修订版本等。
  • .Chart:提供与 Helm Chart 自身相关的元数据信息,如名称、版本、描述等。

通过结合这些内置对象和 Helm 提供的模板语法,你可以构建灵活、动态的 Kubernetes 资源配置文件,适应不同的部署场景和需求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值