k8s chart
Chart 文件結(jié)構(gòu)
chart 為一個(gè)目錄內(nèi)的文件集合。目錄名稱是 chart 的名稱(沒有版本信息)。例如,描述 WordPress 的 chart 將被存儲(chǔ)在 wordpress / 目錄中。
在這個(gè)目錄里面,Helm 期望如下這樣一個(gè)的結(jié)構(gòu)的目錄樹:
wordpress/Chart.yaml # 包含"chart"信息的YAML文件LICENSE # 可選項(xiàng):包含"chart"許可證的純文本文件README.md # 可選:可讀的自述文件requirements.yaml # 可選:列出"chart"依賴項(xiàng)的YAML文件values.yaml # 此"chart"的默認(rèn)配置值charts/ # 包含此'chart'所依賴的任何圖表的目錄。templates/ # 模板目錄,當(dāng)與值結(jié)合時(shí),將生成有效的Kubernetes清單文件。templates/NOTES.txt # 可選:包含簡短使用說明的純文本文件Helm 保留使用 charts / 和 templates / 目錄以及上面列出的文件名稱。其他文件將被忽略。
?
Chart.yaml 文件
Chart.yaml?文件是 chart 所必需的。它包含以下字段:
apiVersion: # 圖表API版本,始終為“v1”(必需) name: # 圖表的名稱(必需) version: # SemVer 2版本(必需) kubeVersion: # 一系列兼容的Kubernetes版本(可選) description: # 本項(xiàng)目的一句話描述(可選) keywords:- # 有關(guān)此項(xiàng)目的關(guān)鍵字列表(可選) home: # 此項(xiàng)目主頁的URL(可選) sources:- # 指向此項(xiàng)目源代碼的URL列表(可選) maintainers: # 維護(hù)人員信息(可選)- name: # 維護(hù)者名稱(每個(gè)維護(hù)者必須填寫)email: # 維護(hù)者的電子郵件(每個(gè)維護(hù)者可選)url: # 維護(hù)者的URL(每個(gè)維護(hù)者可選) engine: gotpl # 模板引擎的名稱(可選,默認(rèn)為gotpl) icon: # 要用作圖標(biāo)的SVG或PNG圖像的URL(可選) appVersion: # 包含的應(yīng)用程序版本(可選)。這不必是SemVer deprecated: # 此“chart”是否已棄用(可選,布爾值) tillerVersion: 此“chart”所需的“Tiller”版本。這應(yīng)該表示為SemVer范圍:“>2.0.0”(可選)如果熟悉?Chart.yaml?Helm Classic 的文件格式,注意到指定依賴性的字段已被刪除。這是因?yàn)樾碌?chart 使用 charts / 目錄表示依賴關(guān)系。
其他字段將被忽略。
?
Charts 和版本控制
每個(gè) chart 都必須有一個(gè)版本號(hào)。版本必須遵循?SemVer 2?標(biāo)準(zhǔn)。與 Helm Class 格式不同,Kubernetes Helm 使用版本號(hào)作為發(fā)布標(biāo)記。存儲(chǔ)庫中的軟件包由名稱加版本識(shí)別。
例如,nginx?version 字段設(shè)置為 1.2.3 將被命名為:
nginx-1.2.3.tgz更復(fù)雜的 SemVer 2 命名也是支持的,例如 version: 1.2.3-alpha.1+ef365。但非 SemVer 命名是明確禁止的。
注意?:雖然 Helm Classic 和 Deployment Manager 在 chart 方面都非常適合 GitHub,但 Kubernetes Helm 并不依賴或需要 GitHub 甚至 Git。因此,它不使用 Git SHA 進(jìn)行版本控制。
許多 Helm 工具都使用?Chart.yaml?的 version?字段,其中包括 CLI 和 Tiller 服務(wù)。在生成包時(shí),helm package 命令將使用它在 Chart.yaml 中的版本名作為包名。系統(tǒng)假定 chart 包名稱中的版本號(hào)與?Chart.yaml?中的版本號(hào)相匹配。不符合這個(gè)情況會(huì)導(dǎo)致錯(cuò)誤。
appVersion 字段
請(qǐng)注意,appVersion?字段與?version?字段無關(guān)。這是一種指定應(yīng)用程序版本的方法。例如,drupal?chart 可能有一個(gè)?appVersion: 8.2.1,表示 chart 中包含的 Drupal 版本(默認(rèn)情況下)是?8.2.1。該字段是信息標(biāo)識(shí),對(duì) chart 版本沒有影響。
棄用 charts
在管理 chart tepo 庫中的 chart 時(shí),有時(shí)需要棄用 chart。Chart.yaml?的 deprecated?字段可用于將 chart 標(biāo)記為已棄用。如果存儲(chǔ)庫中最新版本的 chart 標(biāo)記為已棄用,則整個(gè) chart 被視為已棄用。chart 名稱稍后可以通過發(fā)布未標(biāo)記為已棄用的較新版本來重新使用。廢棄 chart 的工作流程根據(jù)?helm/charts?項(xiàng)目的工作流程如下:
- 更新 chart 的?Chart.yaml?以將 chart 標(biāo)記為啟用,并且更新版本
- 在 chart Repository 中發(fā)布新的 chart 版本
- 從源代碼庫中刪除 chart(例如 git)
?
Chart 許可證文件,自述文件和說明文件
Chart 還可以包含描述 chart 的安裝,配置,使用和許可證的文件。
LICENSE 文件是一個(gè)純文本文件,包含 chart 的 [許可證](https://en.wikipedia.org/wiki/Software_license)。?Chart 可以包含許可證,它可能在模板中具有編程邏輯,因此不僅僅是配置。 如果需要,還可以為 chart 安裝的應(yīng)用程序提供單獨(dú)的許可證。
Chart 的自述文件應(yīng)由 Markdown(README.md)語法格式化,并且通常應(yīng)包含:
- chart 提供的應(yīng)用程序或服務(wù)的描述
- 運(yùn)行 chart 的任何前提條件或要求
- 選項(xiàng)?values.yaml?和默認(rèn)值的說明
- 任何其他可能與安裝或配置 chart 相關(guān)的信息
chart 還可以包含一個(gè)簡短的純文本?templates/NOTES.txt?文件,在安裝后以及查看版本狀態(tài)時(shí)將打印出來。此文件將作為模板?template?進(jìn)行評(píng)估 ,并可用于顯示使用說明,后續(xù)步驟或任何其他與發(fā)布 chart 相關(guān)的信息。例如,可以提供用于連接到數(shù)據(jù)庫或訪問 Web UI 的指令。由于運(yùn)行時(shí),該文件被打印到標(biāo)準(zhǔn)輸出?helm install?或?helm status,建議保持內(nèi)容簡短并把更多細(xì)節(jié)指向自述文件。
?
Chart 依賴關(guān)系
在 Helm 中,一個(gè) chart 可能依賴于任何數(shù)量的其他 chart。這些依賴關(guān)系可以通過 requirements.yaml 文件動(dòng)態(tài)鏈接或引入?charts/?目錄并手動(dòng)管理。
雖然有一些團(tuán)隊(duì)需要手動(dòng)管理依賴關(guān)系的優(yōu)勢,但聲明依賴關(guān)系的首選方法是使用 chart 內(nèi)部的?requirements.yaml?文件。
注意:?傳統(tǒng) Helm 的 Chart.yaml?dependencies:?部分字段已被完全刪除棄用。
?
用?requirements.yaml?來管理依賴關(guān)系
requirements.yaml?文件是列出 chart 的依賴關(guān)系的簡單文件。
dependencies:- name: apacheversion: 1.2.3repository: http://example.com/charts- name: mysqlversion: 3.2.1repository: http://another.example.com/charts- 該 name 字段是 chart 的名稱。
- version 字段是 chart 的版本。
- repository 字段是 chart repo 的完整 URL。請(qǐng)注意,還必須使用 helm repo add 添加該 repo 到本地才能使用。
有了依賴關(guān)系文件,你可以通過運(yùn)行?helm dependency update?,它會(huì)使用你的依賴關(guān)系文件將所有指定的 chart 下載到你的?charts/?目錄中。
$ helm dep up foochart Hang tight while we grab the latest from your chart repositories... ...Successfully got an update from the "local" chart repository ...Successfully got an update from the "stable" chart repository ...Successfully got an update from the "example" chart repository ...Successfully got an update from the "another" chart repository Update Complete. Happy Helming! Saving 2 charts Downloading apache from repo http://example.com/charts Downloading mysql from repo http://another.example.com/charts當(dāng)?helm dependency update?檢索 chart 時(shí),它會(huì)將它們作為 chart 存檔存儲(chǔ)在?charts/?目錄中。因此,對(duì)于上面的示例,可以在 chart 目錄中看到以下文件:
charts/apache-1.2.3.tgzmysql-3.2.1.tgz通過?requirements.yaml?管理 chart 是一種輕松更新 chart 的好方法,還可以在整個(gè)團(tuán)隊(duì)中共享 requirements 信息。
?
requirements.yaml 中的?alias?字段
除上述其他字段外,每個(gè) requirement 條目可能包含可選字段?alias。
為依賴的 chart 添加別名會(huì)將 chart 放入依賴關(guān)系中,并使用別名作為新依賴關(guān)系的名稱。
如果需要使用其他名稱訪問 chart,可以使用?alias。
# parentchart/requirements.yaml dependencies:- name: subchartrepository: http://localhost:10191version: 0.1.0alias: new-subchart-1- name: subchartrepository: http://localhost:10191version: 0.1.0alias: new-subchart-2- name: subchartrepository: http://localhost:10191version: 0.1.0在上面的例子中,我們將得到 parentchart 的 3 個(gè)依賴關(guān)系
subchart new-subchart-1 new-subchart-2實(shí)現(xiàn)這一目的的手動(dòng)方法是?charts/?中用不同名稱多次復(fù)制 / 粘貼目錄中的同一 chart 。
?
requirements.yaml 中的?tags?和?condition?字段
除上述其他字段外,每個(gè)需求條目可能包含可選字段?tags?和?condition(條件)。
所有 charts 都會(huì)默認(rèn)加載。如果存在?tags?或?condition?字段,將對(duì)它們進(jìn)行評(píng)估并用于控制應(yīng)用的 chart 的加載。
Condition - condition 字段包含一個(gè)或多個(gè) YAML 路徑(用逗號(hào)分隔)。如果此路徑存在于頂級(jí)父級(jí)的值中并且解析為布爾值,則將根據(jù)該布爾值啟用或禁用 chart。只有在列表中找到的第一個(gè)有效路徑才被評(píng)估,如果沒有路徑存在,那么該條件不起作用。
Tags - 標(biāo)簽字段是與此 chart 關(guān)聯(lián)的 YAML 標(biāo)簽列表。在頂級(jí)父級(jí)的值中,可以通過指定標(biāo)簽和布爾值來啟用或禁用所有帶有標(biāo)簽的 chart。
# parentchart/requirements.yaml dependencies:- name: subchart1repository: http://localhost:10191version: 0.1.0condition: subchart1.enabled, global.subchart1.enabledtags:- front-end- subchart1- name: subchart2repository: http://localhost:10191version: 0.1.0condition: subchart2.enabled,global.subchart2.enabledtags:- back-end- subchart2 # parentchart/values.yamlsubchart1:enabled: true tags:front-end: falseback-end: true在上面的示例中,所有帶有標(biāo)簽的?front-end 的charts 都將被禁用,但由于?subchart1.enabled?的值在父項(xiàng)值中為 “真”,因此條件將覆蓋該?front-end?標(biāo)簽,subchart1?會(huì)啟用。
由于?subchart2?被標(biāo)記?back-end?和標(biāo)簽的計(jì)算結(jié)果為?true,subchart2?將被啟用。還要注意的是,雖然?subchart2?有一個(gè)在?requirements.yaml?中指定的條件,但父項(xiàng)的值中沒有對(duì)應(yīng)的路徑和值,因此條件無效。
?
使用命令行時(shí)帶有 tag 和 conditions
--set?參數(shù)可使用來更改 tag 和 conditions 值。
helm install --set tags.front-end=true --set subchart2.enabled=falsetags?和?conditions?解析
- Conditions (設(shè)置 values) 會(huì)覆蓋 tags 配置.。第一個(gè)存在的 condition 路徑生效,后續(xù)該 chart 的 condition 路徑將被忽略。
- 如果 chart 的某 tag 的任一 tag 的值為 true,那么該 tag 的值為 true,并啟用這個(gè) chart。
- Tags 和 conditions 值必須在頂級(jí)父級(jí)的值中進(jìn)行設(shè)置。
- tags:?值中的關(guān)鍵字必須是頂級(jí)關(guān)鍵字。目前不支持全局和嵌套?tags:?表格。
?
通過 requirements.yaml 導(dǎo)入子值
在某些情況下,希望允許子 chart 的值傳到父 chart 并作為通用默認(rèn)值共享。使用這種 exports 格式的另一個(gè)好處是它可以使未來的工具能夠考慮用戶可設(shè)置的值。
要導(dǎo)入的值的鍵可以在父 chart 文件中?requirements.yaml?使用 YAML list 指定。list 中的每個(gè)項(xiàng)目都是從子 chart?exports?字段導(dǎo)入的 key。
要導(dǎo)入不包含在 exports key 中的值,請(qǐng)使用子父級(jí)?child-parent?格式。下面描述了兩種格式的例子。
使用 exports 格式
如果子 chart 的 values.yaml 文件 exports 在根目錄中包含一個(gè)字段,則可以通過指定要導(dǎo)入的關(guān)鍵字將其內(nèi)容直接導(dǎo)入到父項(xiàng)的值中,如下例所示:
# parent's requirements.yaml file...import-values:- data # child's values.yaml file ... exports:data:myint: 99由于我們在導(dǎo)入列表中指定了?data?鍵,因此 Helm 會(huì)在 exports 子圖的字段中查找 data 鍵并導(dǎo)入其內(nèi)容。
最終的父值將包含我們的導(dǎo)出字段:
# parent's values file ... myint: 99請(qǐng)注意,父鍵 data 不包含在父 chart 的最終值中。如果需要指定父鍵,請(qǐng)使用'child-parent'格式。
使用 child-parent 格式
要訪問未包含在子 chart 鍵值?exports?的中的值,需要指定要導(dǎo)入的值的源鍵(child)和父 chart 值(parent)中的目標(biāo)路徑。
下面的例子中的?import-values?告訴 Helm 去拿在?child:?路徑發(fā)現(xiàn)的任何值,并將其復(fù)制到父值?parent:?指定的路徑
# parent's requirements.yaml file dependencies:- name: subchart1repository: http://localhost:10191version: 0.1.0...import-values:- child: default.dataparent: myimports在上面的例子中,在 subchart1default.data?的值中找到的值將被導(dǎo)入到父 chart 值中?myimports?的鍵值,詳細(xì)如下:
# parent's values.yaml filemyimports:myint: 0mybool: falsemystring: "helm rocks!" # subchart1's values.yaml filedefault:data:myint: 999mybool: true父 chart 的結(jié)果值為:
# parent's final valuesmyimports:myint: 999mybool: truemystring: "helm rocks!"父 chart 的最終值現(xiàn)在包含從 subchart1 導(dǎo)入的?myint?和?mybool?字段。
通過?charts/?目錄手動(dòng)管理依賴性
如果需要更多的控制依賴關(guān)系,可以通過將依賴的 charts 復(fù)制到?charts/?目錄中來明確表達(dá)這些依賴關(guān)系 。
依賴關(guān)系可以是 chart 歸檔(foo-1.2.3.tgz)或解壓縮的 chart 目錄。但它的名字不能從?_?或?.?開始。這些文件被 chart 加載器忽略。
例如,如果 WordPress chart 依賴于 Apache chart,則在 WordPress chart 的?charts/?目錄中提供(正確版本的)Apache chart:
wordpress:Chart.yamlrequirements.yaml# ...charts/apache/Chart.yaml# ...mysql/Chart.yaml# ...上面的示例顯示了 WordPress chart 如何通過在其?charts/?目錄中包含這些 charts 來表示它對(duì) Apache 和 MySQL 的依賴關(guān)系。
提示:?將依賴項(xiàng)放入 charts / 目錄,請(qǐng)使用?helm fetch?命令
使用依賴關(guān)系的操作方面影響
上面的部分解釋了如何指定 chart 依賴關(guān)系,但是這會(huì)如何影響使用?helm install?和?helm upgrade?的 chart 安裝?
假設(shè)名為 “A” 的 chart 創(chuàng)建以下 Kubernetes 對(duì)象
- namespace "A-Namespace"
- statefulset "A-StatefulSet"
- service "A-Service"
此外,A 依賴于創(chuàng)建對(duì)象的 chart B.
- namespace "B-Namespace"
- replicaset "B-ReplicaSet"
- service "B-Service"
安裝 / 升級(jí) chart A 后,會(huì)創(chuàng)建 / 修改單個(gè) Helm 版本。該版本將按以下順序創(chuàng)建 / 更新所有上述 Kubernetes 對(duì)象:
- A-Namespace
- B-Namespace
- A-StatefulSet
- B-ReplicaSet
- A-Service
- B-Service
這是因?yàn)楫?dāng) Helm 安裝 / 升級(jí) charts 時(shí),charts 中的 Kubernetes 對(duì)象及其所有依賴項(xiàng)都是如下
- 聚合成一個(gè)單一的集合; 然后
- 按類型排序,然后按名稱排序; 接著
- 按該順序創(chuàng)建 / 更新。
因此,單個(gè) release 是使用 charts 及其依賴關(guān)系創(chuàng)建的所有對(duì)象。
Kubernetes 類型的安裝順序由 kind_sorter.go 中的枚舉 InstallOrder 給出(the Helm source file))。
模板 Templates 和值 Values
Helm chart 模板是用 Go 模板語言?Go template language?編寫的 ,其中添加了來自 Sprig 庫?from the Sprig library?的 50 個(gè)左右的附加模板函數(shù)以及一些其他專用函數(shù)?specialized functions。
所有模板文件都存儲(chǔ)在 chart 的 templates / 文件夾中。當(dāng) Helm 渲染 charts 時(shí),它將通過模板引擎?zhèn)鬟f該目錄中的每個(gè)文件。
模板的值有兩種提供方法:
- chart 開發(fā)人員可能會(huì)在 chart 內(nèi)部提供一個(gè) values.yaml 文件。該文件可以包含默認(rèn)值。
- chart 用戶可能會(huì)提供一個(gè)包含值的 YAML 文件。這可以通過命令行提供?helm install -f。
當(dāng)用戶提供自定義值時(shí),這些值將覆蓋 chart 中 values.yaml?文件中的值。
模板文件
模板文件遵循用于編寫 Go 模板的標(biāo)準(zhǔn)約定(請(qǐng)參閱文?the text/template Go package documentation?以了解詳細(xì)信息)。示例模板文件可能如下所示:
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}}上面的示例基于?此網(wǎng)址,是 Kubernetes replication controller 的模板。它可以使用以下四個(gè)模板值(通常在 values.yaml 文件中定義 ):
- imageRegistry:Docker 鏡像的源。
- dockerTag:docker 鏡像的標(biāo)簽。
- pullPolicy:Kubernetes 鏡像拉取策略。
- storage:存儲(chǔ)后端,其默認(rèn)設(shè)置為?"minio"
所有這些值都由模板作者定義。Helm 不需要或指定參數(shù)。
要查更多 charts,請(qǐng)查看 Kubernetes charts 項(xiàng)目
預(yù)定義值
通過?values.yaml?文件(或通過?--set?標(biāo)志)提供的值可以從?.Values?模板中的對(duì)象訪問??梢栽谀0逯性L問其他預(yù)定義的數(shù)據(jù)片段。
以下值是預(yù)定義的,可用于每個(gè)模板,并且不能被覆蓋。與所有值一樣,名稱區(qū)分大小寫。
- Release.Name:release 的名稱(不是 chart 的)
- Release.Time:chart 版本上次更新的時(shí)間。這將匹配?Last Released?發(fā)布對(duì)象上的時(shí)間。
- Release.Namespace:chart release 發(fā)布的 namespace。
- Release.Service:處理 release 的服務(wù)。通常是 Tiller。
- Release.IsUpgrade:如果當(dāng)前操作是升級(jí)或回滾,則設(shè)置為 true。
- Release.IsInstall:如果當(dāng)前操作是安裝,則設(shè)置為 true。
- Release.Revision:版本號(hào)。它從 1 開始,并隨著每個(gè)?helm upgrade?增加。
- Chart:Chart.yaml?的內(nèi)容。chart 版本可以從?Chart.Version?和維護(hù)人員?Chart.Maintainers?一起獲得。
- Files:包含 chart 中所有非特殊文件的 map-like 對(duì)象。不會(huì)允許你訪問模板,但會(huì)讓你訪問存在的其他文件(除非它們被排除使用?.helmignore)??梢允褂?index .Files "file.name" 或使用. Files.Get name 或 .Files.GetString name 功能來訪問文件。也可以使用. Files.GetBytes 訪問該文件的內(nèi)容?[byte]
- Capabilities:包含有關(guān) Kubernetes 版本信息的 map-like 對(duì)象(.Capabilities.KubeVersion),Tiller(.Capabilities.TillerVersion) 和支持的 Kubernetes API 版本(.Capabilities.APIVersions.Has "batch/v1")
注意:?任何未知的 Chart.yaml 字段將被刪除。它們不會(huì)在 chart 對(duì)象內(nèi)部被訪問。因此,Chart.yaml 不能用于將任意結(jié)構(gòu)化的數(shù)據(jù)傳遞到模板中。values 文件可以用于傳遞。
值 values 文件
考慮到上一節(jié)中的模板?values.yaml,提供了如下必要值的信息:
imageRegistry: "quay.io/deis" dockerTag: "latest" pullPolicy: "Always" storage: "s3"values 文件是 YAML 格式的。chart 可能包含一個(gè)默認(rèn) values.yaml 文件。Helm install 命令允許用戶通過提供額外的 YAML 值來覆蓋值:
$ helm install --values=myvals.yaml wordpress當(dāng)以這種方式傳遞值時(shí),它們將被合并到默認(rèn) values 文件中。例如,考慮一個(gè)如下所示的 myvals.yaml 文件:
storage: "gcs"當(dāng)它與 chart 中 values.yaml 的內(nèi)容合并時(shí),生成的內(nèi)容將為:
imageRegistry: "quay.io/deis" dockerTag: "latest" pullPolicy: "Always" storage: "gcs"注意只有最后一個(gè)字段被覆蓋了,其他的不變。
注:?包含在 chart 內(nèi)的默認(rèn) values 文件必須命名?values.yaml。但是在命令行上指定的文件可以被命名為任何名稱。
注:?如果在 helm install 或 helm upgrade 使用?--set,則這些值僅在客戶端轉(zhuǎn)換為 YAML。
注意:?如果 values 文件中存在任何必需的條目,則可以使用'required'功能?'required' function?在 chart 模板中聲明它們
然后可以在模板內(nèi)部訪問任何這些?.Values?對(duì)象值 :
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}}范圍 Scope,依賴 Dependencies 和值 Values
values 文件可以聲明頂級(jí) chart 的值,也可以為 chart 的 charts / 目錄中包含的任何 chart 聲明值。或者,用不同的方式來描述它,values 文件可以為 chart 及其任何依賴項(xiàng)提供值。例如,上面的演示 WordPresschart 具有 mysql 和 apache 依賴性。values 文件可以為所有這些組件提供值:
title: "My WordPress Site" # Sent to the WordPress templatemysql:max_connections: 100 # Sent to MySQLpassword: "secret"apache:port: 8080 # Passed to Apache更高級(jí)別的 chart 可以訪問下面定義的所有變量。所以 WordPresschart 可以訪問 MySQL 密碼?.Values.mysql.password。但較低級(jí)別的 chart 無法訪問父 chart 中的內(nèi)容,因此 MySQL 將無法訪問該?title?屬性。同樣的,也不能訪問?apache.port。
值是命名空間限制的,但命名空間已被修剪。因此對(duì)于 WordPresschart 來說,它可以訪問 MySQL 密碼字段?.Values.mysql.password。但是對(duì)于 MySQL chart 來說,這些值的范圍已經(jīng)減小了,并且刪除了名 namespace 前綴,所以它會(huì)將密碼字段簡單地視為?.Values.password。
全局值
從 2.0.0-Alpha.2 開始,Helm 支持特殊的 “全局” 值。考慮前面例子的這個(gè)修改版本:
title: "My WordPress Site" # Sent to the WordPress templateglobal:app: MyWordPressmysql:max_connections: 100 # Sent to MySQLpassword: "secret"apache:port: 8080 # Passed to Apache上面添加了一個(gè) global 區(qū)塊,值?app: MyWordPress。此值可供所有 chart 使用?.Values.global.app。
比如,該 mysql 模板可以訪問?app?如. Values.global.app,apache chart 也同樣的。上面的 values 文件是這樣高效重新生成的:
title: "My WordPress Site" # Sent to the WordPress templateglobal:app: MyWordPressmysql:global:app: MyWordPressmax_connections: 100 # Sent to MySQLpassword: "secret"apache:global:app: MyWordPressport: 8080 # Passed to Apache這提供了一種與所有子 chart 共享一個(gè)頂級(jí)變量的方法,這對(duì)設(shè)置 metadata 中像標(biāo)簽這樣的屬性很有用。
如果子 chart 聲明了一個(gè)全局變量,則該全局將向下傳遞 (到子 chart 的子 chart),但不向上傳遞到父 chart。子 chart 無法影響父 chart 的值。
此外,父 chart 的全局變量優(yōu)先于子 chart 中的全局變量。
參考
當(dāng)涉及到編寫模板和 values 文件時(shí),有幾個(gè)標(biāo)準(zhǔn)參考可以幫助你。
- Go templates
- Extra template functions
- The YAML format
使用 Helm 管理 chart
該 helm 工具有幾個(gè)用于處理 chart 的命令。
它可以為你創(chuàng)建一個(gè)新的 chart:
$ helm create mychart Created mychart/編輯完 chart 后,helm?可以將其打包到 chart 壓縮包中:
$ helm package mychart Archived mychart-0.1.-.tgz可以用?helm?來幫助查找 chart 格式或信息的問題:
$ helm lint mychart No issues foundChart repo 庫
chart repo 庫是容納一個(gè)或多個(gè)封裝的 chart 的 HTTP 服務(wù)器。雖然 helm 可用于管理本地 chart 目錄,但在共享 chart 時(shí),首選機(jī)制是 chart repo 庫。
任何可以提供 YAML 文件和 tar 文件并可以回答 GET 請(qǐng)求的 HTTP 服務(wù)器都可以用作 repo 庫服務(wù)器。
Helm 附帶用于開發(fā)人員測試的內(nèi)置服務(wù)器(helm serve)。Helm 團(tuán)隊(duì)測試了其他服務(wù)器,包括啟用了網(wǎng)站模式的 Google Cloud Storage 以及啟用了網(wǎng)站模式的 S3。
repo 庫的主要特征是存在一個(gè)名為的特殊文件?index.yaml,它具有 repo 庫提供的所有軟件包的列表以及允許檢索和驗(yàn)證這些軟件包的元數(shù)據(jù)。
在客戶端,repo 庫使用?helm repo?命令進(jìn)行管理。但是,Helm 不提供將 chart 上傳到遠(yuǎn)程存儲(chǔ)服務(wù)器的工具。這是因?yàn)檫@樣做會(huì)增加部署服務(wù)器的需求,從而增加配置 repo 庫的難度。
Chart 起始包
helm create?命令采用可選?--starter?選項(xiàng),可以指定 “起始 chart”。
起始 chart 只是普通的 chart,位于 $HELM_HOME/starters。作為 chart 開發(fā)人員,可以創(chuàng)作專門設(shè)計(jì)用作起始的 chart。記住這些 chart 時(shí)應(yīng)考慮以下因素:
- Chart.yaml?將被生成器覆蓋。
- 用戶將期望修改這樣的 chart 內(nèi)容,因此文檔應(yīng)該指出用戶如何做到這一點(diǎn)。
- 所有 templates 目錄下的匹配項(xiàng)?<CHARTNAME>?將被替換為指定的 chart 名稱,以便起始 chart 可用作模板。另外,?values.yaml?的?<CHARTNAME>?也會(huì)被替換.
- 目前添加chart的唯一方法是手動(dòng)將其復(fù)制到$HELM_HOME/starters。在chart的文檔中,你需要解釋該過程。
?
?
?
?
總結(jié)
- 上一篇: 灯神动态规划(Dynamic Progr
- 下一篇: #import 指令 (C++)