---
metadata:
  - name: generator
    content: Diplodoc Platform v5.50.6
alternate:
  - https://ytsaurus.tech/docs/en/flow/devops/vanilla/initial-deploy.md
  - https://ytsaurus.tech/docs/ru/flow/devops/vanilla/initial-deploy.md
---
> **Documentation Index:** Fetch the complete configuration index at https://ytsaurus.tech/docs/ru/llms.txt

<!-- source: ru/_includes/flow/devops/vanilla/initial-deploy.md -->
# Запуск пайплайна в Vanilla-операции

Это самый простой способ запустить Flow: отдельный долгоживущий деплой контроллеров и воркеров не нужен — они поднимаются внутри одной YTsaurus [vanilla-операции](https://ytsaurus.tech/docs/ru/user-guide/data-processing/operations/vanilla.md). Чтобы включить такой запуск, достаточно дописать в `pipeline.yson` блок `vanilla`.

## Что потребуется {#prerequisites}

Конфигурационный файл:

* `pipeline.yson` — [runner config](https://ytsaurus.tech/docs/ru/flow/concepts/spec.md#runner-config) со спекой пайплайна. Чтобы пайплайн запустился в vanilla-операции, в нём должен быть блок `vanilla` с `enable = %true` (см. [Как включить](#enable)). Отдельный `config.yson` не нужен — node config внутри джоб строится автоматически.

И бинари — их роли зависят от языка:

{% list tabs %}

- C++

  * `pipeline` — ваш бинарь пайплайна. Он же является `flow_server` (через `TSimpleRunnerProgram`) и работает контроллером, воркером и раннером.

- Python

  * `pipeline` — лёгкий Python-бинарь: лаунчер + компаньон.
  * `flow_server` — серверный бинарь Flow (`yt/yt/flow/bin/flow_server`), работающий контроллером и воркером; путь к нему передаётся раннеру через `--flow-bin` или переменную окружения `YT_FLOW_BIN`. Компаньон доставляется в джобу автоматически. Не задавайте `entrypoint` в параметрах ресурса компаньона: заданный `executable`, отличный от `./py_companion`, раннер сохраняет как есть и считает, что компаньон уже есть в окружении джобы.

- Java

  * `run.sh` — скрипт запуска Java jar и компаньона; первым аргументом принимает полное имя главного класса.
  * `flow_server` — серверный бинарь Flow (`yt/yt/flow/bin/flow_server`), работающий контроллером и воркером; путь к нему передаётся раннеру через `--flow-bin` или переменную окружения `YT_FLOW_BIN`. Компаньон доставляется в джобу автоматически. Не задавайте `classpath` в параметрах ресурса компаньона: заданный `classpath` раннер сохраняет как есть и считает, что jar-файлы уже есть в окружении джобы.

- Go

  * `pipeline` — Go-бинарь: лаунчер + компаньон.
  * `flow_server` — серверный бинарь Flow (`yt/yt/flow/bin/flow_server`), работающий контроллером и воркером; путь к нему передаётся раннеру через `--flow-bin` или переменную окружения `YT_FLOW_BIN`. Компаньон доставляется в джобу автоматически. Не задавайте `entrypoint` в параметрах ресурса компаньона: заданный `executable`, отличный от `./go_companion`, раннер сохраняет как есть и считает, что компаньон уже есть в окружении джобы.

{% endlist %}

## Как включить {#enable}

Добавьте в конфиг пайплайна блок `vanilla`:

```yson
"vanilla" = {
    "enable" = %true;
    "pool" = "<ваш-пул>";
    "worker" = {"count" = 5};
};
```

Обязательные параметры — `pool` и `worker.count`. Остальные поля имеют разумные значения по умолчанию: контроллер — одна джоба, каждая джоба (и контроллера, и воркера) получает `cpu_limit = 6` и `memory_limit = 18 GiB`. Порты джобы при запуске без сетевого проекта по умолчанию запрашиваются у YTsaurus — фиксированные порты соседних джоб на хосте с общей сетью конфликтовали бы; в сетевом проекте у каждой джобы свой IP, и фиксированные порты `rpc_port = 10080`, `monitoring_port = 10081` и `companion.port = 10082` используются, если раннер не запрашивает порты для джобы. Подробнее — в [Дополнительных параметрах](#advanced-config).


При необходимости ресурсы переопределяются явно:

```yson
"vanilla" = {
    "enable" = %true;
    "pool" = "<ваш-пул>";
    "controller" = {"count" = 1; "cpu_limit" = 2; "memory_limit" = "8g"};
    "worker" = {"count" = 5; "cpu_limit" = 8; "memory_limit" = "32g"};
};
```

Полный список полей — в [TVanillaConfig](https://ytsaurus.tech/docs/ru/flow/generated_docs/all_yson_structs.md#NYT_NFlow_TVanillaConfig) и [TVanillaTaskConfig](https://ytsaurus.tech/docs/ru/flow/generated_docs/all_yson_structs.md#NYT_NFlow_TVanillaTaskConfig).

При запуске `flow_server` сам валидирует спеку, создаёт vanilla-операцию с двумя задачами (controller и worker), устанавливает спеку пайплайна и стартует его.

## Дополнительные параметры {#advanced-config}

Реже используемые поля блока `vanilla`:

#|
|| **Параметр** | **Описание** ||
|| `runtime_proxy_role` | RPC-роль прокси для `runtime_cluster` (роль кластера пайплайна на нём может не существовать). Учитывается, только когда `runtime_cluster` отличается от кластера пайплайна; на кластере пайплайна используется его `proxy_role` ||
|| `cache_path` | Файловый кеш YTsaurus, в который загружаются файлы джоб (общий для всех flow-операций кластера). Непустой, по умолчанию `//tmp/yt_wrapper/file_storage/new_cache` ||
|#

И поля задач (`controller`/`worker`):

#|
|| **Параметр** | **Описание** ||
|| `layers` | Cypress-пути porto-слоёв, монтируемых в корневую файловую систему задачи. Непустой список хотя бы у одной задачи включает porto-джобы для всей операции ||
|| `system_layer_path` | Базовый OS-слой задачи; переопределяет системный слой по умолчанию ||
|| `set_container_cpu_limit` | Запрашивает ограничение CPU контейнера значением `cpu_limit`, если среда исполнения поддерживает его. По умолчанию `%false`: раннер не задаёт это поле в спеке операции. ||
|| `port_count` | Сколько портов задача запрашивает у YTsaurus вместо фиксированных. Без сетевого проекта — по умолчанию 2 у контроллера и 3 у воркера; `0` оставляет фиксированные порты, если компаньонский раннер не увеличивает `worker.port_count` ||
|#

На хосте с общей сетью фиксированные порты соседних джоб столкнулись бы — там порты нужно запросить у YTsaurus полем `port_count` задачи. Именно поэтому при запуске без сетевого проекта поле заполняется автоматически: `port_count = 2` у контроллера и `port_count = 3` у воркера; явное значение `0` возвращает фиксированные порты, если компаньонский раннер не увеличивает `worker.port_count`. Выданные порты приходят в переменных окружения `YT_PORT_<i>` и имеют приоритет над конфигом: `YT_PORT_0` — `rpc_port` (и `bus_server.port`), `YT_PORT_1` — `monitoring_port`, `YT_PORT_2` — `companion.port`. Контроллеру и воркеру без [компаньона](https://ytsaurus.tech/docs/ru/flow/concepts/companion.md) достаточно двух портов, воркеру с компаньоном нужны три; при меньшем значении часть портов останется фиксированной и снова может конфликтовать.

Компаньонские раннеры на Go и Python устанавливают `worker.port_count` не меньше `3`, когда Vanilla включена, даже если поле не задано или явно равно `0`. Порты этих воркеров выделяются и при наличии сетевого проекта; для контроллера действуют правила выше.

## Запуск пайплайна {#run}

{% list tabs %}

- C++

  ```bash
  ./pipeline --config pipeline.yson
  ```

- Python

  ```bash
  ./pipeline --config pipeline.yson --flow-bin flow_server
  ```

- Java

  ```bash
  ./run.sh com.example.pipeline.PipelineMain --config pipeline.yson --flow-bin flow_server
  ```

- Go

  ```bash
  ./pipeline --config pipeline.yson --flow-bin flow_server
  ```

{% endlist %}

После старта раннер по умолчанию (`YT_FLOW_WAIT=1`) ждёт, пока пайплайн не перейдёт в состояние `completed`, и всё это время печатает новые записи публичного лога контроллера — те, что появились с момента начала ожидания; более ранние не выводятся. Раннер можно прервать — на запущенную операцию это не повлияет. С `YT_FLOW_WAIT=0` раннер завершается сразу после запуска.

### Только валидация спеки {#validate-only}

Раннеры C++ и Java поддерживают `--validate-only`: они локально разбирают и проверяют статическую и динамическую спеки, не отправляя их контроллеру. Если спека невалидна, раннер завершится с ошибкой; иначе — успешно. Раннеры Python и Go не передают этот флаг в `flow_server`, поэтому вместо проверки могут запустить или обновить пайплайн. Ниже приведена команда для C++-раннера.

```bash
./pipeline --config pipeline.yson --validate-only
```

## См. также

- [Базовые операции с пайплайном](https://ytsaurus.tech/docs/ru/flow/devops/vanilla/pipeline-operations.md)
- [Обновления и релизы](https://ytsaurus.tech/docs/ru/flow/devops/vanilla/releases.md)
- [Безопасность и доступы](https://ytsaurus.tech/docs/ru/flow/devops/vanilla/security.md)
- [Spec и DynamicSpec](https://ytsaurus.tech/docs/ru/flow/concepts/spec.md)
<!-- endsource: ru/_includes/flow/devops/vanilla/initial-deploy.md -->
