Helm — Chart介绍
文章目錄
- Charts
- Charts 結(jié)構(gòu)
- Chart.yaml
- Chart 類(lèi)型
- Chart 依賴
- Templates and Values
- 模板文件
- Values文件
- Hook 機(jī)制
- 內(nèi)置對(duì)象
- Release
- Values
- Chart
- Files
- Capabilities
- Template
Charts
Charts描述的是一組k8s資源相關(guān)的文件集合,用戶可以通過(guò)簡(jiǎn)單地修改一些參數(shù)使得helm部署的應(yīng)用符合我們的要求。
Charts 結(jié)構(gòu)
wordpress/Chart.yaml # 包含了chart信息的YAML文件LICENSE # 可選: 包含chart許可證的純文本文件README.md # 可選: 可讀的README文件values.yaml # chart 默認(rèn)的配置值values.schema.json # 可選: 一個(gè)使用JSON結(jié)構(gòu)的values.yaml文件charts/ # 包含chart依賴的其他chartcrds/ # 自定義資源的定義templates/ # 模板目錄, 當(dāng)和values 結(jié)合時(shí),可生成有效的Kubernetes manifest文件templates/NOTES.txt # 可選: 包含簡(jiǎn)要使用說(shuō)明的純文本文件- templates/ 目錄包括了模板文件。安裝應(yīng)用時(shí),helm會(huì)將用戶設(shè)置的參數(shù)值通過(guò)模板引擎渲染到模板文件里,然后再將渲染后的結(jié)果發(fā)送給kubernetes。
- values.yaml 這個(gè)文件包含了chart的 默認(rèn)值 。這些值會(huì)在用戶執(zhí)行 helm install 或 helm upgrade 時(shí)被相應(yīng)的命令行參數(shù)覆蓋。
- Chart.yaml 文件包含了該chart的描述。你可以從模板中訪問(wèn)它。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 類(lèi)型
type字段定義了chart的類(lèi)型。有兩種類(lèi)型: application 和 library。 application 是默認(rèn)類(lèi)型,是可以完全操作的標(biāo)準(zhǔn)chart。 庫(kù)類(lèi)型 chart 提供針對(duì)chart構(gòu)建的實(shí)用程序和功能。 庫(kù)類(lèi)型chart與應(yīng)用類(lèi)型chart不同,因?yàn)樗荒馨惭b,通常不包含任何資源對(duì)象。
應(yīng)用類(lèi)型chart 可以作為庫(kù)類(lèi)型chart使用??梢酝ㄟ^(guò)將類(lèi)型設(shè)置為 library來(lái)實(shí)現(xiàn)。 然后這個(gè)庫(kù)就被渲染成了一個(gè)庫(kù)類(lèi)型chart,所有的實(shí)用程序和功能都可以使用。所有的資源對(duì)象不會(huì)被渲染。
Chart 依賴
Helm 中,chart可能會(huì)依賴其他任意個(gè)chart。 這些依賴可以使用Chart.yaml文件中的dependencies 字段動(dòng)態(tài)鏈接,或者被帶入到charts/ 目錄并手動(dòng)配置。
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倉(cāng)庫(kù)的完整URL。必須使用helm repo add在本地添加倉(cāng)庫(kù)
- 你可以使用倉(cāng)庫(kù)的名稱代替URL
一旦你定義好了依賴,運(yùn)行 helm dependency update 就會(huì)使用你的依賴文件下載所有你指定的chart到你的charts/目錄。
當(dāng) helm dependency update 拉取chart時(shí),會(huì)在charts/目錄中形成一個(gè)chart包。因此對(duì)于上面的示例,會(huì)在chart目錄中期望看到以下文件
charts/apache-1.2.3.tgzmysql-3.2.1.tgzTemplates and Values
Helm Chart 模板是按照 Go 模板語(yǔ)言書(shū)寫(xiě), 增加了50個(gè)左右的附加模板函數(shù), 這些函數(shù)來(lái)自 Sprig 庫(kù)和一些其他 指定的函數(shù)。
所有模板文件存儲(chǔ)在chart的 templates/ 文件夾。 當(dāng)Helm渲染chart時(shí),它會(huì)通過(guò)模板引擎遍歷目錄中的每個(gè)文件。
模板的Value通過(guò)兩種方式提供:
- Chart開(kāi)發(fā)者可以在chart中提供一個(gè)命名為 values.yaml 的文件。這個(gè)文件包含了默認(rèn)值。
- Chart用戶可以提供一個(gè)包含了value的YAML文件??梢栽诿钚惺褂?helm install命令時(shí)提供。
當(dāng)用戶提供自定義value時(shí),這些value會(huì)覆蓋chart的values.yaml文件中value。
模板文件
模板文件遵守書(shū)寫(xiě)Go模板的標(biāo)準(zhǔn)慣例.
示例:
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文件
針對(duì)前面部分的模板,values.yaml文件提供的必要值如下:
imageRegistry: "quay.io/deis" dockerTag: "latest" pullPolicy: "Always" storage: "s3"然后在模板文件中使用.Values對(duì)象就可以任意訪問(wèn)這些值了
注意:chart包含的默認(rèn)values文件必須被命名為values.yaml。不過(guò)在命令行可以通過(guò)-f指定其他文件。
Hook 機(jī)制
Helm 提供了一個(gè) hook 機(jī)制允許chart開(kāi)發(fā)者在發(fā)布生命周期的某些點(diǎn)進(jìn)行干預(yù)。比如你可以使用hook用于:
- 安裝時(shí)在加載其他chart之前加載配置映射或密鑰
- 安裝新chart之前執(zhí)行備份數(shù)據(jù)庫(kù)的任務(wù),然后在升級(jí)之后執(zhí)行第二個(gè)任務(wù)用于存儲(chǔ)數(shù)據(jù)。
- 在刪除發(fā)布之前執(zhí)行一個(gè)任務(wù)以便在刪除服務(wù)之前退出滾動(dòng)。
helm定義了以下hook:
- pre-install 在模板渲染之后,Kubernetes資源創(chuàng)建之前執(zhí)行
- post-install 在所有資源加載到Kubernetes之后執(zhí)行
- pre-delete 在Kubernetes刪除之前,執(zhí)行刪除請(qǐng)求
- post-delete 在所有的版本資源刪除之后執(zhí)行刪除請(qǐng)求
- pre-upgrade 在模板渲染之后,資源更新之前執(zhí)行一個(gè)升級(jí)請(qǐng)求
- post-upgrade 所有資源升級(jí)之后執(zhí)行一個(gè)升級(jí)請(qǐng)求
- pre-rollback 在模板渲染之后,資源回滾之前,執(zhí)行一個(gè)回滾請(qǐng)求
- post-rollback 在所有資源被修改之后執(zhí)行一個(gè)回滾請(qǐng)求
- test 調(diào)用Helm test子命令時(shí)執(zhí)行 ( 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之后執(zhí)行"helm.sh/hook": post-install# 可以為鉤子定義權(quán)重,這有助于建立一個(gè)確定性的執(zhí)行順序"helm.sh/hook-weight": "-5"# 定義策略來(lái)決定何時(shí)刪除對(duì)應(yīng)的鉤子資源"helm.sh/hook-delete-policy": hook-succeeded...此處省略...內(nèi)置對(duì)象
Release
Release對(duì)象描述了版本發(fā)布本身
- Release.Name: release名稱
- Release.Namespace: 版本中包含的命名空間(如果manifest沒(méi)有覆蓋的話)
- Release.IsUpgrade: 如果當(dāng)前操作是升級(jí)或回滾的話,該值將被設(shè)置為true
- Release.IsInstall: 如果當(dāng)前操作是安裝的話,該值將被設(shè)置為true
- Release.Revision: 此次修訂的版本號(hào)。安裝時(shí)是1,每次升級(jí)或回滾都會(huì)自增
- Release.Service: 該service用來(lái)渲染當(dāng)前模板
Values
Values對(duì)象是從values.yaml文件和用戶提供的文件傳進(jìn)模板的。默認(rèn)為空
Chart
Chart.yaml 文件內(nèi)容。 Chart.yaml里的所有數(shù)據(jù)在這里都可以可訪問(wèn)的。比如 {{ .Chart.Name }}-{{ .Chart.Version }} 會(huì)打印出 mychart-0.1.0
Files
在chart中提供訪問(wèn)所有的非特殊文件的對(duì)象。你不能使用它訪問(wèn)Template對(duì)象,只能訪問(wèn)其他文件。
- Files.Get 通過(guò)文件名獲取文件的方法。 (.Files.Get config.ini)
- Files.GetBytes 用字節(jié)數(shù)組代替字符串獲取文件內(nèi)容的方法。 對(duì)圖片之類(lèi)的文件很有用
- Files.Glob 用給定的shell glob模式匹配文件名返回文件列表的方法
- Files.Lines 逐行讀取文件內(nèi)容的方法。迭代文件中每一行時(shí)很有用
- Files.AsSecrets 使用Base 64編碼字符串返回文件體的方法
- Files.AsConfig 使用YAML格式返回文件體的方法
Capabilities
- Capabilities.APIVersions 是一個(gè)版本列表
- Capabilities.APIVersions.Has $version 說(shuō)明集群中的版本 (比如,batch/v1) 或是資源 (比如, apps/v1/Deployment) 是否可用
- Capabilities.KubeVersion 和Capabilities.KubeVersion.Version 是Kubernetes的版本號(hào)
- Capabilities.KubeVersion.Major Kubernetes的主版本
- Capabilities.KubeVersion.Minor Kubernetes的次版本
- Capabilities.HelmVersion 包含Helm版本詳細(xì)信息的對(duì)象,和 helm version 的輸出一致
- Capabilities.HelmVersion.Version 是當(dāng)前Helm語(yǔ)義格式的版本
- Capabilities.HelmVersion.GitCommit Helm的git sha1值
- Capabilities.HelmVersion.GitTreeState 是Helm git樹(shù)的狀態(tài)
- Capabilities.HelmVersion.GoVersion 是使用的Go編譯器版本
Template
包含當(dāng)前被執(zhí)行的當(dāng)前模板信息
- Template.Name: 當(dāng)前模板的命名空間文件路徑 (e.g. mychart/templates/mytemplate.yaml)
- Template.BasePath: 當(dāng)前chart模板目錄的路徑 (e.g. mychart/templates)
總結(jié)
以上是生活随笔為你收集整理的Helm — Chart介绍的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 阿里云虚拟主机和服务器的区别
- 下一篇: hihoder 1048