簡體   English   中英

通過 helm 部署 kubernetes 作業

[英]Deploying a kubernetes job via helm

我是 helm 的新手,我嘗試部署一些教程圖表。 有幾個疑問:

  1. 我有一個需要部署的 Kubernetes 工作。 是否可以通過 helm 部署作業?

  2. 此外,目前我的 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}}"]

您可以將參數作為secretsconfigMaps傳遞給您的作業,就像傳遞給 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM