helm install, --plain-http, аутентификация registry, backoff), готовые команды и FAQ. Материалы без входа: каталог блога, матрица pull контейнерных образов (GHCR), Nix flake и substituter на Mac CI, главная MacPull.
Сценарии и риски: типы сбоев Helm / OCI pull в CI
На удалённом Mac CI путь к OCI-чарту не сводится к одному «большому скачиванию», как у классического helm repo add. Клиент сначала согласует манифесты, затем тянет блобы чарта и при необходимости слои провенанса. Трансграничные запуски поэтому ломаются ограниченным набором повторяемых шаблонов: полезно помечать инцидент одной основной меткой, чтобы не смешивать несовместимые меры.
Аутентификация и дрейф токена. HTTP 401 часто означает истёкший robot-токен, PAT, обновлённый без правки CI, или несоответствие scope (pull разрешён для проекта A, а джоба ссылается на B). На общих хостах «наследие» в постоянном HELM_CONFIG_HOME маскирует ошибку до появления «холодного» воркера.
Лимиты и горячие шарды. HTTP 429 возникает, когда слишком много параллельных helm pull или helm install бьёт в один фронт registry, либо когда канал потерь велик и клиенты ретраят агрессивно. Без дисциплины Retry-After «лечение» параллелизмом через новые джобы только усугубляет очередь.
TLS, прокси и несовпадение имён. Частные CA, корпоративная инспекция TLS и DNS, уводящий в другой регион относительно SAN сертификата, проявляются как x509 или обрыв посреди блоба. Смешение IP и FQDN в ссылке oci:// — частая самодостаточная причина.
Коллизии параллелизма. Несколько helm upgrade --install на один release или одновременное разрешение зависимостей конкурируют за каталог кеша Helm и лимиты API Kubernetes даже при здоровом registry. В runbook разделяйте registry-backoff и cluster-backoff.
Матрица решений: параллельный install, --plain-http, аутентификация registry, повторы и backoff
Ниже — стартовый ориентир для Helm 3 на удалённом Mac CI в 2026 году. Две недели замеряйте долю 429, p95 времени pull чарта и долю упавших джоб, прежде чем переходить к более «агрессивной» колонке.
| Профиль раннера | Параллельные операции с чартами | Политика --plain-http |
Аутентификация registry и ротация токена | Backoff HTTP 429 (с, + джиттер) | Backoff HTTP 401 / 5xx / connect (с, потолок) |
|---|---|---|---|---|---|
| Консервативный (общий пул, слабый WAN) | ≤2 параллельных helm pull / install на хост; сериализация по release через mutex в CI |
Выкл в проде; лаборатория только с подписанным исключением | Robot 30–60 суток; login на каждую джобу; не шарьте один секрет между продуктами | Учитывать Retry-After; иначе 4 → 8 → 16 → 32 → 64 (макс. 120) |
1 → 3 → 9 → 27 → 60 (макс. 300) |
| Сбалансированный (стабильный egress, NVMe) | 3–4 параллельных pull; ограничивайте ноги матрицы через resource_group или теги пула |
Выкл; TLS + импорт частного CA | Ротация на 50% TTL; разделите read и write; еженедельная проверка дрейфа | 2 → 4 → 8 → 16 → 32 (макс. 90) | 1 → 2 → 6 → 18 → 45 (макс. 180) |
| Агрессивный (выделенный Mac, registry в том же регионе) | До 6 pull только если очереди API и диска не растут | Выкл; при принудительном HTTP в air-gap изолируйте сегмент | Короткие токены 12–24 ч + ночное обновление; OIDC, если поддерживает реестр | 1 → 2 → 4 → 8 → 16 (макс. 60) — оправдано в основном за своим кешем | 0.5 → 1 → 3 → 9 (макс. 60) |
Политика: флаг --plain-http отключает защиту транспорта к registry. Для трансграничного трафика предпочтительнее корректно доверенный TLS, а не включение HTTP «ради скорости».
Если чарт при helm install тянет ещё и контейнерные образы, сочетайте эту матрицу со слойевой настройкой из GHCR и частный registry: матрица pull, чтобы образы и чарты делили одну логику backoff.
Исполняемый чеклист: helm registry login, helm pull oci://, изоляция окружения и таймауты
Замените плейсхолдеры в ВЕРХНЕМ_РЕГИСТРЕ. Выполняйте от того же пользователя, что и CI, чтобы совпадали пути HELM_CONFIG_HOME.
- Изолировать конфиг на джобу (рекомендуется на общих Mac):
export HELM_CONFIG_HOME="${WORKSPACE}/.helm-config"
export HELM_CACHE_HOME="${WORKSPACE}/.helm-cache"
mkdir -p "$HELM_CONFIG_HOME" "$HELM_CACHE_HOME"
- Вход в OCI registry (без интерактива):
echo "${REGISTRY_TOKEN}" | helm registry login "${REGISTRY_HOST}" \
--username "${REGISTRY_USER}" --password-stdin
- Pull чарта с фиксированной версией (ранний fail при дрейфе тега):
helm pull "oci://${REGISTRY_HOST}/${CHART_PATH}" \
--version "${CHART_VERSION}" \
--destination "${WORKSPACE}/charts"
- Установка из OCI с явными таймаутами (подстройте под SLA кластера):
helm upgrade --install "${RELEASE_NAME}" "oci://${REGISTRY_HOST}/${CHART_PATH}" \
--version "${CHART_VERSION}" --namespace "${NAMESPACE}" --create-namespace \
--wait --timeout 20m --atomic
Только лабораторный HTTP-registry: добавляйте --plain-http к helm pull / helm install лишь на утверждённых хостах; не смешивайте такие секреты с прод-неймспейсами.
Набросок обёртки повторов (bash): цикл вокруг helm pull, пауза по лестнице 429 из матрицы, разбор Retry-After из логов, если реестр отдаёт. Добавьте джиттер (например $((RANDOM % 5)) секунд), чтобы N джобов не синхронизировались на одной секунде.
Переменные окружения: HELM_CONFIG_HOME, HELM_CACHE_HOME, при необходимости SSL_CERT_FILE с внутренним CA. Для согласованности с корпоративным прокси задайте одинаково HTTPS_PROXY и NO_PROXY для login и pull — иначе получите «один раз сработало, потом 401/таймаут».
FAQ: HTTP 429, HTTP 401, ошибки сертификата
429 Too Many Requests. Уточните, лимитирует ли реестр, CDN поверх него или ваш egress NAT. Снизьте параллельные Helm-джобы на хост, уважайте backoff-заголовки, разнесите ноги матрицы по времени; при десятках pull одной версии чарта в час добавьте региональный pull-through cache.
401 Unauthorized. Проверьте scope robot-аккаунта, видимость проекта чарта и что helm registry login нацелен на тот же хост, что и oci://. На общих раннерах очищайте per-job HELM_CONFIG_HOME или всегда подставляйте свежие учётные данные — не полагайтесь на вчерашний login.
Ошибки сертификата или TLS. Импортируйте CA registry в хранилище доверия для стека Helm, согласуйте DNS с SAN, проверьте с раннера openssl s_client -connect хост:443 -servername хост. Глобальный --insecure-skip-tls-verify оставьте одноразовым лабораторным костылём; на трансграничных путях он скрывает реальные атаки.
Дополнительно: общие шаблоны повторов — в FAQ по стабильности pull; когда чарт тянет крупные образы, держите под рукой гайд по ускорению Git и Docker pull.
Итоги: выберите узлы под трансграничный Helm pull и закрепите предсказуемую ёмкость
Эффективный Helm OCI на удалённом Mac строится на трёх рычагах: аутентификация на джобу с ротацией до «гниения» общих секретов, строка матрицы, соответствующая вашему WAN (а не ноутбуку разработчика), и ограниченные повторы, которые не усиливают 429. Отдельно ограничьте диск и параллельный install, чтобы рост кеша Helm и лимиты API Kubernetes не маскировались под «падение registry».
Как подобрать узлы MacPull под трансграничный pull чартов: отдавайте предпочтение выделенному Apple Silicon в регионе, ближайшем к реестру или зеркалу, чтобы окупались TLS и долгоживущий кеш; профиль общего пула используйте только после внедрения per-job HELM_CONFIG_HOME и консервативной строки параллелизма. Сравните тарифы на публичных страницах и масштабируйте раннеры, когда p95 pull перестаёт улучшаться одним лишь backoff.
Откройте тарифы и страницу покупки / аренды, загляните в центр помощи, листайте технический блог или вернитесь на главную — всё доступно без обязательного входа.
Удалённый Mac CI для пайплайнов с тяжёлым registry
Класс Mac Mini, SSH/VNC и запас под совместную настройку Helm и Docker. Планы и гайды открыты без регистрации.