Установка Cron

Описание

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

Список встроенных скриптов:

  • clear_tmp - скрипт, который очищает временные файлы на кластере. Код скрипта живет здесь;
  • prune_offline_cluster_nodes - скрипт, который удаляет из Кипариса offline ноды. Код скрипта живет здесь.
  • validate_master_snapshot и export_master_snapshot - скрипты для валидации и экспорта мастер-снапшотов в статическую таблицу. Эти скрипты используются в связке. Подробнее здесь.

Предварительные требования

На данном этапе у вас должны быть:

  • Helm 3.x;

  • запущенный кластер YTsaurus и внутренний адрес HTTP прокси;

  • специальный пользователь-робот robot-cron с выписанным для него токеном (см. раздел Управление токенами):

    yt create user --attr "{name=robot-cron}"
    yt issue-token robot-cron
    

Базовая установка

helm install ytsaurus-cron oci://ghcr.io/ytsaurus/cron-chart \
  --version 0.0.3 \
  --set yt.proxy="http://http-proxies.default.svc.cluster.local" \
  --set yt.token="<ROBOT-CRON-TOKEN>" \
  -n <namespace>

После этого можно проверить наличие соответствующих cronjobs:

kubectl get cronjobs -l app.kubernetes.io/name=cron-chart -n <namespace>

Вручную запустить cron-задачу можно встроенными средствами kubectl:

kubectl create job --from=cronjob/<cron-job-name> <your-job-name> -n <namespace>

Конфигурация

Все параметры чарта можно задать через -f values.yaml или с помощью --set в командной строке.

Аутентификация в YTsaurus

Укажите токен напрямую:

yt:
  proxy: "http://http-proxies.default.svc.cluster.local"
  token: "<ROBOT-CRON-TOKEN>"

Или используйте Kubernetes-секрет:

  1. Создайте секрет:
kubectl create secret generic yt-robot-cron-token --from-literal=token="$(yt issue-token robot-cron)"
  1. В values.yaml включите использование неуправляемых чартом секретов и укажите откуда брать токен:
unmanagedSecret:
  enabled: true
  secretKeyRef:
    name: yt-robot-cron-token
    key: token

Определение задач

Каждая cron-задача определяется в values.yaml под уникальным именем. Встроенные задачи определяются в .jobs. Дополнительные пользовательские задачи рекомендуется определять в .additionalJobs.

Простые задачи

Запускает один скрипт с заданными аргументами.

Каждая задача задаётся структурой:

  • enabled: Включена ли задача.
  • args: Аргументы командной строки.
  • schedule: Расписание в формате cron.
  • restartPolicy: Политика перезапуска (рекомендуется Never).

Для диагностики можно проверить состояние подов:

kubectl get pods -n <namespace> -l job-name=<job-name>

Чтобы посмотреть логи конкретного пода, достаточно указать его имя. Так как под содержит только один контейнер, передавать название контейнера не требуется:

kubectl logs <pod-name> -n <namespace>

Например:

kubectl logs ytsaurus-cron-cron-chart-clear-tmp-trash-29409690-vqsh5 -n <namespace>

Последовательные задачи

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

Каждая задача задаётся структурой:

  • enabled, schedule, restartPolicy: Аналогичны простой задаче.
  • jobs: Список имен подзадач, которые будут выполнены в заданной последовательности.
  • jobDescriptions: Словарь, где ключ — это имя подзадачи из списка jobs, а значение — её конфигурация (конфигурировать возможно только аргументы командной строки через jobDescriptions.jobName.args).

Так как все задачи выполняются в одном поде, для просмотра логов соответствующей джобы необходимо указать имя контейнера, которое соответствует именам из jobs.X.jobs. Для задачи process_master_snapshot, спецификация которой описана ниже, именами контейнеров будут являться validate и export.

jobs:
  process_master_snapshot:
    enabled: false
    jobs:
      - validate
      - export
    jobDescriptions:
      validate:
        args:
          - validate_master_snapshot
      export:
        args:
          - export_master_snapshot
    schedule: "0 * * * *"
    restartPolicy: Never

Посмотреть логи валидации, соответственно:

kubectl logs ytsaurus-cron-cron-chart-process-master-snapshot-29409720-9dmps -c validate -n <namespace>

Название контейнера будет соответствовать названию джобы из jobs.

Встроенные задачи

Пример включения задачи в values.yaml:

jobs:
  clear_tmp_location:
    enabled: true
    schedule: "*/30 * * * *"

Процессинг мастерных снапшотов

Соответствует ключу process_master_snapshot в values.yaml.

Для своей работы требует:

  • Включенной загрузки мастерных снапшотов в Кипарис.

  • read, write и remove прав на //sys/admin/snapshots:

    yt set //sys/admin/snapshots/@acl/end '{action=allow; subjects=[robot-cron]; permissions=[read; write; remove;]}'
    
  • use на аккаунт, которому принадлежит //sys/admin/snapshots (sys по умолчанию):

    yt set //sys/accounts/sys/@acl/end '{action=allow; subjects=[robot-cron]; permissions=[use]}'
    

В ноду //sys/admin/snapshots/<cell_id>/snapshots поставляются сырые мастерные снапшоты. Этот процесс проводит их валидацию и экспорт в человеко-читаемый формат: снапшот Кипариса сохраняется в //sys/admin/snapshots/snapshot_exports, а снапшот пользователей и относящихся к ним ACL групп в //sys/admin/snapshots/user_exports.

По умолчанию процессинг выключен.

Чтобы переопределить аргументы командной строки, можно передать соответствующие аргументы в values.yaml:

jobs:
  process_master_snapshot:
    enabled: true
    jobDescriptions:
      export:
        args:
          - "export_master_snapshot"
          - "--memory-limit-gbs"
          - "4"

Пользовательские задачи

Можно определить собственные задачи:

additionalJobs:
  my_cleanup:
    enabled: true
    args:
      - clear_tmp
      - --directory
      - //my/custom/path
    schedule: "0 */6 * * *"
    restartPolicy: Never

  my_new_process:
    enabled: true
    jobs:
      - process_one
      - process_two
    jobDescriptions:
      process_two:
        args:
          - process_two
      process_one:
        args:
          - process_one
    schedule: "0 * * * *"
    restartPolicy: Never

Пример values.yaml

yt:
  proxy: http://http-proxies.default.svc.cluster.local
  token: my-secret-token

jobs:
  clear_tmp_files:
    enabled: true
    args:
      - clear_tmp
      - --directory "//tmp/yt_wrapper/file_storage"
      - --account "tmp_files"
    schedule: "*/30 * * * *"
    restartPolicy: Never

unmanagedSecret:
  enabled: false

Запуск:

helm upgrade --install ytsaurus-cron oci://ghcr.io/ytsaurus/cron-chart \
  --version 0.0.3 \
  -f values.yaml

Часто используемые параметры

Параметр Описание
yt.proxy HTTP-прокси для доступа к YTsaurus
yt.token Токен доступа (если unmanagedSecret отключён)
unmanagedSecret Использовать Kubernetes-секрет
image.repository Образ Docker
image.tag Тег образа
schedule Расписание по умолчанию (если не указано в job)
concurrencyPolicy Allow, Forbid, или Replace
successfulJobsHistoryLimit Сколько успешных задач хранить
failedJobsHistoryLimit Сколько неудачных задач хранить
ttlSecondsAfterFinished Как долго объекты job будут храниться в Kubernetes
Предыдущая
Следующая