用例:
我希望能够从第一份工作停止的地方重新开始工作。我正在使用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 ConfigMap变量并使用保存状态再次启动作业。
如果我没有在初始ConfigMap定义中声明MY_STATE键,那么第一次运行该作业将失败,因为上面的ENV定义找不到ConfigMap变量。
如果我在ConfigMap定义中声明了值(MY_STATE: ""
),那么第一次部署将起作用。但是,如果我使用helm upgrade
重新部署作业,那么我在定义中输入的值是否会覆盖现有ConfigMap中的现有值?
在同一工作的两次运行之间存储状态的最佳方法是什么?
答案 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