Как установить значение по умолчанию для Kubernetes ConfigMap (или Helm перезаписывает значения ConfigMap?)

Пример использования:

Я хочу иметь возможность повторно запустить задание с того места, где было прервано первое задание. Я использую 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?

Каков наилучший метод сохранения состояния между запусками одного и того же задания?


person John    schedule 30.05.2017    source источник
comment
Совместное использование состояния может быть выполнено с помощью config-map, как то, что вы делаете (изобретательно), но затем я бы создал config-map, который находится за пределами управления штурвалом. Метод, который кажется более используемым, - это использование etcd для сохранения состояния, так что это может быть более целесообразным, чем ваш инновационный метод.   -  person Norbert van Nobelen    schedule 30.05.2017


Ответы (1)


Вы пробовали использовать тома? В этом случае его не следует перезаписывать при использовании обновления руля.

Может ли такой пример работать? (Из https://groups.google.com/forum/#!msg/kubernetes-users/v2806ezEdPk/1geJCO8-AQAJ)

apiVersion: batch/v1
kind: Job
metadata:
  name: keystore-configmap-job
spec:
  template:
    metadata:
      name: keystore-configmap
    spec:
      containers:
        - name: keystore
          image: ubuntu
          volumeMounts:
            - name: keystore-configmap-volume
              mountPath: /config-base64
          command: [ "sh", "-c", "cat /config-base64/keystore.jks | base64 --decode | sha256sum" ]

      restartPolicy: Never

      volumes:
      - name: keystore-configmap-volume
        configMap:
          name: keystore-configmap
person Javier Salmeron    schedule 01.06.2017