Миграция с Helm v2 на v3
В этом руководстве описано, как мигрировать с Helm v2 на v3. Helm v2 должен быть установлен и управлять релизами в одном или нескольких кластерах.
Обзор изменений в Helm 3
Полный список изменений между Helm 2 и 3 задокументирован в FAQ. Ниже приведено краткое изложение некоторых изменений, о которых пользователю следует знать до и во время миграции:
- Удаление Tiller:
- Архитектура клиент/сервер заменена на клиент/библиотека (только бинарный
файл
helm) - Безопасность теперь реализована на уровне пользователя (делегирована системе безопасности кластера Kubernetes)
- Релизы теперь хранятся как Secrets внутри кластера, и метаданные объекта релиза изменились
- Релизы сохраняются в namespace релиза, а не в namespace Tiller
- Архитектура клиент/сервер заменена на клиент/библиотека (только бинарный
файл
- Обновления репозитория чартов:
helm searchтеперь поддерживает как поиск по локальным репозиториям, так и запросы к Artifact Hub
- Версия apiVersion чарта обновлена до "v2" для следующих изменений спецификации:
- Динамически связанные зависимости чартов перенесены в
Chart.yaml(requirements.yamlудалён, requirements --> dependencies) - Чарты-библиотеки (вспомогательные/общие чарты) теперь можно добавлять как динамически связанные зависимости
- У чартов появилось поле метаданных
typeдля определения типа чарта:applicationилиlibrary. По умолчанию — application, что означает возможность рендеринга и установки - Чарты Helm 2 (apiVersion=v1) по-прежнему можно устанавливать
- Динамически связанные зависимости чартов перенесены в
- Добавлена спецификация директорий XDG:
- Домашняя директория Helm удалена и заменена спецификацией директорий XDG для хранения файлов конфигурации
- Больше не нужно инициализировать Helm
- Команды
helm initиhelm homeудалены
- Дополнительные изменения:
- Упрощена установка/настройка Helm:
- Только клиент Helm (бинарный файл helm), без Tiller
- Парадигма «запустил и работает»
- Репозитории
localиstableне настраиваются по умолчанию - Хук
crd-installудалён и заменён директориейcrdsв чарте, где все CRD устанавливаются перед рендерингом чарта - Значение аннотации хука
test-failureудалено,test-successобъявлено устаревшим. Используйтеtestвместо них - Команды удалены/заменены/добавлены:
- delete --> uninstall: по умолчанию удаляет всю историю релиза
(раньше требовался флаг
--purge) - fetch --> pull
- home (удалена)
- init (удалена)
- install: требует имя релиза или аргумент
--generate-name - inspect --> show
- reset (удалена)
- serve (удалена)
- template: аргумент
-x/--executeпереименован в-s/--show-only - upgrade: добавлен аргумент
--history-max, ограничивающий максимальное количество сохраняемых ревизий на релиз (0 — без ограничений)
- delete --> uninstall: по умолчанию удаляет всю историю релиза
(раньше требовался флаг
- Go-библиотека Helm 3 значительно изменилась и несовместима с библиотекой Helm 2
- Бинарные файлы релизов теперь размещаются на
get.helm.sh
- Упрощена установка/настройка Helm:
Сценарии миграции
Возможны следующие сценарии миграции:
-
Helm v2 и v3 управляют одним кластером:
- Этот сценарий рекомендуется только если вы планируете постепенно отказаться от Helm v2 и не нуждаетесь в управлении v3 релизами, развёрнутыми через v2. Все новые релизы должны развёртываться через v3, а существующие релизы v2 обновляются/удаляются только через v2
- Helm v2 и v3 могут без проблем управлять одним кластером. Версии Helm можно установить на одной или разных системах
- Если вы устанавливаете Helm v3 на ту же систему, необходим дополнительный шаг для сосуществования обеих версий клиента до удаления клиента Helm v2. Переименуйте бинарный файл Helm v3 или поместите его в другую папку для избежания конфликта
- В остальном конфликтов между версиями нет благодаря следующим различиям:
- Хранилища релизов (истории) v2 и v3 независимы друг от друга. Изменения
включают ресурс Kubernetes для хранения и метаданные объекта релиза.
Релизы также привязаны к namespace пользователя, а не к namespace Tiller
(например, namespace Tiller по умолчанию в v2 — kube-system). v2
использует "ConfigMaps" или "Secrets" в namespace Tiller с владельцем
TILLER. v3 использует "Secrets" в namespace пользователя с владельцемhelm. Релизы инкрементальны как в v2, так и в v3 - Единственная проблема может возникнуть, если в чарте определены
кластерные ресурсы Kubernetes (например,
clusterroles.rbac). В этом случае развёртывание v3 завершится ошибкой, даже если ресурс уникален в namespace, поскольку ресурсы будут конфликтовать - Конфигурация v3 больше не использует
$HELM_HOMEи вместо этого использует спецификацию директорий XDG. Она создаётся по мере необходимости и независима от конфигурации v2. Это актуально только при установке обеих версий на одной системе
- Хранилища релизов (истории) v2 и v3 независимы друг от друга. Изменения
включают ресурс Kubernetes для хранения и метаданные объекта релиза.
Релизы также привязаны к namespace пользователя, а не к namespace Tiller
(например, namespace Tiller по умолчанию в v2 — kube-system). v2
использует "ConfigMaps" или "Secrets" в namespace Tiller с владельцем
-
Миграция с Helm v2 на Helm v3:
- Этот сценарий применяется, когда вы хотите, чтобы Helm v3 управлял существующими релизами Helm v2
- Следует учитывать, что клиент Helm v2:
- может управлять от 1 до нескольких кластеров Kubernetes
- может подключаться к нескольким экземплярам Tiller в кластере
- Это означает, что при миграции нужно учитывать, что релизы развёртываются в кластеры через Tiller и его namespace. Поэтому необходимо выполнять миграцию для каждого кластера и каждого экземпляра Tiller, которыми управляет экземпляр клиента Helm v2
- Рекомендуемый путь миграции данных:
- Создайте резервную копию данных v2
- Мигрируйте конфигурацию Helm v2
- Мигрируйте релизы Helm v2
- Когда убедитесь, что Helm v3 управляет всеми данными Helm v2 (для всех кластеров и экземпляров Tiller экземпляра клиента Helm v2) как ожидалось, очистите данные Helm v2
- Процесс миграции автоматизирован плагином Helm v3 2to3
Справочные материалы
- Плагин Helm v3 2to3
- Статья в блоге
с описанием использования плагина
2to3и примерами