文章目录

  • Charts
  • Charts 结构
    • Chart.yaml
    • Chart 类型
    • Chart 依赖
    • Templates and Values
      • 模板文件
      • Values文件
  • Hook 机制
  • 内置对象
    • Release
    • Values
    • Chart
    • Files
    • Capabilities
    • Template

Charts

Charts描述的是一组k8s资源相关的文件集合,用户可以通过简单地修改一些参数使得helm部署的应用符合我们的要求。

Charts 结构

wordpress/Chart.yaml          # 包含了chart信息的YAML文件LICENSE             # 可选: 包含chart许可证的纯文本文件README.md           # 可选: 可读的README文件values.yaml         # chart 默认的配置值values.schema.json  # 可选: 一个使用JSON结构的values.yaml文件charts/             # 包含chart依赖的其他chartcrds/               # 自定义资源的定义templates/          # 模板目录, 当和values 结合时,可生成有效的Kubernetes manifest文件templates/NOTES.txt # 可选: 包含简要使用说明的纯文本文件
  • templates/ 目录包括了模板文件。安装应用时,helm会将用户设置的参数值通过模板引擎渲染到模板文件里,然后再将渲染后的结果发送给kubernetes。
  • values.yaml 这个文件包含了chart的 默认值 。这些值会在用户执行 helm installhelm upgrade 时被相应的命令行参数覆盖。
  • Chart.yaml 文件包含了该chart的描述。你可以从模板中访问它。charts/目录可以包含其他的chart。

Chart.yaml

apiVersion: The chart API version (required)
name: The name of the chart (required)
version: A SemVer 2 version (required)
kubeVersion: A SemVer range of compatible Kubernetes versions (optional)
description: A single-sentence description of this project (optional)
type: The type of the chart (optional)
keywords:- A list of keywords about this project (optional)
home: The URL of this projects home page (optional)
sources:- A list of URLs to source code for this project (optional)
dependencies: # A list of the chart requirements (optional)- name: The name of the chart (nginx)version: The version of the chart ("1.2.3")repository: (optional) The repository URL ("https://example.com/charts") or alias ("@repo-name")condition: (optional) A yaml path that resolves to a boolean, used for enabling/disabling charts (e.g. subchart1.enabled )tags: # (optional)- Tags can be used to group charts for enabling/disabling togetherimport-values: # (optional)- ImportValues holds the mapping of source values to parent key to be imported. Each item can be a string or pair of child/parent sublist items.alias: (optional) Alias to be used for the chart. Useful when you have to add the same chart multiple times
maintainers: # (optional)- name: The maintainers name (required for each maintainer)email: The maintainers email (optional for each maintainer)url: A URL for the maintainer (optional for each maintainer)
icon: A URL to an SVG or PNG image to be used as an icon (optional).
appVersion: The version of the app that this contains (optional). Needn't be SemVer. Quotes recommended.
deprecated: Whether this chart is deprecated (optional, boolean)
annotations:example: A list of annotations keyed by name (optional).

Chart 类型

type字段定义了chart的类型。有两种类型: applicationlibraryapplication 是默认类型,是可以完全操作的标准chart。 库类型 chart 提供针对chart构建的实用程序和功能。 库类型chart与应用类型chart不同,因为它不能安装,通常不包含任何资源对象。
应用类型chart 可以作为库类型chart使用。可以通过将类型设置为 library来实现。 然后这个库就被渲染成了一个库类型chart,所有的实用程序和功能都可以使用。所有的资源对象不会被渲染。

Chart 依赖

Helm 中,chart可能会依赖其他任意个chart。 这些依赖可以使用Chart.yaml文件中的dependencies 字段动态链接,或者被带入到charts/ 目录并手动配置。

dependencies:- name: apacheversion: 1.2.3repository: https://example.com/charts- name: mysqlversion: 3.2.1repository: https://another.example.com/charts
  • name字段是你需要的chart的名称
  • version字段是你需要的chart的版本
  • repository字段是chart仓库的完整URL。必须使用helm repo add在本地添加仓库
  • 你可以使用仓库的名称代替URL
$ helm repo add fantastic-charts https://fantastic-charts.storage.googleapis.com
dependencies:- name: awesomenessversion: 1.0.0repository: "@fantastic-charts"

一旦你定义好了依赖,运行 helm dependency update 就会使用你的依赖文件下载所有你指定的chart到你的charts/目录。

当 helm dependency update 拉取chart时,会在charts/目录中形成一个chart包。因此对于上面的示例,会在chart目录中期望看到以下文件

charts/apache-1.2.3.tgzmysql-3.2.1.tgz

Templates and Values

Helm Chart 模板是按照 Go 模板语言书写, 增加了50个左右的附加模板函数, 这些函数来自 Sprig 库和一些其他 指定的函数。

所有模板文件存储在chart的 templates/ 文件夹。 当Helm渲染chart时,它会通过模板引擎遍历目录中的每个文件。

模板的Value通过两种方式提供:

  • Chart开发者可以在chart中提供一个命名为 values.yaml 的文件。这个文件包含了默认值。
  • Chart用户可以提供一个包含了value的YAML文件。可以在命令行使用 helm install命令时提供。

当用户提供自定义value时,这些value会覆盖chart的values.yaml文件中value。

模板文件

模板文件遵守书写Go模板的标准惯例.

示例:

apiVersion: v1
kind: ReplicationController
metadata:name: deis-databasenamespace: deislabels:app.kubernetes.io/managed-by: deis
spec:replicas: 1selector:app.kubernetes.io/name: deis-databasetemplate:metadata:labels:app.kubernetes.io/name: deis-databasespec:serviceAccount: deis-databasecontainers:- name: deis-databaseimage: {{ .Values.imageRegistry }}/postgres:{{ .Values.dockerTag }}imagePullPolicy: {{ .Values.pullPolicy }}ports:- containerPort: 5432env:- name: DATABASE_STORAGEvalue: {{ default "minio" .Values.storage }}

Values文件

针对前面部分的模板,values.yaml文件提供的必要值如下:

imageRegistry: "quay.io/deis"
dockerTag: "latest"
pullPolicy: "Always"
storage: "s3"

然后在模板文件中使用.Values对象就可以任意访问这些值了

注意:chart包含的默认values文件必须被命名为values.yaml。不过在命令行可以通过-f指定其他文件。

Hook 机制

Helm 提供了一个 hook 机制允许chart开发者在发布生命周期的某些点进行干预。比如你可以使用hook用于:

  • 安装时在加载其他chart之前加载配置映射或密钥
  • 安装新chart之前执行备份数据库的任务,然后在升级之后执行第二个任务用于存储数据。
  • 在删除发布之前执行一个任务以便在删除服务之前退出滚动。

helm定义了以下hook:

  • pre-install 在模板渲染之后,Kubernetes资源创建之前执行
  • post-install 在所有资源加载到Kubernetes之后执行
  • pre-delete 在Kubernetes删除之前,执行删除请求
  • post-delete 在所有的版本资源删除之后执行删除请求
  • pre-upgrade 在模板渲染之后,资源更新之前执行一个升级请求
  • post-upgrade 所有资源升级之后执行一个升级请求
  • pre-rollback 在模板渲染之后,资源回滚之前,执行一个回滚请求
  • post-rollback 在所有资源被修改之后执行一个回滚请求
  • test 调用Helm test子命令时执行 ( test文档)

示例:

apiVersion: batch/v1
kind: Job
metadata:name: "some-job"labels:app.kubernetes.io/managed-by: {{ .Release.Service | quote }}app.kubernetes.io/instance: {{ .Release.Name | quote }}app.kubernetes.io/version: {{ .Chart.AppVersion }}helm.sh/chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"annotations:# This is what defines this resource as a hook. Without this line, the# job is considered part of the release.# 在所有资源加载到Kubernetes之后执行"helm.sh/hook": post-install# 可以为钩子定义权重,这有助于建立一个确定性的执行顺序"helm.sh/hook-weight": "-5"# 定义策略来决定何时删除对应的钩子资源"helm.sh/hook-delete-policy": hook-succeeded...此处省略...

内置对象

Release

Release对象描述了版本发布本身

  • Release.Name: release名称
  • Release.Namespace: 版本中包含的命名空间(如果manifest没有覆盖的话)
  • Release.IsUpgrade: 如果当前操作是升级或回滚的话,该值将被设置为true
  • Release.IsInstall: 如果当前操作是安装的话,该值将被设置为true
  • Release.Revision: 此次修订的版本号。安装时是1,每次升级或回滚都会自增
  • Release.Service: 该service用来渲染当前模板

Values

Values对象是从values.yaml文件和用户提供的文件传进模板的。默认为空

Chart

Chart.yaml 文件内容。 Chart.yaml里的所有数据在这里都可以可访问的。比如 {{ .Chart.Name }}-{{ .Chart.Version }} 会打印出 mychart-0.1.0

Files

在chart中提供访问所有的非特殊文件的对象。你不能使用它访问Template对象,只能访问其他文件。

  • Files.Get 通过文件名获取文件的方法。 (.Files.Get config.ini)
  • Files.GetBytes 用字节数组代替字符串获取文件内容的方法。 对图片之类的文件很有用
  • Files.Glob 用给定的shell glob模式匹配文件名返回文件列表的方法
  • Files.Lines 逐行读取文件内容的方法。迭代文件中每一行时很有用
  • Files.AsSecrets 使用Base 64编码字符串返回文件体的方法
  • Files.AsConfig 使用YAML格式返回文件体的方法

Capabilities

  • Capabilities.APIVersions 是一个版本列表
  • Capabilities.APIVersions.Has $version 说明集群中的版本 (比如,batch/v1) 或是资源 (比如, apps/v1/Deployment) 是否可用
  • Capabilities.KubeVersion 和Capabilities.KubeVersion.Version 是Kubernetes的版本号
  • Capabilities.KubeVersion.Major Kubernetes的主版本
  • Capabilities.KubeVersion.Minor Kubernetes的次版本
  • Capabilities.HelmVersion 包含Helm版本详细信息的对象,和 helm version 的输出一致
  • Capabilities.HelmVersion.Version 是当前Helm语义格式的版本
  • Capabilities.HelmVersion.GitCommit Helm的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)

Helm — Chart介绍相关推荐

  1. K8S之HELM详细介绍

    文章目录 一.基本概念 二. 组件架构 三 .工作原理 3.1 .Chart install 3.2 .Chart update 3.3 .Chart Rollback 3.4.Chart处理依赖 四 ...

  2. Oracle的Fn无服务器平台添加了Prometheus支持和安装于Kubernetes的Helm Chart

    \ 看新闻很累?看技术新闻更累?试试下载InfoQ手机客户端,每天上下班路上听新闻,有趣还有料! \ \\ 近期在美国Austin市召开的KubeCon北美大会上,InfoQ与Oracle容器组的副总 ...

  3. Helm基本介绍及快速入门

    文章目录 Helm基本介绍及快速入门 一.Helm基本介绍 Helm简介 Helm 相关组件及概念 二.Helm部署 Helm客户端安装 校验是否安装成功 三.Helm 使用 使用仓库(helm re ...

  4. Helm系列-helm chart实战(一)

    目录 1. 什么是Chart? 2. Chart 基础使用 2.1 查找 Chart 2.1.1  搜索所有公开可用的 charts 2.1.2 搜索本地 stable 源中可用的 charts 2. ...

  5. Helm Chart 多环境、多集群交付实践,透视资源拓扑和差异

    Helm Charts [ 1] 如今已是一种非常流行的软件打包方式,在其应用市场中你可以找到接近一万款适用于云原生环境的软件.然后在如今的混合云多集群环境中,业务越来越依赖部署到不同的集群.不同的环 ...

  6. 从入门到实践:创作一个自己的 Helm Chart

    前言 我们平时在日常生活中会经常在不同的平台上与各种各样的应用打交道,比如从苹果的 App Store 里下载的淘宝.高德.支付宝等应用,或者是在 PC 端安装的 Word.Photoshop.Ste ...

  7. docker私有仓库harbor配置helm chart仓库(安装helm chart插件)

    harbor配置helm chart仓库 1.harbor 安装的时候 默认没有helm charts的仓库,如果已经安装过重新执行安装即可,不需要prepare docker-compose sto ...

  8. helm安装postgres_添加到postgres数据库外的keycloak k8s helm chart环境参数

    我是Kubernetes和helm-charts的新手,并试图让Keycloak在Postgres中保存数据而不是在H2中(因为他默认情况下这样做) . Postgres将由单独的头盔图创建 . 首先 ...

  9. helm chart

    helm  功能近似于 yum 1.  本地 helm 初始化: helm init helm init --upgrade --tiller-image=hub.easystack.io/capta ...

  10. Helm chart仓库操作

    配置国内存放 chart 仓库的地址 chart图标是存放资源清单的东西,它是存在于远程仓库当中的 阿里云仓库(https://kubernetes.oss-cn-hangzhou.aliyuncs. ...

最新文章

  1. java object转int_Java字节码文件解析
  2. 关于 ie8不兼容的一些方法
  3. 【渝粤教育】国家开放大学2019年春季 3896人文英语1 参考试题
  4. 实用的HTML5的上传图片方法
  5. Java写入磁盘阵列_磁盘阵列RAID介绍及计算公式
  6. Tomcat根目录下work文件夹的作用
  7. html5 list 拖拽排序,vue实现可拖拽排序的列表
  8. MYSQL have_innodb DISABLED无法创建innodb类型的表
  9. gogs app.ini文件配置项说明
  10. 《Unix环境高级编程》学习之Unix标准
  11. 8年Android开发教你如何写简历,社招面试心得
  12. python ttf font weight_使用FontCreator将ttf字体制作多字重字体并打包为Magisk字体模块...
  13. 数独问题(java)
  14. Navicat 设置自动插入时间触发器
  15. Win10卸载 人脉
  16. 关于Qt各个版本的下载地址
  17. TextView.setText()为什么会出错
  18. 使用fastjson字符串对象互转
  19. C/C++大学生考勤系统
  20. 怒了!维基解密开放爆料数据库,内容涉及全是美国“脏事”!

热门文章

  1. 我被老板炒鱿鱼了!因为我在IDE里看漂亮小姐姐跳舞!(IntelliJ IDEA插件开发之打造炫酷动态背景墙)
  2. Unity3d打包程序报错NotSupportedException: Encoding 437 data could not be found.
  3. 2022-2027年中国会议行业市场深度分析及投资战略规划报告
  4. 携程2017 校招编程题
  5. wex5使用java语言_WeX5学习笔记之调用后端服务
  6. 公司如何使用开源软件
  7. mysql5.6 relay.info_Relay log 导致复制启动失败
  8. 分享一个软件测试工程师的年终总结
  9. lzg_ad:FBWF技术概述
  10. 康耐视智能相机更新固件版本方式