[英]Deploying a kubernetes job via helm
我是 helm 的新手,我嘗試部署一些教程圖表。 有幾個疑問:
我有一個需要部署的 Kubernetes 工作。 是否可以通過 helm 部署作業?
此外,目前我的 kubernetes 作業是從我的自定義 docker 映像部署的,它運行一個 bash 腳本來完成作業。 我想將一些參數傳遞給此圖表/作業,以便 bash 命令采用輸入參數。 這就是我決定轉任掌舵的原因,因為它提供了更大的靈活性。 那可能嗎?
您可以使用Helm Hooks
來運行作業。 根據您設置注釋的方式,您可以運行不同類型的掛鈎(安裝前、安裝后、刪除前、刪除后、升級前、升級后、回滾前、回滾后、crd -安裝)。 文檔中的一個示例如下:
apiVersion: batch/v1
kind: Job
metadata:
name: "{{.Release.Name}}"
labels:
app.kubernetes.io/managed-by: {{.Release.Service | quote }}
app.kubernetes.io/instance: {{.Release.Name | quote }}
helm.sh/chart: "{{.Chart.Name}}-{{.Chart.Version}}"
annotations:
# This is what defines this resource as a hook. Without this line, the
# job is considered part of the release.
"helm.sh/hook": post-install
"helm.sh/hook-weight": "-5"
"helm.sh/hook-delete-policy": hook-succeeded
spec:
template:
metadata:
name: "{{.Release.Name}}"
labels:
app.kubernetes.io/managed-by: {{.Release.Service | quote }}
app.kubernetes.io/instance: {{.Release.Name | quote }}
helm.sh/chart: "{{.Chart.Name}}-{{.Chart.Version}}"
spec:
restartPolicy: Never
containers:
- name: post-install-job
image: "alpine:3.3"
command: ["/bin/sleep","{{default "10" .Values.sleepyTime}}"]
您可以將參數作為secrets
或configMaps
傳遞給您的作業,就像傳遞給 pod 一樣。
你可以使用頭盔。 Helm 在模板文件夾中安裝所有 Kubernetes 資源,如 job、pods、configmaps、secrets。 您可以通過 helm hooks 控制安裝順序。 Helm 提供了與部署相關的預安裝、安裝后、預刪除等鈎子。 如果預先安裝了兩個或多個作業,則將比較它們的重量以進行安裝。
|-scripts/runjob.sh
|-templates/post-install.yaml
|-Chart.yaml
|-values.yaml
很多時候您需要根據環境更改腳本中的變量。 因此,除了在腳本中硬編碼變量之外,您還可以通過將參數設置為自定義 docker 映像的環境變量來將參數傳遞給腳本。 更改 values.yaml 中的值,而不是更改腳本中的值。
值.yaml
key1:
someKey1: value1
key2:
someKey2: value1
安裝后.yaml
apiVersion: batch/v1
kind: Job
metadata:
name: post-install-job
labels:
provider: stackoverflow
microservice: {{ template "name" . }}
release: "{{ .Release.Name }}"
chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
annotations:
"helm.sh/hook": pre-install,pre-upgrade,pre-rollback
"helm.sh/hook-delete-policy": before-hook-creation
"helm.sh/hook-weight": "3"
spec:
template:
metadata:
name: "{{.Release.Name}}"
labels:
provider: stackoverflow
microservice: {{ template "name" . }}
release: "{{ .Release.Name }}"
app: {{ template "fullname" . }}
spec:
restartPolicy: Never
containers:
- name: post-install-job
image: "custom-docker-image:v1"
command: ["/bin/sh", "-c", {{ .Files.Get "scripts/runjob.sh" | quote }} ]
env:
#setting KEY1 as environment variable in the container,value of KEY1 in container is value1(read from values.yaml)
- name: KEY1
value: {{ .Values.key1.someKey1 }}
- name: KEY2
value: {{ .Values.key2.someKey2 }}
運行作業.sh
# you can access the variable from env variable
echo $KEY1
echo $KEY2
# some stuff
我有一個類似的場景,我有一份工作,我想向其傳遞各種參數。 我最終做了這樣的事情:
模板:
apiVersion: batch/v1
kind: Job
metadata:
name: myJob
spec:
template:
spec:
containers:
- name: myJob
image: myImage
args: {{ .Values.args }}
命令(PowerShell):
helm template helm-chart --set "args={arg1\, arg2\, arg3}" | kubectl apply -f -
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.