如何设置Kubernetes ConfigMap的默认值(或者Helm是否覆盖ConfigMap值?)

时间:2017-05-30 07:56:06

标签: kubernetes kubernetes-helm

用例:

我希望能够从第一份工作停止的地方重新开始工作。我正在使用Helm部署到Kubernetes。

我想在ConfigMap中保存第一个作业的状态。定义ConfigMap的ConfigMap yaml与作业打包在一起,两者都与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

使用ConfigMap中设置的ENV变量运行作业:

env:
  - name: MY_STATE
    valueFrom:
      configMapKeyRef:
        name:  NameOfMyConfigMap
        key: MY_STATE

作业运行一个脚本,查看是否设置了$ MY_STATE,如果未设置,则第一次运行作业,否则作业将关闭已经运行的第一个作业,保存第一个作业&# 39; s进入MY_STATE Con​​figMap变量并使用保存状态再次启动作业。

如果我没有在初始ConfigMap定义中声明MY_STATE键,那么第一次运行该作业将失败,因为上面的ENV定义找不到ConfigMap变量。

如果我在ConfigMap定义中声明了值(MY_STATE: ""),那么第一次部署将起作用。但是,如果我使用helm upgrade重新部署作业,那么我在定义中输入的值是否会覆盖现有ConfigMap中的现有值?

在同一工作的两次运行之间存储状态的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

您是否尝试过使用卷?在这种情况下,使用helm upgrade时不应该覆盖它。

这样的例子可以吗? (从 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