使用案例:
我希望能够从第一个作业停止的地方重新运行作业。我正在使用Helm来部署到Kubernetes中。
我的想法是将第一个作业的状态保存在ConfigMap中。定义ConfigMap的Helm与作业打包在一起,并且两者都与ConfigMap同时部署。
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,如果未设置,则该作业将首次运行,否则该作业将关闭已在运行的第一个作业,将第一个作业的状态保存到MY_STATE ConfigMap变量中,并使用保存的状态再次启动该作业。
如果我没有在初始ConfigMap定义中声明ENV键,那么作业的第一次运行将失败,因为上面的MY_STATE定义找不到ConfigMap变量。
如果我确实在ConfigMap定义中声明了值(MY_STATE: ""),那么第一个部署就会起作用。但是,如果我使用helm upgrade重新部署作业,那么我在定义中输入的值是否不会覆盖现有ConfigMap中的现有值?
在同一作业的两次运行之间存储状态的最佳方法是什么?
发布于 2017-06-01 15:58:56
您尝试过使用卷吗?在这种情况下,在使用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-configmaphttps://stackoverflow.com/questions/44256625
复制相似问题