Кубронес Кронджоб работает только наполовину - PullRequest
0 голосов
/ 08 мая 2018

Я хочу, чтобы задание запускалось каждые 15 минут, но оно последовательно запускается каждые 30 минут.

UPDATE:

Я упростил задачу, просто запустив:

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

Как указано в документации здесь: https://kubernetes.io/docs/tasks/job/automated-tasks-with-cron-jobs/

и, тем не менее, задание по-прежнему не выполняется вовремя.

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

Потребовалось 25 минут для запуска cronjob из командной строки и 7 минут для cronjob, созданного из yaml. Они оба, наконец, были запланированы в одно и то же время, так что, похоже, что etcd наконец проснулся и что-то сделал?

ОРИГИНАЛЬНЫЙ ВЫПУСК:

Когда я вхожу в активную работу, я вижу Status: Terminated: Completed, но Age: 25 minutes или что-то большее, чем 15.

В журналах я вижу, что сценарий python, предназначенный для запуска, завершил свою последнюю операцию печати. Сценарий занимает около 2 минут, чтобы завершить на основе его выходного файла в s3. Тогда никакая новая работа не запланирована еще на 28 минут.

Я пробовал с разными конфигурациями:

Schedule: */15 * * * * И Schedule: 0,15,30,45 * * * *

а также

Concurrency Policy: Forbid И Concurrency Policy: Replace

Что еще может быть не так?

Полная конфигурация с измененными идентифицирующими строками:

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: {}

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

После запуска этих заданий в тестовом кластере я обнаружил, что внешние обстоятельства не позволяют им запускаться по назначению.

В исходном кластере было запланировано ~ 20 тыс. Заданий. Встроенный планировщик для Kubernetes пока не способен последовательно обрабатывать этот том.

Максимальное количество заданий, которые могут быть надежно запущены (в течение минуты от запланированного времени), может зависеть от размера ваших главных узлов.

0 голосов
/ 16 мая 2018

Разве это не задумано?

Задание cron создает объект задания примерно один раз за время выполнения своего расписания. Мы говорим «примерно», потому что есть определенные обстоятельства, когда могут быть созданы две работы, или работа не может быть создана. Мы пытаемся сделать это редким, но не полностью предотвращаем их. Поэтому рабочие места должны быть идемпотентными.

Ref. https://kubernetes.io/docs/concepts/workloads/controllers/cron-jobs/#cron-job-limitations

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...