helm 是拿來管理設定檔的工具。他會將K8s中的各元件yaml檔打包成一個叫做chart的集合,再透過參數去管理設定yaml檔。
先建立一個chart - helm-demo
helm create helm-demo
舉例來說,我們有一個deployment的 yaml檔
# deployment.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: blue-nginx
spec:
replicas: 2
我們將其中變數拉出來到values.yaml
replicaCount: 2
然後修改deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ include "value-helm-demo.fullname" . }}
spec:
replicas: {{ .Values.replicaCount }}
再來就可以一鍵部署這份檔案,直接在/helm-demo下指令
helm install .
NAME: gilded-peacock
release:Helm 部署出去的實體我們稱為release(A Release is an instance of a chart running in a Kubernetes cluster.)
chart:A Chart is a Helm package。It contains all of the resource definitions necessary to run an application, tool, or service inside of a Kubernetes cluster.
在terraform的resource helm_release
描述一個chart在k8s cluster中的預期狀態
resource helm_release
name:這個release的名字
repository:需要的chart的來源
chart:被安裝的chart。這邊可以填local path、chart的URL、或是chart的名字(如果他的repo是唯一的)。
你也可以使用repo/chart,如果之前這個chart有被helm repo add。但通常不推薦
set:自定義的值
set-config.kasAddress:為了代理k8s的agent所要帶入的值
resource "helm_release" "gitlab_agent" {
name = "gitlab-agent"
repository = "https://charts.gitlab.io"
chart = "gitlab-agent"
create_namespace = true
namespace = var.agent_namespace
set {
name = "config.kasAddress"
value = var.kas_address
}
set {
name = "config.token"
value = var.agent_token
}
}