首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为Kubernetes ConfigMap设置默认值(或者Helm覆盖ConfigMap值?)

如何为Kubernetes ConfigMap设置默认值(或者Helm覆盖ConfigMap值?)
EN

Stack Overflow用户
提问于 2017-05-30 15:56:06
回答 1查看 1.9K关注 0票数 1

使用案例:

我希望能够从第一个作业停止的地方重新运行作业。我正在使用Helm来部署到Kubernetes中。

我的想法是将第一个作业的状态保存在ConfigMap中。定义ConfigMap的Helm与作业打包在一起,并且两者都与ConfigMap同时部署。

代码语言:javascript
复制
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变量运行:

代码语言:javascript
复制
env:
  - name: MY_STATE
    valueFrom:
      configMapKeyRef:
        name:  NameOfMyConfigMap
        key: MY_STATE

该作业运行一个脚本,查看是否设置了$MY_STATE,如果未设置,则该作业将首次运行,否则该作业将关闭已在运行的第一个作业,将第一个作业的状态保存到MY_STATE ConfigMap变量中,并使用保存的状态再次启动该作业。

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

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

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

EN

回答 1

Stack Overflow用户

发布于 2017-06-01 15:58:56

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

像这样的例子可以工作吗?(来自https://groups.google.com/forum/#!msg/kubernetes-users/v2806ezEdPk/1geJCO8-AQAJ)

代码语言:javascript
复制
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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44256625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档