Search code examples
kubernetesgoogle-kubernetes-enginekubernetes-cronjob

Can I add initContainers to a kubernetes-cronjob?


I want to have an initContainer that runs prior to the container my kubernetes cronjob is running. It's used to install kubectl. Is there a way of doing this?

I tried to add the initContainer-parameter to the cronjob.yaml file but it threw an error.

The code of my containerInit is the following:

initContainers:
- name: install-kubectl
  image: allanlei/kubectl
  volumeMounts:
  - name: kubectl
    mountPath: /data
  command: ["cp", "/usr/local/bin/kubectl", "/data/kubectl"]

My cronjob needs to be able to access kubectl. That is the reason I'm trying to do this. I'm grateful for any suggestions how I could solve this problem.


Solution

  • Yes, you can use InitContainers in a CronJob template.

    Like this:

    apiVersion: batch/v1
    kind: CronJob
    metadata:
      name: example
      namespace: default
    spec:
      schedule: '*/1 * * * *'
      jobTemplate:
        spec:
          template:
            spec:
              initContainers:
                - name: busybox
                  image: busybox
                  command:
                    - echo
                    - initialized
              containers:
                - name: pi
                  image: perl
                  command:
                    - perl
                    - '-Mbignum=bpi'
                    - '-wle'
                    - print bpi(2000)
              restartPolicy: OnFailure