ошибка руля: релиз требует отката, прежде чем он может быть обновлен - PullRequest
1 голос
/ 25 сентября 2019

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

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

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 Ответ

2 голосов
/ 25 сентября 2019

Давайте углубимся в код 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
...