chart 模板【轉】

Helm 經過模板建立 Kubernetes 可以理解的 YAML 格式的資源配置文件,咱們將經過例子來學習如何使用模板。mysql

以 templates/secrets.yaml 爲例:sql

從結構看,文件的內容很是像 Secret 配置,只是大部分屬性值變成了{{ xxx }}。這些 {{ xxx }} 其實是模板的語法。Helm 採用了 Go 語言的模板來編寫 chart。Go 模板很是強大,支持變量、對象、函數、流控制等功能。下面咱們經過解析 templates/secrets.yaml 快速學習模板。函數

① {{ template "mysql.fullname" . }} 定義 Secret 的 name
關鍵字 template 的做用是引用一個子模板 mysql.fullname。這個子模板是在 templates/_helpers.tpl 文件中定義的。學習

這個定義仍是很複雜的,由於它用到了模板語言中的對象、函數、流控制等概念。如今看不懂不要緊,這裏咱們學習的重點是:若是存在一些信息多個模板都會用到,則可在 templates/_helpers.tpl 中將其定義爲子模板,而後經過 templates 函數引用。編碼

這裏 mysql.fullname 是由 release 與 chart 兩者名字拼接組成。code

根據 chart 的最佳實踐,全部資源的名稱都應該保持一致,對於咱們這個 chart,不管 Secret 仍是 Deployment、PersistentVolumeClaim、Service,它們的名字都是子模板 mysql.fullname 的值。對象

② Chart 和 Release 是 Helm 預約義的對象,每一個對象都有本身的屬性,能夠在模板中使用。若是使用下面命令安裝 chart:blog

helm install stable/mysql -n my

那麼:
{{ .Chart.Name }} 的值爲 mysql
{{ .Chart.Version }} 的值爲 0.3.0
{{ .Release.Name }} 的值爲 my
{{ .Release.Service }} 始終取值爲 Tiller
{{ template "mysql.fullname" . }} 計算結果爲 my-mysql資源

③ 這裏指定 mysql-root-password 的值,不過使用了 if-else 的流控制,其邏輯爲:
若是 .Values.mysqlRootPassword 有值,則對其進行 base64 編碼;不然隨機生成一個 10 位的字符串並編碼。文檔

Values 也是預約義的對象,表明的是 values.yaml 文件。而 .Values.mysqlRootPassword 則是 values.yaml 中定義的 mysqlRootPassword 參數:

由於 mysqlRootPassword 被註釋掉了,沒有賦值,因此邏輯判斷會走 else,即隨機生成密碼。

randAlphaNumb64encquote 都是 Go 模板語言支持的函數,函數之間能夠經過管道 | 鏈接。{{ randAlphaNum 10 | b64enc | quote }} 的做用是首先隨機產生一個長度爲 10 的字符串,而後將其 base64 編碼,最後兩邊加上雙引號。

templates/secrets.yaml 這個例子展現了 chart 模板主要的功能,咱們最大的收穫應該是:模板將 chart 參數化了,經過 values.yaml 能夠靈活定製應用。

不管多複雜的應用,用戶均可以用 Go 模板語言編寫出 chart。無非是使用到更多的函數、對象和流控制。對於初學者,個人建議是儘可能參考官方的 chart。根據二八定律,這些 chart 已經覆蓋了絕大部分狀況,並且採用了最佳實踐。如何遇到不懂的函數、對象和其餘語法,可參考官網文檔 https://docs.helm.sh

有了上面 chart 結構和模板的知識後,下節咱們將從新實踐一次 MySQL chart,相信會有更多收穫。

相關文章
相關標籤/搜索