Skip to content

Latest commit

 

History

History
32 lines (23 loc) · 5.38 KB

synchronization.md

File metadata and controls

32 lines (23 loc) · 5.38 KB
title permalink
Синхронизация в werf
usage/build/synchronization.html

Синхронизация — это группа сервисных компонентов werf, предназначенных для координации нескольких процессов werf при выборке и сохранении стадий в хранилище, а также при публикации образов в репозиторий образов. Существует 2 таких компонента для синхронизации:

  1. Кеш хранилища — это внутренний служебный кеш werf, который существенно повышает производительность фазы расчёта стадий в случае, если эти стадии уже есть в хранилище. Кеш хранилища содержит соответствие существующих в хранилище с дайджестом (или другими словами: содержит предварительно рассчитанный шаг алгоритма выборки стадий по дайджесту). Данный кеш является когерентным и werf автоматически сбрасывает его, если будет замечена несостыковка между хранилищем стадий и кешом хранилища.
  2. Менеджер блокировок. Блокировки требуются для корректной публикации новых стадий в хранилище, публикации новых образов в репозиторий образов и для организации параллельных процессов выката в Kubernetes (блокируется имя релиза).

Все команды, использующие параметры хранилища (--repo=...) также требуют указания адреса менеджера блокировок, который задается опцией --synchronization=... или переменной окружения WERF_SYNCHRONIZATION=....

Существует 2 типа наборов компонентов для синхронизации:

  1. Локальный. Включается опцией --synchronization=:local.
  • Локальный кеш хранилища располагается по умолчанию в файлах ~/.werf/shared_context/storage/stages_storage_cache/1/PROJECT_NAME/DIGEST, каждый из которых хранит соответствие существующих в хранилище по некоторому дайджесту.
  • Локальный менеджер блокировок использует файловые блокировки, предоставляемые операционной системой.
  1. Kubernetes. Включается опцией --synchronization=kubernetes://NAMESPACE[:CONTEXT][@(base64:CONFIG_DATA)|CONFIG_PATH].
  • Кеш хранилища в Kubernetes использует для каждого проекта отдельный ConfigMap cm/PROJECT_NAME, который создается в указанном NAMESPACE.
  • Менеджер блокировок в Kubernetes использует ConfigMap по имени проекта cm/PROJECT_NAME (тот же самый что и для кеша хранилища) для хранения распределённых блокировок в аннотациях этого ConfigMap. werf использует библиотека lockgate, которая реализует распределённые блокировки с помощью обновления аннотаций в ресурсах Kubernetes.
  1. Http. Включается опцией --synchronization=http[s]://DOMAIN.
  • Есть публичный сервер синхронизации доступный по домену https://synchronization.werf.io.
  • Собственный http сервер синхронизации может быть запущен командой werf synchronization.

werf использует --synchronization=:local (локальный кеш хранилища и локальный менеджер блокировок) по умолчанию, если используется локальное хранилище.

werf использует --synchronization=https://synchronization.werf.io по умолчанию, если используется удалённое хранилище (--repo=CONTAINER_REGISTRY_REPO).

Пользователь может принудительно указать произвольный адрес компонентов для синхронизации, если это необходимо, с помощью явного указания опции --synchronization=:local|(kubernetes://NAMESPACE[:CONTEXT][@(base64:CONFIG_DATA)|CONFIG_PATH])|(http[s]://DOMAIN).

ЗАМЕЧАНИЕ: Множество процессов werf, работающих с одним и тем же проектом обязаны использовать одинаковое хранилище и адрес набора компонентов синхронизации.