<p>I want a job to trigger every 15 minutes but it is consistently triggering every 30 minutes.</p>

<p><strong>UPDATE:</strong></p>

<p>I've simplified the problem by just running:</p>

<pre><code>kubectl run hello --schedule="*/1 * * * *" --restart=OnFailure --image=busybox -- /bin/sh -c "date; echo Hello from the Kubernetes cluster"
</code></pre>

<p>As specified in the docs here: <a href="https://kubernetes.io/docs/tasks/job/automated-tasks-with-cron-jobs/" rel="noreferrer">https://kubernetes.io/docs/tasks/job/automated-tasks-with-cron-jobs/</a></p>

<p>and yet the job still refuses to run on time.</p>

<pre><code>$ kubectl get cronjobs
NAME               SCHEDULE      SUSPEND   ACTIVE    LAST SCHEDULE   AGE
hello              */1 * * * *   False     1         5m              30m
hello2             */1 * * * *   False     1         5m              12m
</code></pre>

<p>It took 25 minutes for the command line created cronjob to run and 7 minutes for the cronjob created from yaml.  They were both finally scheduled at the same time so it's almost like etcd finally woke up and did something?</p>

<p><strong>ORIGINAL ISSUE:</strong></p>

<p>When I drill into an active job I see <code>Status: Terminated: Completed</code> but 
<code>Age: 25 minutes</code> or something greater than 15.  </p>

<p>In the logs I see that the python script meant to run has completed it's final print statement.  The script takes about ~2min to complete based on it's output file in s3.  Then no new job is scheduled for 28 more minutes.</p>

<p>I have tried with different configurations:</p>

<p><code>Schedule: */15 * * * *</code> AND <code>Schedule: 0,15,30,45 * * * *</code></p>

<p>As well as</p>

<p><code>Concurrency Policy: Forbid</code> AND <code>Concurrency Policy: Replace</code></p>

<p>What else could be going wrong here?</p>

<p>Full config with identifying lines modified:</p>

<pre><code>apiVersion: batch/v1beta1
kind: CronJob
metadata:
  labels:
    type: f-c
  name: f-c-p
  namespace: extract
spec:
  concurrencyPolicy: Forbid
  failedJobsHistoryLimit: 1
  jobTemplate:
    metadata:
      creationTimestamp: null
    spec:
      template:
        metadata:
          creationTimestamp: null
          labels:
            type: f-c
        spec:
          containers:
          - args:
            - /f_c.sh
            image: identifier.amazonaws.com/extract_transform:latest
            imagePullPolicy: Always
            env:
            - name: ENV
              value: prod
            - name: SLACK_TOKEN
              valueFrom:
                secretKeyRef:
                  key: slack_token
                  name: api-tokens
            - name: AWS_ACCESS_KEY_ID
              valueFrom:
                secretKeyRef:
                  key: aws_access_key_id
                  name: api-tokens
            - name: AWS_SECRET_ACCESS_KEY
              valueFrom:
                secretKeyRef:
                  key: aws_secret_access_key
                  name: api-tokens
            - name: F_ACCESS_TOKEN
              valueFrom:
                secretKeyRef:
                  key: f_access_token
                  name: api-tokens
            name: s-f-c
            resources: {}
            terminationMessagePath: /dev/termination-log
            terminationMessagePolicy: File
          dnsPolicy: ClusterFirst
          restartPolicy: Never
          schedulerName: default-scheduler
          securityContext: {}
          terminationGracePeriodSeconds: 30
  schedule: '*/15 * * * *'
  successfulJobsHistoryLimit: 1
  suspend: false
status: {}
</code></pre>

<p>After running these jobs in a test cluster I discovered that external circumstances prevented them from running as intended.</p>

<p>On the original cluster there were ~20k scheduled jobs.  The built-in scheduler for Kubernetes is not yet capable of handling this volume consistently.</p>

<p>The maximum number of jobs that can be reliably run (within a minute of the time intended) may depend on the size of your master nodes.</p>
