Развертывание задания kubernetes через helm

Я новичок в руле, и я попытался развернуть несколько учебных диаграмм. Было пару вопросов:

  1. У меня есть задание Kubernetes, которое мне нужно развернуть. Можно ли развернуть задание через helm?

  2. Кроме того, в настоящее время мое задание kubernetes развернуто из моего пользовательского образа докера, и оно запускает сценарий bash для завершения задания. Я хотел передать несколько параметров этой диаграмме/работе, чтобы команды bash принимали входные параметры. Вот почему я решил перейти к штурвалу, потому что это давало больше гибкости. Это возможно?

Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
16
0
23 248
3

Ответы 3

Вы можете использовать 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 в свою работу, как в модуль.

Можно ли передать параметры в задание kubernetes?

codec 01.04.2019 17:26

@aaj Как я уже упоминал в конце поста, вы можете отправлять параметры через секрет или configMap, и если вы говорите о замене переменных, вы можете добавить переменные в свой манифест, как и с любыми другими файлами шаблонов диаграмм руля. .

cookiedough 01.04.2019 17:29

Что произойдет, если вы позволите Job быть частью релиза (т. е. вы определите шаблон Job без хуков)?

GACy20 21.01.2022 16:40

@ GACy20: Если вы удалите аннотацию крюка helm, то это задание будет считаться обычным заданием kubernetes (оно перейдет в состояние «Завершено»). Модуль, созданный этим заданием, также будет находиться в состоянии «Завершено». Если вы удалите диаграмму руля, это задание будет удалено. «Обновление helm» не может удалить и создать это задание снова. (Это требование) Если вы добавляете аннотации крючков, создание этого задания зависит от того, какую аннотацию вы использовали. Например: если вы использовали хук «после установки», то другие ресурсы k8s в helm будут созданы первыми при установке helm chart, а после этого будет создано это задание.

Pankaj Yadav 25.01.2022 12:31

Вы можете обратиться к этому ответу за некоторыми идеями: stackoverflow.com/a/70846491/14715359

Pankaj Yadav 25.01.2022 12:43

Вы можете использовать шлем. Helm устанавливает все ресурсы kubernetes, такие как job, pods, configmaps, secrets, в папку шаблонов. Порядок установки можно контролировать с помощью рулевых крюков. Helm предлагает хуки, такие как предварительная установка, послеустановка, предварительное удаление в отношении развертывания. если два или более заданий предварительно установлены, их веса будут сравниваться для установки.

|-scripts/runjob.sh
|-templates/post-install.yaml
|-Chart.yaml
|-values.yaml

Много раз вам нужно изменить переменные в скрипте в соответствии с окружением. поэтому вместо переменной жесткого кода в скрипте вы также можете передавать параметры в скрипт, установив их как переменные среды для вашего пользовательского образа докера. Измените значения в 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 }}

runjob.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 -

Другие вопросы по теме