乐于分享
好东西不私藏

Kubernetes 存储插件:从 In-tree 到 CSI

Kubernetes 存储插件:从 In-tree 到 CSI

Kubernetes 最早是用来运行无状态服务的。Pod 可以随时销毁、重建、漂移到别的节点,反正不丢数据。

后来用户开始在上面跑数据库、消息队列、需要持久化的文件系统。Kubernetes 不得不解决一个问题:怎么让有状态应用安全地跑在容器里?

答案在存储上。Kubernetes 的存储架构经历了三次大的变动。


第一章:In-tree 插件——一开始能用,后来不够用了

什么是 In-tree

Kubernetes 早期(v1.0 到 v1.7),所有存储驱动的源码都直接写在 K8s 核心仓库里。AWS EBS、GCE PD、Ceph RBD、NFS、iSCSI……每种存储后端对应 pkg/volume/ 下的一个子目录。

kubernetes/└── pkg/    └── volume/        ├── aws_ebs/        ├── gce_pd/        ├── ceph/        ├── nfs/        ├── iscsi/        └── ... (40+ 种存储插件)

用户在 Pod 或 PVC 里指定 volume 类型,Kubelet 就调用对应的插件完成挂载。

为什么一开始这么设计

因为快。

早期 K8s 生态还没成型,集中开发是最直接的方式。核心贡献者熟悉代码结构,合并 PR 也快,用户体验统一。

后来出了什么问题

  1. 发布节奏被绑死

    存储厂商修复一个 bug 或加一个功能,得等 K8s 的版本发布周期。K8s 每季度发一个大版本,厂商的排期完全被动。

  2. 代码块膨胀

    每个存储插件的依赖都会被编译进 kube-controller-manager 和 kubelet。即使用户只装 AWS EBS,其他的插件如NFS、Ceph、GlusterFS 的依赖也一起打进去了。编译时间越来越长,二进制文件越来越大。

  3. 质量把控困难

    核心维护者不可能精通所有存储系统。Ceph 插件出了 bug,得等 Ceph 社区的专家来修,但那个专家不一定熟悉 K8s 的合入流程。

  4. 存储厂商的开发体验差

    你是一家存储公司的工程师,想让自己的产品支持 K8s。fork 了整个仓库,写了几千行 Go 代码,提了 PR——然后等了三个月,因为核心团队的代码审查排期太长。

存储生态的多样性和 K8s 核心代码的稳定性之间有冲突。社区得选一条路。


第二章:FlexVolume——折中的过渡方案

2017 年前后,Kubernetes 推出了 FlexVolume。思路是把存储驱动从核心代码中剥离出来,作为独立的可执行文件部署在节点上。

Kubelet 在预定义路径下找驱动,通过 JSON 格式的命令行调用通信:

/usr/libexec/kubernetes/kubelet-plugins/volume/exec/vendor~driver/driver init/usr/libexec/kubernetes/kubelet-plugins/volume/exec/vendor~driver/driver attach '{"kubernetes.io/pv/name":"pv-001",...}'/usr/libexec/kubernetes/kubelet-plugins/volume/exec/vendor~driver/driver mount '{"kubernetes.io/pv/name":"pv-001",...}'

改进之处

  • 存储驱动不再需要修改 K8s 源码,独立开发、独立部署

  • 存储厂商可以自己发版本

  • 只在需要的节点上装对应驱动

遗留的问题

FlexVolume 解决了”出树”的问题,但本身还是个过渡方案,“出树”方向是对的,但实现方式还不够好:


第三章:CSI——容器存储接口

CSI 是什么

CSI(Container Storage Interface)是一套行业标准,最初由 Kubernetes社区发起,并逐步发展为容器编排领域的通用存储接口标准。它定义了一套 gRPC API,存储供应商可以用同一套接口为任何容器平台提供驱动。

核心想法很简单:存储驱动不应该跑在编排系统的进程内,应该作为独立的标准服务跑。

CSI 的架构通常由两部分组成:K8s 官方提供的通用组件(Sidecar) 和 存储厂商实现的驱动(Driver)。

CSI 架构

Sidecar 

CSI 把不同的存储操作拆分到独立的容器中,每个 Sidecar 负责与 K8s API 交互,通过 gRPC 调用存储厂商的CSI 驱动。

  • external-provisioner:

    监听 PVC 的创建,调用 Driver 去底层的云存储或物理存储上创建(Create)真实的存储卷。

  • external-attacher:

    监听 VolumeAttachment 对象,调用 Driver 将创建好的存储卷挂载(Attach)到指定的 K8s 工作节点(Node)上。

  • external-resizer:

    监听 PVC 的容量变化,调用 Driver 动态扩容存储卷。

  • external-snapshotter:

    负责处理存储快照(Snapshot)的创建和删除。

  • node-driver-registrar:

    负责将存储驱动注册到该节点上的 kubelet 中。

好处:

  • 如果存储不支持快照,就不部署 snapshotter

  • Sidecar 版本和驱动版本可以各自升级

  • 每个组件只做一件事

  • 同一个 Sidecar 可以和任何 CSI 驱动配合

这些Sidecar组件大部分都是K8s社区维护的。

Github仓库链接:

https://github.com/kubernetes-csi。

CSI 的 gRPC 接口

厂商编写的驱动通常会实现三个gRPC服务:

Controller Service——负责存储卷的生命周期管理(创建、删除、Attach、Detach 等),通常以 Deployment 形式全局运行:

Node Service——运行在每个工作节点上(通常是 DaemonSet),负责将已经挂载到机器上的存储卷格式化并挂载(Mount)到 Pod 的专属目录中:

Identity Service——提供驱动的基础信息(名称、版本、支持的能力等)

CSI标准只定义了一组gRPC接口,K8s本身不会直接调用这些接口。官方Sidecar负责:

存储厂商通常只实现CSI Driver,这个部分就是上面列举的三组核心服务的实现部分。

卷的生命周期

1. 用户创建 PVC       ↓2. external-provisioner 监听到 PVC 事件       ↓3. 调用 CSI Driver 的 CreateVolume → 存储后端创建卷       ↓4. K8s 调度器将 Pod 调度到某个节点       ↓5. external-attacher 调用 ControllerPublishVolume → 卷挂载到目标节点       ↓6. Kubelet 调用 NodeStageVolume → 设备准备与预挂载       ↓7. Kubelet 调用 NodePublishVolume → 挂载到 Pod 目录       ↓8. Pod 运行,读写数据       ↓9. Pod 删除 → NodeUnpublishVolume       ↓10. 节点不再需要卷 → ControllerUnpublishVolume       ↓11. PVC 删除 → DeleteVolume

这个顺序非常重要,客户端发起PVC创建请求后,调度器先将要运行Pod的节点选择出来,然后厂商驱动调用后端存储API创建卷并将卷挂到目标节点,这些动作由“Controller Service”完成。之后Pod才能真正起来,随后运行在节点上的“Node Service”完成卷的初始化并将可以使用的卷挂载到Pod的指定目录中。

这样K8s核心代码不需要针对每个存储系统写逻辑。

CSI 控制器部署示例

在实际部署中,存储厂商实现的 “Controller Service” 是和 K8s 官方的多个 Sidecar 容器运行在同一个 Pod 中。

这个 Pod 通常被称为 “CSI Controller Pod”(或 CSI Plugin Controller),一般以 Deployment 的形式部署,在集群中运行 1 个或多个副本(通过 Leader Election 实现高可用)。

下面是一个示例:

---apiVersion: apps/v1kind: Deploymentmetadata:name: ebs-csi-controllernamespace: kube-systemspec:replicas:2selector:matchLabels:app: ebs-csi-controllertemplate:spec:serviceAccountName: ebs-csi-controller-sacontainers:-name: csi-provisionerimage: registry.k8s.io/sig-storage/csi-provisioner:v4.0.0args:- --csi-address=/var/lib/csi/sockets/pluginproxy/csi.sock- --feature-gates=Topology=true-name: csi-attacherimage: registry.k8s.io/sig-storage/csi-attacher:v4.5.0args:- --csi-address=/var/lib/csi/sockets/pluginproxy/csi.sock-name: csi-resizerimage: registry.k8s.io/sig-storage/csi-resizer:v1.10.0args:- --csi-address=/var/lib/csi/sockets/pluginproxy/csi.sock-name: csi-snapshotterimage: registry.k8s.io/sig-storage/csi-snapshotter:v7.0.0args:- --csi-address=/var/lib/csi/sockets/pluginproxy/csi.sock-name: ebs-pluginimage: amazon/aws-ebs-csi-driver:v1.28.0args:- --endpoint=$(CSI_ENDPOINT)env:-name: CSI_ENDPOINTvalue: unix:///var/lib/csi/sockets/pluginproxy/csi.sockvolumeMounts:-name: socket-dirmountPath: /var/lib/csi/sockets/pluginproxy/volumes:-name: socket-diremptyDir:{}

为什么它们要挤在同一个Pod中?

这是一种非常经典的 Sidecar 设计模式。其核心逻辑是:“分工合作,本地通信”。

官方 Sidecar 负责“听”:external-provisioner、external-attacher 等容器各自各司其职,专门负责监听 K8s 集群里的 API 对象(如 PVC、VolumeAttachment)的变化。

厂商 Driver 负责“干”:存储厂商的 Controller Service 容器(比如 aws-ebs-csi-driver)只负责接收具体的指令并操作底层存储。

通过 localhost (Unix Socket) 通信:

  • 当 Sidecar 监听到需要创建卷时,它会通过 gRPC 协议调用厂商的 Controller Service。

  • 因为它们在同一个 Pod 内,它们可以通过共享的 Unix Domain Socket(通常挂载一个特殊的 emptyDir 卷)进行极高效率的本地通信,而不需要走复杂的网络。


第四章:三者对比


第五章:迁移过程

CSI 再好,也不能一夜之间替换掉所有 In-tree 插件。社区采取了渐进式迁移策略。

迁移时间线

  • 2018(v1.13):CSI 正式 GA,为迁移奠定标准底座

  • 2019(v1.14 - v1.17):引入 CSI Migration 机制(Alpha -> Beta),开始支持透明路由

  • 2021(v1.21):绝大多数 In-tree 存储插件被正式标记为 Deprecated

  • 2022(v1.24): 核心插件(AWS EBS、GCE PD)迁移正式 GA 并默认锁定开启

  • 2022(v1.26):大部分厂商In-tree存储插件移除,迁移到CSI

  • 2023 - 2024(v1.27+):其余长尾插件(如 vSphere 等)代码分批完成最终清理

迁移机制:CSI Migration Feature Gate

K8s 引入了CSIMigration特性门控,用户不需要修改 YAML,In-tree 插件的请求会自动转发到对应的 CSI 驱动:

# PVC 依然用 in-tree 的 provisioner 标识kind: StorageClassmetadata:name: my-scprovisioner: kubernetes.io/aws-ebs   # in-tree 标识符# 内部:CSIMigration 自动转发到 ebs.csi.aws.com

平台团队部署好 CSI 驱动,打开特性门控,业务方的 YAML 不用改。


回顾

Kubernetes 存储插件走了这么一条路:

  • In-tree:所有驱动写进核心仓库,快但臃肿
  • FlexVolume:驱动拆到节点上,解决了独立开发但实现方式粗糙
  • CSI:定义标准 gRPC 接口,驱动作为独立服务运行

In-tree 时期,K8s 核心团队试图覆盖所有存储场景。FlexVolume 先跑起来再说。CSI 则划清了边界,让生态在标准接口上各自发展。

现在用 kubectl create pvc 的时候,背后可能是阿里云、Ceph或任何存储厂商的 CSI 驱动在跑。不同团队开发,同一套接口。


参考资料

  • CSI Specification: 
    https://github.com/container-storage-interface/spec
  • Kubernetes CSI Documentation:
    https://kubernetes.io/docs/concepts/storage/volumes/#csi
  • CSI Migration Design Doc: 
    https://github.com/kubernetes/enhancements/tree/master/keps/sig-storage/1495-csi-migration
基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-06-04 16:06:54 HTTP/1.1 GET : https://www.yeyulingfeng.com/a/711218.html
  2. 运行时间 : 0.126852s [ 吞吐率:7.88req/s ] 内存消耗:4,778.71kb 文件加载:145
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=641cfd7dfa92e2b9d2ab3984f498a96e
  1. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/autoload_static.php ( 6.05 KB )
  7. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/ralouphie/getallheaders/src/getallheaders.php ( 1.60 KB )
  10. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  11. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  12. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  13. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  14. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  15. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  16. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  17. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  18. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  19. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/guzzlehttp/guzzle/src/functions_include.php ( 0.16 KB )
  21. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/guzzlehttp/guzzle/src/functions.php ( 5.54 KB )
  22. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  23. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  24. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  25. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/provider.php ( 0.19 KB )
  26. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  27. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  28. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  29. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/common.php ( 0.03 KB )
  30. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  32. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/alipay.php ( 3.59 KB )
  33. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  34. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/app.php ( 0.95 KB )
  35. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/cache.php ( 0.78 KB )
  36. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/console.php ( 0.23 KB )
  37. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/cookie.php ( 0.56 KB )
  38. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/database.php ( 2.48 KB )
  39. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/filesystem.php ( 0.61 KB )
  40. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/lang.php ( 0.91 KB )
  41. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/log.php ( 1.35 KB )
  42. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/middleware.php ( 0.19 KB )
  43. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/route.php ( 1.89 KB )
  44. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/session.php ( 0.57 KB )
  45. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/trace.php ( 0.34 KB )
  46. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/view.php ( 0.82 KB )
  47. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/event.php ( 0.25 KB )
  48. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  49. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/service.php ( 0.13 KB )
  50. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/AppService.php ( 0.26 KB )
  51. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  52. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  53. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  54. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  55. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  56. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/services.php ( 0.14 KB )
  57. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  58. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  59. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  60. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  61. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  62. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  63. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  64. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  65. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  66. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  67. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  68. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  69. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  70. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  71. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  72. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  73. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  74. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  75. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  76. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  77. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  78. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  79. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  80. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  81. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  82. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  83. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  84. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  85. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  86. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  87. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/Request.php ( 0.09 KB )
  88. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  89. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/middleware.php ( 0.25 KB )
  90. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  91. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  92. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  93. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  94. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  95. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  96. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  97. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  98. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  99. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  100. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  101. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  102. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  103. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/route/app.php ( 3.94 KB )
  104. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  105. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  106. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/controller/Index.php ( 9.87 KB )
  108. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/BaseController.php ( 2.05 KB )
  109. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  110. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  111. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  112. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  113. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  114. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  115. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  116. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  117. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  118. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  119. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  120. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  121. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  122. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  123. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  124. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  125. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  126. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  127. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  128. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  129. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  130. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  131. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  132. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  133. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  134. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  135. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/controller/Es.php ( 3.30 KB )
  136. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  137. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  138. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  139. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  140. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  141. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  142. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  143. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  144. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/runtime/temp/c935550e3e8a3a4c27dd94e439343fdf.php ( 31.50 KB )
  145. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000708s ] mysql:host=127.0.0.1;port=3306;dbname=wenku;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000800s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000348s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000250s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000481s ]
  6. SELECT * FROM `set` [ RunTime:0.000195s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000536s ]
  8. SELECT * FROM `article` WHERE `id` = 711218 LIMIT 1 [ RunTime:0.008675s ]
  9. UPDATE `article` SET `lasttime` = 1780560414 WHERE `id` = 711218 [ RunTime:0.000735s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 64 LIMIT 1 [ RunTime:0.000236s ]
  11. SELECT * FROM `article` WHERE `id` < 711218 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000510s ]
  12. SELECT * FROM `article` WHERE `id` > 711218 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000412s ]
  13. SELECT * FROM `article` WHERE `id` < 711218 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.001468s ]
  14. SELECT * FROM `article` WHERE `id` < 711218 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.002960s ]
  15. SELECT * FROM `article` WHERE `id` < 711218 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.018910s ]
0.130938s