開始使用
在本指南的此部分中,我們將建立一個圖表,然後新增第一個範本。我們在此建立的圖表將在本指南的其餘部分中使用。
首先,讓我們簡要了解一下 Helm 圖表。
圖表
如 圖表指南 中所述,Helm 圖表的結構如下
mychart/
Chart.yaml
values.yaml
charts/
templates/
...
templates/
目錄用於存放範本檔案。當 Helm 評估圖表時,它會將 templates/
目錄中的所有檔案傳送通過範本渲染引擎。然後,它會收集這些範本的結果,並將其傳送到 Kubernetes。
values.yaml
檔案對範本也很重要。此檔案包含圖表的 *預設值*。這些值可能會在 helm install
或 helm upgrade
期間由使用者覆蓋。
Chart.yaml
檔案包含圖表的描述。您可以從範本內部存取它。
charts/
目錄 *可能* 包含其他圖表(我們稱之為 *子圖表*)。在本指南的後面,我們將看到在範本渲染方面它們是如何工作的。
入門圖表
在本指南中,我們將建立一個名為 mychart
的簡單圖表,然後在圖表內建立一些範本。
$ helm create mychart
Creating mychart
mychart/templates/
的快速瀏覽
如果您查看 mychart/templates/
目錄,您會注意到那裡已經有一些檔案。
NOTES.txt
:圖表的「說明文字」。當您的使用者執行helm install
時,就會顯示這個說明文字。deployment.yaml
:用於建立 Kubernetes 部署 的基本資訊清單service.yaml
:用於為您的部署建立 服務端點 的基本資訊清單_helpers.tpl
:存放範本輔助程式的地方,您可以在整個圖表中重複使用這些輔助程式
我們要做的是... *將它們全部移除!* 這樣我們就可以從頭開始完成我們的教學。我們實際上會在過程中建立自己的 NOTES.txt
和 _helpers.tpl
。
$ rm -rf mychart/templates/*
當您編寫生產級圖表時,擁有這些圖表的基本版本會非常有用。因此,在您日常的圖表編寫過程中,您可能不會想要移除它們。
第一個範本
我們要建立的第一個範本將是一個 ConfigMap
。在 Kubernetes 中,ConfigMap 只是一個用於儲存組態資料的物件。其他東西,例如 Pod,可以存取 ConfigMap 中的資料。
因為 ConfigMap 是基本資源,所以它們是我們很好的起點。
讓我們從建立一個名為 mychart/templates/configmap.yaml
的檔案開始
apiVersion: v1
kind: ConfigMap
metadata:
name: mychart-configmap
data:
myvalue: "Hello World"
**提示:**範本名稱不需要遵循嚴格的命名模式。但是,我們建議對 YAML 檔案使用副檔名 .yaml
,對輔助程式使用 .tpl
。
上面的 YAML 檔案是一個基本的 ConfigMap,具有最少的必要欄位。由於這個檔案位於 mychart/templates/
目錄中,因此它會被傳送到範本引擎。
將像這樣的純 YAML 檔案放在 mychart/templates/
目錄中是可以的。當 Helm 讀取這個範本時,它會原封不動地將其傳送到 Kubernetes。
有了這個簡單的範本,我們現在就有一個可以安裝的圖表。我們可以像這樣安裝它
$ helm install full-coral ./mychart
NAME: full-coral
LAST DEPLOYED: Tue Nov 1 17:36:01 2016
NAMESPACE: default
STATUS: DEPLOYED
REVISION: 1
TEST SUITE: None
使用 Helm,我們可以擷取版本並查看已載入的實際範本。
$ helm get manifest full-coral
---
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: mychart-configmap
data:
myvalue: "Hello World"
helm get manifest
命令會接收一個版本名稱(full-coral
),並印出所有已上傳到伺服器的 Kubernetes 資源。每個檔案都以 ---
開頭,表示 YAML 文件的開始,然後是一個自動產生的註釋行,告訴我們哪個範本檔案產生了這個 YAML 文件。
從那裡開始,我們可以看到 YAML 資料正是我們放在 configmap.yaml
檔案中的內容。
現在我們可以解除安裝我們的版本:helm uninstall full-coral
。
新增一個簡單的範本呼叫
將 name:
硬編碼到資源中通常被認為是不好的做法。名稱應該對每個版本都是唯一的。因此,我們可能希望透過插入版本名稱來產生名稱欄位。
**提示:**由於 DNS 系統的限制,name:
欄位最多只能有 63 個字元。因此,版本名稱最多只能有 53 個字元。Kubernetes 1.3 及更早版本最多只能有 24 個字元(因此名稱只有 14 個字元)。
讓我們相應地修改 configmap.yaml
。
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .Release.Name }}-configmap
data:
myvalue: "Hello World"
最大的變化是 name:
欄位的值,現在是 {{ .Release.Name }}-configmap
。
範本指令包含在
{{
和}}
區塊中。
範本指令 {{ .Release.Name }}
會將版本名稱插入範本中。傳遞到範本中的值可以被視為 *命名空間物件*,其中點(.
)分隔每個命名空間元素。
Release
前面的點表示我們從這個範圍的頂層命名空間開始(我們稍後會討論範圍)。因此,我們可以將 .Release.Name
理解為「從頂層命名空間開始,找到 Release
物件,然後在其中尋找一個名為 Name
的物件」。
Release
物件是 Helm 的內建物件之一,我們稍後會更詳細地介紹它。但就目前而言,只需知道這將顯示函式庫分配給我們版本的版本名稱即可。
現在,當我們安裝我們的資源時,我們會立即看到使用這個範本指令的結果
$ helm install clunky-serval ./mychart
NAME: clunky-serval
LAST DEPLOYED: Tue Nov 1 17:45:37 2016
NAMESPACE: default
STATUS: DEPLOYED
REVISION: 1
TEST SUITE: None
您可以執行 helm get manifest clunky-serval
來查看生成的完整 YAML。
請注意,Kubernetes 名稱中的 ConfigMap 是 clunky-serval-configmap
,而不是之前的 mychart-configmap
。
至此,我們已經看到了最基本的範本:YAML 檔案,其中嵌入了 {{
和 }}
中的範本指令。在下一部分中,我們將更深入地了解範本。但在繼續之前,有一個小技巧可以讓建置範本更快:當您想要測試範本渲染,但不想實際安裝任何東西時,您可以使用 helm install --debug --dry-run goodly-guppy ./mychart
。這將渲染範本。但它不會安裝圖表,而是會將渲染的範本返回給您,以便您可以看到輸出
$ helm install --debug --dry-run goodly-guppy ./mychart
install.go:149: [debug] Original chart version: ""
install.go:166: [debug] CHART PATH: /Users/ninja/mychart
NAME: goodly-guppy
LAST DEPLOYED: Thu Dec 26 17:24:13 2019
NAMESPACE: default
STATUS: pending-install
REVISION: 1
TEST SUITE: None
USER-SUPPLIED VALUES:
{}
COMPUTED VALUES:
affinity: {}
fullnameOverride: ""
image:
pullPolicy: IfNotPresent
repository: nginx
imagePullSecrets: []
ingress:
annotations: {}
enabled: false
hosts:
- host: chart-example.local
paths: []
tls: []
nameOverride: ""
nodeSelector: {}
podSecurityContext: {}
replicaCount: 1
resources: {}
securityContext: {}
service:
port: 80
type: ClusterIP
serviceAccount:
create: true
name: null
tolerations: []
HOOKS:
MANIFEST:
---
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: goodly-guppy-configmap
data:
myvalue: "Hello World"
使用 --dry-run
可以更容易地測試您的程式碼,但它不能確保 Kubernetes 本身會接受您生成的範本。最好不要假設您的圖表會安裝,僅僅因為 --dry-run
可以正常工作。
在 圖表範本指南 中,我們將使用我們在此定義的基本圖表,並詳細探討 Helm 範本語言。我們將從內建物件開始。