Я новичок в руле, и я попытался развернуть несколько учебных диаграмм. Было пару вопросов:
У меня есть задание Kubernetes, которое мне нужно развернуть. Можно ли развернуть задание через helm?
Кроме того, в настоящее время мое задание kubernetes развернуто из моего пользовательского образа докера, и оно запускает сценарий 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 в свою работу, как в модуль.
@aaj Как я уже упоминал в конце поста, вы можете отправлять параметры через секрет или configMap, и если вы говорите о замене переменных, вы можете добавить переменные в свой манифест, как и с любыми другими файлами шаблонов диаграмм руля. .
Что произойдет, если вы позволите Job быть частью релиза (т. е. вы определите шаблон Job без хуков)?
@ GACy20: Если вы удалите аннотацию крюка helm, то это задание будет считаться обычным заданием kubernetes (оно перейдет в состояние «Завершено»). Модуль, созданный этим заданием, также будет находиться в состоянии «Завершено». Если вы удалите диаграмму руля, это задание будет удалено. «Обновление helm» не может удалить и создать это задание снова. (Это требование) Если вы добавляете аннотации крючков, создание этого задания зависит от того, какую аннотацию вы использовали. Например: если вы использовали хук «после установки», то другие ресурсы k8s в helm будут созданы первыми при установке helm chart, а после этого будет создано это задание.
Вы можете обратиться к этому ответу за некоторыми идеями: stackoverflow.com/a/70846491/14715359
Вы можете использовать шлем. 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 -
Можно ли передать параметры в задание kubernetes?