yc-sheduler

module
v0.1.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 22, 2026 License: MIT

README

yc-scheduler

Утилита для автоматического управления ресурсами Yandex Cloud (ВМ и Kubernetes) по расписанию.

Описание

yc-scheduler позволяет автоматизировать включение/выключение виртуальных машин и управление ресурсами Kubernetes в Yandex Cloud по заданному расписанию. Поддерживает различные типы планирования: cron, ежедневные, еженедельные и ежемесячные задачи.

Использование

Требования
  • Сервисный аккаунт Yandex Cloud и ключ в формате JSON
  • (опционально) OAuth/IAM токен Yandex Cloud (не рекомендуется для долгоживущих процессов)
  • Конфигурационный файл в формате YAML или JSON
Запуск
# Базовый запуск с ключом сервисного аккаунта из файла
yc-scheduler --config config.yaml --sa-key /path/to/sa-key.json

# Запуск, когда путь к конфигу передан через переменную окружения
export YC_SHEDULER_CONFIG="config.yaml"
yc-scheduler --sa-key /path/to/sa-key.json

# Базовый запуск с ключом сервисного аккаунта из переменной окружения
export YC_SA_KEY_FILE="/path/to/sa-key.json"
yc-scheduler --config config.yaml

# Запуск с токеном (короткоживущий IAM/OAuth токен, не рекомендуется)
yc-scheduler --config config.yaml --token $(yc iam create-token)

# Режим dry-run (без реальных изменений)
yc-scheduler --config config.yaml --sa-key /path/to/sa-key.json --dry-run

# Запуск с настройкой логирования
yc-scheduler --config config.yaml --sa-key /path/to/sa-key.json --log-level debug --log-format json
Параметры командной строки
  • -c, --config (обязательно) — путь к конфигурационному файлу (можно передать через переменную окружения YC_SHEDULER_CONFIG)
  • --sa-key — путь к JSON ключу сервисного аккаунта Yandex Cloud (можно передать через переменную окружения YC_SA_KEY_FILE)
  • -t, --token (опционально) — IAM/OAuth токен Yandex Cloud (переопределяет переменную окружения YC_TOKEN, не рекомендуется для длительных процессов)
  • -n, --dry-run — режим тестового запуска без выполнения операций
  • --version — вывести информацию о версии и завершить работу
  • --log-level — уровень логирования (trace, debug, info, warn, error) (по умолчанию info, можно передать через переменную окружения LOG_LEVEL)
  • --log-format — формат логирования (json или console) (по умолчанию console, можно передать через переменную окружения LOG_FORMAT)
Переменные окружения

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

  • YC_SHEDULER_CONFIG — путь к конфигурационному файлу
  • YC_SA_KEY_FILE — путь к файлу ключа сервисного аккаунта
  • YC_TOKEN — IAM/OAuth токен (не рекомендуется для длительных процессов)
  • LOG_LEVEL — уровень логирования (trace, debug, info, warn, error)
  • LOG_FORMAT — формат логирования (json или console)
Конфигурация

Пример конфигурационного файла (config.yaml):

# Глобальные настройки
timezone: Europe/Moscow              # Таймзона для расписаний (по умолчанию системная)
max_concurrent_jobs: 5               # Максимальное количество одновременных задач (по умолчанию 5)
validation_interval: 10m              # Интервал проверки состояния ресурсов (по умолчанию 10m)
shutdown_timeout: 5m                  # Таймаут graceful shutdown (по умолчанию 5m)
metrics_enabled: false                # Включить Prometheus метрики (по умолчанию false)
metrics_port: 9090                    # Порт для метрик (по умолчанию 9090)

schedules:
  - name: vm-production-start
    type: daily
    resource:
      type: vm
      id: fhm1234567890abcdef
      folder_id: b1g1234567890abcdef
    actions:
      start:
        enabled: true
        time: 09:00
      stop:
        enabled: false

  # Пример с разными расписаниями для start и stop
  - name: k8s-cluster-maintenance
    type: weekly
    resource:
      type: k8s_cluster
      id: catabcdef1234567890
      folder_id: b1g1234567890abcdef
    actions:
      stop:
        enabled: true
        day: 0  # Sunday
        time: 02:00
      start:
        enabled: true
        day: 1  # Monday
        time: 02:15

Полный пример конфигурации см. в config.example.yaml.

Развёртывание в Kubernetes

Для развёртывания выполните:

# (опционально) создать namespace
kubectl create namespace yc-scheduler

# создать Secret с ключом сервисного аккаунта
kubectl -n yc-scheduler create secret generic yc-sa-key \
  --from-file=sa-key.json=/path/to/sa-key.json

# развернуть yc-scheduler
kubectl apply -k deploy/

Внутри контейнера:

  • конфигурация будет доступна по пути /config/config.yaml;
  • ключ сервисного аккаунта — по пути /sa/sa-key.json;
  • путь до этих файлов также проброшен через переменные окружения YC_SHEDULER_CONFIG и YC_SA_KEY_FILE.
Типы расписаний
  • daily — ежедневно в указанное время
  • weekly — еженедельно в указанный день недели
  • monthly — ежемесячно в указанный день месяца
  • cron — по cron-выражению
Типы ресурсов
  • vm — виртуальная машина
  • k8s_cluster — кластер Kubernetes
Действия

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

  • start — запуск ресурса
  • stop — остановка ресурса
Метрики Prometheus

При включении метрик (metrics_enabled: true) доступны следующие эндпоинты:

  • http://localhost:9090/metrics — метрики Prometheus
  • http://localhost:9090/health/live — liveness probe
  • http://localhost:9090/health/ready — readiness probe
  • http://localhost:9090/ — информация о сборке приложения (JSON с версией, коммитом, временем сборки)

Метрика yc_scheduler_operations_total содержит счетчики операций с лейблами:

  • resource_type — тип ресурса (vm, k8s_cluster)
  • action — действие (start, stop)
  • status — статус (success, error, dry_run)
Валидатор состояния

Валидатор периодически проверяет состояние ресурсов и автоматически исправляет расхождения с расписанием:

  • Запускается с интервалом, заданным в validation_interval (по умолчанию 10 минут)
  • Определяет ожидаемое состояние ресурса на основе последних времен выполнения действий start и stop из расписания
  • Если последнее действие stop было позже последнего start, ресурс должен быть остановлен, и наоборот
  • При обнаружении несоответствия создает корректирующую задачу для приведения ресурса в ожидаемое состояние
  • Пропускает проверку для ресурсов в переходных состояниях (PROVISIONING, STOPPING, STARTING и т.д.)

Сборка

Проект использует Makefile для управления сборкой и разработкой.

Быстрый старт:

  1. make init - инициализация проекта
  2. make build - сборка бинарника
  3. make check - перед коммитом запустите полную проверку кода
  4. make release - сборка для всех платформ
Переменные сборки

При сборке автоматически заполняются следующие переменные:

  • Version - версия из git тега
  • Commit - SHA коммита
  • BuildTime - время сборки в UTC
  • URL - URL репозитория

Directories

Path Synopsis
cmd
schema-gen command
yc-scheduler command
internal
app
config
Package config provides configuration structures for yc-scheduler.
Package config provides configuration structures for yc-scheduler.
scheduler
Package scheduler provides the scheduler implementation.
Package scheduler provides the scheduler implementation.
vars
Package vars provides build-time metadata about the application.
Package vars provides build-time metadata about the application.
web
yc
Package yc provides Yandex Cloud client functionality.
Package yc provides Yandex Cloud client functionality.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL