Helm Template初體驗,友善管理多環境
1 簡介
Helm作為一個優秀的包管理器,這部分我們之前已經做了介紹
而Helm的模闆功能,一樣非常強大。它可以非常友善的定義各種Kubernetes的資源模闆,如Deployment、Service、Ingress、ConfigMap等。不同環境的變量放在不同檔案上,渲染時指定環境變量檔案即可。
2 初體驗
使用Helm的Template功能,需要先建立一個Chart,這是Helm的基本檔案組成架構。我們來建立一個Nginx的相關資源檔案,指令如下:
helm create pkslow-nginx
指令執行完成後,就會自動建立Chart的相關檔案:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsISPrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdsATOfd3bkFGazxCMx8VesATMfhHLlN3XnxCMwEzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5CNzEjM4QDZ2EDOzcDNjNGOxYzXzITMyUTMxEzLcFTMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjL1M3Lc9CX6MHc0RHaiojIsJye.png)
關鍵檔案:
- 目錄template:放置模闆檔案,想要渲染什麼檔案出來,就在這個目錄放置對應模闆;
- 檔案Chart.yaml:該Chart的描述,如果隻是使用Helm的模闆功能,可以不用管;
- 檔案values.yaml:包含變量預設值。
templates/tests
對我們作用不大,删掉。
我們嘗試不修改模闆、不添加變量,直接渲染出結果檔案如下:
$ helm template pkslow-nginx/ --output-dir ./result
wrote ./result/pkslow-nginx/templates/serviceaccount.yaml
wrote ./result/pkslow-nginx/templates/service.yaml
wrote ./result/pkslow-nginx/templates/deployment.yaml
根據一些變量和判斷,helm直接幫我們生成了三種資源的檔案。檢視其中一個檔案service.yaml,還是非常完整的,基本可以滿足需要了,再根據自己的需求改改就好了。
3 添加模闆檔案
試着添加一個模闆檔案configmap.yaml到templates目錄,内容如下:
apiVersion: v1
kind: ConfigMap
metadata:
name: pkslow-file
namespace: default
data:
application.yaml: |-
server:
port: 8080
pkslow:
name: Larry
age: 18
webSite: www.pkslow.com
執行指令後渲染的結果如下:
---
# Source: pkslow-nginx/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: pkslow-file
namespace: default
data:
application.yaml: |-
server:
port: 8080
pkslow:
name: Larry
age: 18
webSite: www.pkslow.com
與模闆并沒有什麼不同,那是因為我們沒有在模闆檔案裡使用變量和判斷語句等。
3.1 模闆中使用變量
我們修改模闆如下:
apiVersion: v1
kind: ConfigMap
metadata:
name: pkslow-config-{{ .Values.environment }}
namespace: default
data:
application.yaml: |-
server:
port: {{ .Values.server.port }}
pkslow:
name: {{ .Values.pkslow.name }}
age: {{ .Values.pkslow.age }}
{{- if .Values.pkslow.webSite }}
webSite: {{ .Values.pkslow.webSite }}
{{- end }}
可以看見我們在模闆中使用了許多雙大括号的變量
{{ .Values.xxx }}
,我們需要在values.yaml檔案中定義這些變量,如下:
environment: dev
server:
port: 80
pkslow:
name: Larry Deng
age: 28
webSite: https://www.pkslow.com
重新執行指令
$ helm template pkslow-nginx/ --output-dir ./result
,渲染的結果如下:
---
# Source: pkslow-nginx/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: pkslow-config-dev
namespace: default
data:
application.yaml: |-
server:
port: 80
pkslow:
name: Larry Deng
age: 28
webSite: https://www.pkslow.com
3.2 為不同環境設定不同的變量
多環境管理在Helm Template這也是非常簡單的,我們建立一個values-dev.yaml的變量檔案,内容如下:
environment: dev
server:
port: 8080
pkslow:
name: Larry Deng
age: 1
通過以下指令來指定dev環境的變量檔案:
$ helm template pkslow-nginx/ --output-dir ./result -f pkslow-nginx/values-dev.yaml
這樣渲染出來的結果就是dev的相關配置了。其它環境同理。
3.3 通過指令行設定變量
$ helm template pkslow-nginx/ --output-dir ./result -f pkslow-nginx/values-dev.yaml --set pkslow.webSite=www.pkslow.com