跳转到主要内容
在企业版插件管理功能正式上线之前,通过 Web 界面删除插件只会修改数据库标记,并不会真正从 K8s 集群中移除插件资源。本文介绍插件 CRD 资源的相关概念,以及如何彻底移除 K8s 中运行的插件。
下文中的”插件”、“Dify Plugin”、“DP”均指企业版安装的 Dify 插件。

插件安装对集群的影响

插件安装成功后,K8s 集群中会运行一个 Runner Pod,Pod 名称为随机生成的哈希值。你可以通过 pluginName 字段查看具体的插件名称及版本。 例如 bfb86f037071c05d3ce1d63c2f4f1e30--6 中,后缀 --6 表示这是第六次安装尝试。如果插件安装失败,下次重新安装时会自动递增后缀数字,而之前失败的 CR 会以 Failed 状态保留。 使用以下命令查看所有插件 CRD: kubectl get dp 输出示例

删除插件

完整的删除流程包含两步:清理数据库记录 + 删除 K8s 资源。

清理数据库

目前清理数据库最简便的方法是在 Web 界面点击”删除插件”。
⚠️ 重要:请务必先在 Web 界面点击”删除插件”,再删除 K8s 资源。 此操作会从 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