ошибка руля: для выпуска требуется откат перед обновлением

В моем кластере я использую weave flux вместе со своим flux-helm-operator, чтобы управлять моим кластером способом gitops.

Однако, когда я вношу изменения в диаграмму в репозитории flux git, я часто сталкиваюсь со следующим сообщением об ошибке:

ts=2019-09-25T11:54:37.604506452Z caller=chartsync.go:328 component=chartsync
warning="unable to proceed with release" 
resource=mychart:helmrelease/mychart release=mychart
err="release requires a rollback before it can be upgraded (FAILED)"

Я не уверен, что это означает в helm, но в любом случае я не должен запускать какую-либо команду helm, поскольку выпуски управляются потоком, поэтому мне интересно, как правильно справиться с этой ошибкой на производстве

(помимо удаления релиза и ожидания, пока поток воссоздаст его)

Хорошо объясненный ответ будет очень принят, спасибо.

1 ответ

Решение

Давайте погрузимся в код helm-operator

Предупреждение unable to proceed with release возникает после GetUpgradableRelease

    // GetUpgradableRelease returns a release if the current state of it
    // allows an upgrade, a descriptive error if it is not allowed, or
    // nil if the release does not exist.

Возвращает ошибку release requires a rollback before it can be upgraded если в выпуске есть Status_FAILEDсостояние (см. release.go #89)

UNHEALTHY выпуск государственных блоков

Как fluxразработчиков, упомянутых в #2265, откатиться наUNHEALTHY государство.

Это не ошибка, но я понимаю, откуда исходят ваши ожидания.

Flux будет продвигать вперед только исправные выпуски, одна из причин этого заключается в том, чтобы гарантировать, что мы не попадем в цикл отказов, --forceТаким образом, флаг не предназначен для использования для принудительного обновления неработоспособного ресурса (для этого следует использовать функцию отката), но был разработан, чтобы сделать возможным обновление диаграмм, например, с помощью обратно несовместимых изменений (например, изменений в неизменяемых полях, которые требуется сначала удалить ресурс, см. #1760).

Вывод:forceUpgrade соблюдается, но не может использоваться для принудительного обновления выпуска в UNHEALTHY государство.

Откат

Как рекомендует автор, вы должны использовать rollback особенность

Время от времени выпуск, сделанный оператором Helm, может дать сбой, можно автоматизировать откат неудачного выпуска, установив .spec.rollback.enable значение true на ресурсе HelmRelease.

Note: a successful rollback of a Helm chart containing a StatefulSet resource is known to be tricky, and one of the main reasons automated rollbacks are not enabled by default for all HelmReleases. Verify a manual rollback of your Helm chart does not cause any problems before enabling it.

Если этот параметр включен, оператор Helm обнаружит ошибочное обновление и выполнит откат, он не будет пытаться выполнить новое обновление, если не обнаружит изменение значений и / или диаграммы.

apiVersion: flux.weave.works/v1beta1
kind: HelmRelease
# metadata: ...
spec:
  # Listed values are the defaults.
  rollback:
    # If set, will perform rollbacks for this release.
    enable: false
    # If set, will force resource update through delete/recreate if
    # needed.
    force: false
    # Prevent hooks from running during rollback.
    disableHooks: false
    # Time in seconds to wait for any individual Kubernetes operation.
    timeout: 300
    # If set, will wait until all Pods, PVCs, Services, and minimum
    # number of Pods of a Deployment are in a ready state before
    # marking the release as successful. It will wait for as long
    # as the set timeout.
    wait: false
Другие вопросы по тегам