Пример использования:
Я хочу иметь возможность повторно запустить задание с того места, где было прервано первое задание. Я использую Helm для развертывания в Kubernetes.
У меня есть идея сохранить состояние первого задания в ConfigMap. Ямл ConfigMap, определяющий ConfigMap, упаковывается вместе с заданием, и оба развертываются одновременно с Helm.
apiVersion: v1
kind: ConfigMap
metadata:
name: NameOfMyConfigMap
data:
someKey: someValue
MY_STATE: state <---- See below as to whether this should be included or not
Задание запускается с переменной ENV, установленной из ConfigMap:
env:
- name: MY_STATE
valueFrom:
configMapKeyRef:
name: NameOfMyConfigMap
key: MY_STATE
Задание запускает сценарий, который проверяет, установлен ли $ MY_STATE, и если он не установлен, задание запускается в первый раз, в противном случае задание закрывает уже запущенное первое задание, сохраняет состояние первого задания в MY_STATE ConfigMap и снова запускает задание, используя сохраненное состояние.
Если я не объявлю ключ MY_STATE в исходном определении ConfigMap, то при первом запуске задания произойдет сбой, поскольку приведенное выше определение ENV не может найти переменную ConfigMap.
Если я объявлю значение (MY_STATE: ""
) в определении ConfigMap, первое развертывание будет работать. Однако, если я повторно разверну задание с helm upgrade
, тогда значение, которое я ввожу в определение, не перезапишет существующее значение в существующей ConfigMap?
Каков наилучший метод сохранения состояния между запусками одного и того же задания?