🛡️ Argo CD 安全な削除の守護者: Resources Finalizer 完全ガイド

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にデフォルトで含めることをお勧めします。

ただし、削除は常に慎重に行う必要があることを忘れないでください!🛠️


Comments

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です