Helm — Chart介绍
文章目錄
- 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 install 或 helm 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的類型。有兩種類型: application 和 library。 application 是默認類型,是可以完全操作的標準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 dependency update 就會使用你的依賴文件下載所有你指定的chart到你的charts/目錄。
當 helm dependency update 拉取chart時,會在charts/目錄中形成一個chart包。因此對于上面的示例,會在chart目錄中期望看到以下文件
charts/apache-1.2.3.tgzmysql-3.2.1.tgzTemplates 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介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 阿里云虚拟主机和服务器的区别
- 下一篇: CSS:个人常用搜索框样式