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