一、Helm目录层级¶
1.创建一个Chart
$ helm create helm-test
2.查看Helm目录层级
[root@k8s-master01 ~]# tree helm-test/
helm-test/
├── charts
├── Chart.yaml
├── templates
│ ├── deployment.yaml
│ ├── _helpers.tpl
│ ├── hpa.yaml
│ ├── ingress.yaml
│ ├── NOTES.txt
│ ├── serviceaccount.yaml
│ ├── service.yaml
│ └── tests
│ └── test-connection.yaml
└── values.yaml
上面文件说明:
charts/目录: 可以包含其他的chart(称之为子chart)Chart.yaml文件包含了该chart的描述。你可以从模板中访问它apiVersion:Chart的apiVersion,目前默认都是v2name:Chart的名称description:Chart描述信息type:图表的类型version:Chart自己的版本号-
appVersion:Chart内应用的版本号 -
templates/目录:包括了模板文件。当Helm评估chart时,会通过模板渲染引擎将所有文件发送到templates/目录中。 然后收集模板的结果并发送给Kubernetes deployment.yaml:创建Kubernetes 工作负载的基本清单_helpers.tpl: 放置可以通过chart复用的模板辅助对象,可以理解成自定义的模板或者函数NOTES.txt: chart的"帮助文本"。这会在你的用户执行helm install时展示给他们service.yaml: 为你的工作负载创建一个 service终端基本清单-
tests:测试文件 -
values.yaml文件也导入到了模板。这个文件包含了chart的默认值。这些值会在用户执行helm install或helm upgrade时被覆盖,一般配置全局变量或者一些参数,其中优先级为values.yaml最低,--set参数最高
如果没有tree命令,可执行以下命令进行下载
$ yum install -y tree
二、Helm内置变量¶
对象可以通过模板引擎传递到模板中。 当然你的代码也可以传递对象。(我们在使用with和range语句时,会看到示例)。有几种方式可以在模板中创建新对象,比如说我们后面会看到的tuple功能。
对象可以是非常简单的:仅有一个值。或者可以包含其他对象或方法。比如,Release对象可以包含其他对象(比如:Release.Name)和Files对象有一组方法。
Release是你可以在模板中访问的顶层对象之一。
Release:Release对象描述了版本发布本身。包含了以下对象:Release.Name: release名称Release.Namespace: 版本中包含的命名空间(如果manifest没有覆盖的话)Release.IsUpgrade: 如果当前操作是升级或回滚的话,该值将被设置为trueRelease.IsInstall: 如果当前操作是安装的话,该值将被设置为trueRelease.Revision: 此次修订的版本号。安装时是1,每次升级或回滚都会自增Release.Service: 该service用来渲染当前模板。Helm里始终HelmValues:Values对象是从values.yaml文件和用户提供的文件传进模板的。默认为空Chart:Chart.yaml文件内容。Chart.yaml里的所有数据在这里都可以可访问的。比如{{ .Chart.Name }}-{{ .Chart.Version }}会打印出mychart-0.1.0Files: 在chart中提供访问所有的非特殊文件的对象。你不能使用它访问Template对象,只能访问其他文件。Files.Get通过文件名获取文件的方法Files.GetBytes用字节数组代替字符串获取文件内容的方法。 对图片之类的文件很有用Files.Glob用给定的shell glob模式匹配文件名返回文件列表的方法Files.Lines逐行读取文件内容的方法。迭代文件中每一行时很有用Files.AsSecrets使用Base 64编码字符串返回文件体的方法Files.AsConfig使用YAML格式返回文件体的方法Capabilities: 提供关于Kubernetes集群支持功能的信息Capabilities.APIVersions是一个版本列表Capabilities.APIVersions.Has $version说明集群中的版本 (比如,batch/v1) 或是资源 (比如,apps/v1/Deployment) 是否可用Capabilities.KubeVersion和Capabilities.KubeVersion.Version是Kubernetes的版本号Capabilities.KubeVersion.MajorKubernetes的主版本Capabilities.KubeVersion.MinorKubernetes的次版本Capabilities.HelmVersion包含Helm版本详细信息的对象,和helm version的输出一致Capabilities.HelmVersion.Version是当前Helm语义格式的版本Capabilities.HelmVersion.GitCommitHelm的git sha1值Capabilities.HelmVersion.GitTreeState是Helm git树的状态Capabilities.HelmVersion.GoVersion是使用的Go编译器版本Template: 包含当前被执行的当前模板信息Template.Name: 当前模板的命名空间文件路径 (e.g.mychart/templates/mytemplate.yaml)Template.BasePath: 当前chart模板目录的路径 (e.g.mychart/templates)
下面以变量Release.Name进行举例说明:
1.创建一个Chart
$ helm create helm-test
2.删掉系统自带的模板文件
[root@k8s-master01 ~]# rm -rf helm-test/templates/*
3.新增模板文件,并填写Release.Name内置变量
[root@k8s-master01 ~]# cd /root/helm-test/templates
[root@k8s-master01 templates]# vim configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .Release.Name }}-configmap
data:
myvalue: "Hello World"
4.测试模板渲染的内容,观察到以自己自定义的名字进行命名
[root@k8s-master01 ~]# helm install aaa helm-test/ --debug --dry-run
install.go:178: [debug] Original chart version: ""
install.go:195: [debug] CHART PATH: /root/helm-test
NAME: aaa
LAST DEPLOYED: Sun Jul 9 10:10:44 2023
NAMESPACE: default
STATUS: pending-install
REVISION: 1
TEST SUITE: None
USER-SUPPLIED VALUES:
{}
COMPUTED VALUES:
affinity: {}
autoscaling:
enabled: false
maxReplicas: 100
minReplicas: 1
targetCPUUtilizationPercentage: 80
fullnameOverride: ""
image:
pullPolicy: IfNotPresent
repository: nginx
tag: ""
imagePullSecrets: []
ingress:
annotations: {}
className: ""
enabled: false
hosts:
- host: chart-example.local
paths:
- path: /
pathType: ImplementationSpecific
tls: []
nameOverride: ""
nodeSelector: {}
podAnnotations: {}
podSecurityContext: {}
replicaCount: 1
resources: {}
securityContext: {}
service:
port: 80
type: ClusterIP
serviceAccount:
annotations: {}
create: true
name: ""
tolerations: []
HOOKS:
MANIFEST:
---
# Source: helm-test/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: aaa-configmap
data:
myvalue: "Hello World"
上面参数说明:
--dry-run:可以避免真正地创建和部署资源--debug: 查看 Helm 在执行过程中的每个步骤和输出