UPGRADE FAILED: another operation (install/upgrade/rollback) is in progress
Helmを使用したKubernetes環境でのデプロイ中に「UPGRADE FAILED: another operation (install/upgrade/rollback) is in progress」というエラーが発生した場合の対処法について解説します。
問題の原因
このエラーは、Helmのアップグレードまたはインストール操作が何らかの理由で中断された場合に発生します。具体的には以下のような状況でよく起こります:
- Helm操作の強制終了(Ctrl+Cなど)
- ネットワーク接続の切断
- タイムアウトによる操作中断
- Azure DevOpsパイプラインなどのCI/CDツールでの実行中断
Helmは操作の状態をKubernetesのSecretリソースに保存して管理しています。操作が正常に完了しないと、この状態が「pending-upgrade」や「pending-install」などの保留状態で残り、次の操作をブロックします。
問題の確認方法
まず、現在の状況を確認するために以下のコマンドを実行します。
すべてのリリースを表示
helm list -a -n <namespace>
-a
フラグをつけると、すべての状態(失敗したものも含む)のリリースが表示されます。
すべてのネームスペースのリリースを確認
helm list -aA
リリースが別のネームスペースに作成されている可能性もあるため、すべてのネームスペースを確認することも重要です。
リリースの履歴を確認
helm history <release-name> -n <namespace>
これにより、リリースの revision 履歴とその状態を確認できます。保留中の操作がある場合、「pending-upgrade」などの状態が表示されます。
解決方法
方法1: ロールバックによる解決
保留中の操作があるリリースを特定できた場合は、ロールバックを試みます。
helm rollback <release-name> <revision> -n <namespace>
<revision>
には、正常に動作していたバージョンの番号を指定します。これにより、保留状態が解消される場合があります。
方法2: Helm Secretの削除
Helm3はリリース情報をKubernetesのSecretとして保存しています。このSecretを削除することで問題を解決できます。
ステップ1: 関連するSecretの確認
kubectl get secrets -n <namespace>
または特定のリリースに関連するSecretを検索:
kubectl get secret -A | grep <app-name>
HelmのSecretは通常 sh.helm.release.v1.<release-name>.v<revision>
という形式の名前を持っています。
ステップ2: 問題のあるSecretの削除
kubectl delete secret <secret-name> -n <namespace>
例:
kubectl delete secret sh.helm.release.v1.gloo.v1 -n gloo-system
WARNING
Secretを削除すると、該当リリースの履歴情報が失われます。可能な場合はまずロールバックを試み、それでも解決しない場合にこの方法を検討してください。
方法3: Azure DevOpsパイプラインでの対処
Azure DevOpsを使用している場合、以下の手順で対処できます。
- Azure Portalにアクセスし、Cloud Shellを開く
- 以下のコマンドで適切なサブスクリプションとAKSクラスターを設定:
az account show
az account set --subscription <subscription-id>
az aks get-credentials --name <aks-cluster-name> --resource-group <resource-group-name>
- 問題のあるSecretを削除
- パイプラインを再実行
予防策
この問題を未然に防ぐための対策として以下をお勧めします。
- Helm操作を途中で中断しない
- CI/CDパイプラインのタイムアウト設定を適切に構成する
- 定期的なメンテナンスで古いリリースをクリーンアップする
まとめ
「UPGRADE FAILED: another operation (install/upgrade/rollback) is in progress」エラーは、Helm操作が不完全に終了した際に発生する一般的な問題です。ほとんどの場合、リリースのロールバックまたは関連するHelm Secretの削除によって解決できます。重要な環境で作業する前には、まずテスト環境で対応策を検証することをお勧めします。