Как обновить набор контейнеров, работающих в кубернетах?

Каков предпочтительный способ обновления набора модулей (например, после внесения изменений в код и передачи основного образа докера в концентратор докеров), управляемый контроллером репликации в кластере kubernetes?

Я вижу 2 способа:

  1. Удаление и повторное создание контроллера репликации вручную
  2. Использование kubectl rolling-update

При rolling-update мне нужно изменить имя контроллера репликации. Так как я храню определение контроллера репликации в файле YAML, а не генерирую его вручную, необходимость изменить файл, чтобы вытолкнуть обновление кода, похоже, вызывает вредные привычки, такие как чередование двух имен для контроллера репликации (например, controllerA и controllerB) для избежать конфликта имен

Какой способ лучше?

Ответ 1

Вы должны использовать kubectl rolling-update. Недавно мы добавили функцию, чтобы выполнить "простое обновление обновления", которое будет обновлять изображение в контроллере репликации без его переименования. Это последний пример, показанный на выходе kubectl help rolling-update:

// Update the pods of frontend by just changing the image, and keeping the old name
$ kubectl rolling-update frontend --image=image:v2

Эта команда также поддерживает восстановление - если вы отмените свое обновление и перезапустите его позже, оно возобновится с того места, где оно было остановлено. Несмотря на то, что он создает новый контроллер репликации за кулисами, в конце обновления новый контроллер репликации берет имя старого контроллера репликации, поэтому он отображается как чистое обновление, а не переключается на совершенно новый контроллер репликации.

Ответ 2

Наилучший вариант, который я нашел, - это Skaffold, который автоматически создает образ, передает его в реестр изображений и обновляет соответствующие модули/контроллеры. Он может даже следить за изменениями кода и перестраивать образ, как только изменения будут сохранены с skaffold dev команды skaffold dev. Это требует только добавления простого skaffold.yaml который указывает изображение в реестре и путь к манифестам Kubernetes. Этот рабочий процесс подробно описан в руководстве по началу работы.