resources-finalizer.argocd.argoproj.ioは、Argo CDのApplicationリソースにおいて最も重要視すべき機能の一つです。
この機能がApplicationリソース自体の機能なのか、そして運用環境でなぜ必須的に理解する必要があるのかを、ブログ形式で詳しく解説します。🚀
Argo CDを使用していると、アプリケーションを削除したのに、その中のPodやServiceがそのまま残っていて困惑した経験はありませんか?あるいは逆に、アプリケーションを削除したらクラスター全体のKubernetesリソースが瞬時に消えてしまい、背筋が凍るような思いをしたことは?
これらすべての動作の中心にある設定が、まさにresources-finalizer.argoproj.ioです。今日、この機能の実体と正しい使い方をマスターしましょう!

1. Finalizerとは何ですか? 🤔
Kubernetesにおいて、Finalizerは「削除前のチェックリスト」のようなものです。あるリソースにFinalizerが付与されている場合、ユーザーが削除コマンドを発行してもすぐに消滅せず、特定の条件(クリーンアップ作業)が完了するまで削除を待機(Pending)させます。
Argo CDのApplicationリソースにこのFinalizerを登録すると、Argo CDコントローラーに次のように命令するのと同じです。
このApplicationを削除する際、管理していた下位リソースも責任を持ってすべて削除してください!
2. なぜこの機能が必要なのですか? (カスケード削除) 🌊
基本的に、Argo CDでApplicationリソースを削除すると、Application設定ファイル自体のみが削除されます。クラスターにデプロイされた実際のリソースは「孤児(Orphan)」状態となり、そのまま残ってしまいます。
しかし、resources-finalizerを使用すると、
カスケード削除(Cascade Deletion)
が有効になります。
- Finalizerがない場合: Application削除 → Argo CD設定のみ削除 → 実際のインフラリソースは残留 (散らかる 🧹)
- Finalizerがある場合: Application削除 → Argo CDが実際のリソース削除を開始 → すべてのリソース削除を確認 → Application最終削除 (きれい ✨)
3. 実践コード: どのように適用しますか? 💻
Applicationマニフェストのfinalizersフィールドに追加するだけです。
📝 Application YAML 例
YAML
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: my-safe-app
namespace: argocd
finalizers:
# この行が重要です!
# Application削除時に下位リソースも一緒に削除するよう指示します。
- resources-finalizer.argocd.argoproj.io
spec:
project: default
source:
repoURL: https://github.com/my-repo/manifests.git
targetRevision: HEAD
path: app-folder
destination:
server: https://kubernetes.default.svc
namespace: my-app-ns
4. 運用時の注意事項とヒント (ベストプラクティス) 🚨
① リソース削除順序と依存関係
Finalizerが機能すると、Argo CDはリソース間の依存関係を考慮して削除を試みます。しかし、まれに特定のKubernetesリソース(例: Namespace)が削除されずにTerminating状態に陥ることがあり、その際、Applicationリソースも一緒に削除されずに停止してしまう可能性があります。
② 手動削除時の注意
もしインフラリソースは残し、Argo CDの設定のみを削除したい場合は、削除コマンドを発行する前に必ずmetadata.finalizersリストから該当項目を先に削除する必要があります。そうしないと、実際のリソースが予期せず消滅する可能性があります。
③ バックグラウンド vs フォアグラウンド削除
基本的にArgo CDはバックグラウンド削除を試みますが、KubernetesのpropagationPolicy設定を通じて、よりきめ細かく制御することも可能です。
5. 要約テーブル 📊
| 特徴 | 説明 |
| — | — |
| 適用対象 | Argo CD Applicationカスタムリソース |
| 主要な役割 | アプリケーション削除時に下位リソース(Deployment, SVCなど)を同時に削除 |
| 動作方式 | Kubernetes Finalizerメカニズムを利用した削除遅延とクリーンアップ |
| 使用推奨 | テスト環境やクリーンなリソース整理が必要なすべての場所 |
—
🏁 終わりに
resources-finalizer.argocd.argoproj.ioは、Argo CD Applicationリソースのライフサイクル管理を担う非常に強力な機能です。インフラをクリーンに保ち、リソースの漏洩を防ぐため、ほぼすべてのApplicationにデフォルトで含めることをお勧めします。
ただし、削除は常に慎重に行う必要があることを忘れないでください!🛠️
コメントを残す