2017-05-30 137 views
0

使用情況下(或不頭盔覆蓋ConfigMap值):如何爲Kubernetes ConfigMap設置默認值

我希望能夠重新運行從第一作業中斷處的工作。我正在使用頭盔部署到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 Con​​figMap變量中,並使用保存的狀態再次啓動作業。

如果我沒有在初始ConfigMap定義中聲明MY_STATE鍵,那麼作業的第一次運行將失敗,因爲上面的ENV定義找不到ConfigMap變量。

如果我確實在ConfigMap定義中聲明瞭值(MY_STATE: ""),那麼第一次部署將會起作用。但是,如果我用helm upgrade重新部署作業,那麼在定義中輸入的值是否不會覆蓋現有ConfigMap中的現有值?

在同一工作的運行之間存儲狀態的最佳方法是什麼?

+0

共享狀態可以用一個配置地圖爲你在做什麼(發明)來完成,但後來我想創建一個配置地圖是掌舵的控制之外。一種似乎更常用的方法是使用etcd來保持狀態,所以這可能更適合你的創新方法。 –

回答

1

您是否嘗試過使用卷?在這種情況下,使用helm升級時不應該被覆蓋。

這樣的例子能工作嗎? (從 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