web-dev-qa-db-ja.com

Kubernetes:CronJobとして実行されているコンテナーにボリュームをマウントすることは可能ですか?

私は、毎分アプリケーションを実行するためのKubernetes CronJobを作成しようとしています。

前提条件は、CronJob内で実行されるコンテナーにアプリケーションコードを取得する必要があることです。そのための最善の方法は、永続ボリュームであるpvclaimを使用してから、ボリュームを定義してコンテナにマウントすることです。ポッド内で実行されているコンテナでこれを正常に実行しましたが、CronJob内では不可能のようです。これが私の試みた設定です:

apiVersion: batch/v2alpha1
kind: CronJob
metadata:
  name: update_db
spec:
  volumes:
  - name: application-code
    persistentVolumeClaim:
      claimName: application-code-pv-claim
  schedule: "*/1 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: update-fingerprints
            image: python:3.6.2-slim
            command: ["/bin/bash"]
            args: ["-c", "python /client/test.py"]
          restartPolicy: OnFailure

対応するエラー:

エラー:「cron-applications.yaml」の検証エラー:データの検証エラー:v2alpha1.CronJobSpecの無効なフィールドボリュームが見つかりました。これらのエラーを無視する場合は、-validate = falseを使用して検証をオフにします

これが可能であることを示すリソースは見つかりません。では、可能でない場合、アプリケーションコードを実行中のCronJobに取り込む問題をどのように解決すればよいでしょうか。

9
theoneandonly2

A CronJob は、ポッドに基づいて他のすべてのものとしてPodTemplateを使用し、ボリュームを使用できます。 PodSpec ではなく、CronJobSpecにボリューム仕様を直接配置しました。次のように使用します。

apiVersion: batch/v2alpha1
kind: CronJob
metadata:
name: update_db
spec:
schedule: "*/1 * * * *"
jobTemplate:
    spec:
    template:
        spec:
        containers:
        - name: update-fingerprints
          image: python:3.6.2-slim
          command: ["/bin/bash"]
          args: ["-c", "python /client/test.py"]
          restartPolicy: OnFailure
          volumeMounts:
          - name: application-code
            mountPath: /where/ever
        volumes:
        - name: application-code
          persistentVolumeClaim:
          claimName: application-code-pv-claim
9
Simon Tesar