メインコンテンツへスキップ
エンタープライズ版のプラグイン管理機能が正式リリースされる前は、Web インターフェースからプラグインを削除しても、データベースのマーカーが変更されるだけで、K8s クラスタからプラグインリソースが実際に削除されることはありません。この記事では、プラグイン CRD リソースの関連概念と、K8s で実行されているプラグインを完全に削除する方法を紹介します。
以下の文章では、「プラグイン」、「Dify Plugin」、「DP」はすべてエンタープライズ版にインストールされた Dify プラグインを指します。

プラグインインストールがクラスタに与える影響

プラグインが正常にインストールされると、K8s クラスタ内で Runner Pod が実行されます。Pod 名はランダムに生成されたハッシュ値です。pluginName フィールドから具体的なプラグイン名とバージョンを確認できます。 例えば、bfb86f037071c05d3ce1d63c2f4f1e30--6 のサフィックス --6 は、これが6回目のインストール試行であることを示しています。プラグインのインストールが失敗した場合、次回の再インストール時にサフィックスの数字が自動的にインクリメントされ、以前失敗した CR は Failed 状態のまま保持されます。 以下のコマンドですべてのプラグイン CRD を確認できます: kubectl get dp 出力例

プラグインの削除

完全な削除プロセスには2つのステップがあります:データベースレコードのクリーンアップ + K8s リソースの削除。

データベースのクリーンアップ

現在、データベースをクリーンアップする最も簡単な方法は、Web インターフェースで「プラグインを削除」をクリックすることです。
⚠️ 重要:K8s リソースを削除する前に、必ず Web インターフェースで「プラグインを削除」をクリックしてください。 この操作により、dify-plugin テーブルからインストールレコードが削除されます。このステップをスキップすると、以下のデータベーステーブルの関連レコードを手動でクリーンアップする必要があります。
データベーステーブル構造

クラスタリソースの削除

特定のプラグインを削除

DifyPlugin は Kubernetes カスタムリソース定義(CRD)によって管理されるリソースであるため、Pod を直接削除しても完全に削除できません。コントローラレベルから削除する必要があります。 上記のプラグインを例として、Pod 名で特定のプラグインを削除できます。DifyPlugin CR を削除すると、Kubernetes のガベージコレクション機構が自動的に関連するすべての子リソースをカスケード削除します。
# 特定の DifyPlugin CR を削除
kubectl delete difyplugin bfb86f037071c05d3ce1d63c2f4f1e30--6 -n dify

# または短縮名を使用
kubectl delete dp bfb86f037071c05d3ce1d63c2f4f1e30--6 -n dify
上記のコマンドを実行すると、以下のリソースが自動的に削除されます:
  • Deployment:bfb86f037071c05d3ce1d63c2f4f1e30--6
  • ReplicaSet:bfb86f037071c05d3ce1d63c2f4f1e30--6-67dbf9f9d5
  • Pod:bfb86f037071c05d3ce1d63c2f4f1e30--6-67dbf9f9d5-k8ktn
  • Service:svc-bfb86f037071c05d3ce1d63c2f4f1e30--6

すべてのプラグインを削除

# ステップ 1:すべてのプラグイン設定をバックアップ
kubectl get dp -n dify -o yaml > all-difyplugins-backup.yaml

# ステップ 2:削除するプラグインのリストを確認
kubectl get dp -n dify

# ステップ 3:一括削除を実行
kubectl delete dp --all -n dify

# ステップ 4:復元が必要な場合は、以下のコマンドを実行
kubectl apply -f all-difyplugins-backup.yaml

すべての失敗したプラグインを削除

# BuildFailed 状態のすべてのプラグインを表示
kubectl get dp -n dify | grep BuildFailed

# BuildFailed 状態のすべてのプラグインを一括削除
kubectl get dp -n dify -o jsonpath='{range .items[?(@.status.state=="BuildFailed")]}{.metadata.name}{"\n"}{end}' | \
  xargs -I {} kubectl delete dp {} -n dify
また、失敗したプラグインのインストールレコードは install_tasks テーブルに保存されます。 SQL クエリ結果

Flask コマンドによるプラグイン移行

以下のコマンドを使用して、プラグインの一括エクスポートとインストールを行うことができます:
# プラグイン設定をファイルにエクスポート
uv run --project api flask extract-plugins --output_file plugins.jsonl --workers 10

# プラグインを一括インストール
uv run --project api flask install-plugins \
  --input_file plugins.jsonl \
  --output_file installed_plugins.jsonl \
  --workers 10
以下のコマンドはプラグインの診断とクリーンアップに使用します:
# エクスポートしたプラグインからユニーク識別子を抽出
uv run --project api flask extract-unique-identifiers \
  --input_file plugins.jsonl \
  --output_file unique_identifiers.json

# すべてのプラグインプロバイダをリスト
uv run --project api python commands_diagnose_plugin_providers.py list

# 特定のプラグインプロバイダをクリーンアップ
uv run --project api python commands_diagnose_plugin_providers.py clean --provider <provider_name>

# すべてのプラグインプロバイダをクリーンアップ
uv run --project api python commands_diagnose_plugin_providers.py clean-all

# プラグインサービスの実行状態を確認
uv run --project api python commands_diagnose_plugin_providers.py check-plugin-service