Helm Template初體驗,方便管理多環境

我最新最全的文章都在 南瓜慢說 www.pkslow.com ,文章更新也只在官網,歡迎大家來喝茶~~

1 簡介

Helm作爲一個優秀的包管理器,這部分我們之前已經做了介紹,文章如下:

用Helm部署Kubernetes應用,支持多環境部署與版本回滾

Kubernetes用Helm安裝Ingress並踩一下使用的坑

而Helm的模板功能,一樣非常強大。它可以非常方便的定義各種Kubernetes的資源模板,如Deployment、Service、Ingress、ConfigMap等。不同環境的變量放在不同文件上,渲染時指定環境變量文件即可。

2 初體驗

使用Helm的Template功能,需要先創建一個Chart,這是Helm的基本文件組成架構。我們來創建一個Nginx的相關資源文件,命令如下:

helm create pkslow-nginx

命令執行完成後,就會自動創建Chart的相關文件:

關鍵文件:

  • 目錄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 通過命令行設置變量

使用--set--set-string,使用如下:

$ helm template pkslow-nginx/ --output-dir ./result -f pkslow-nginx/values-dev.yaml --set pkslow.webSite=www.pkslow.com

總結

代碼請查看:https://github.com/LarryDpk/pkslow-samples

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章