组件资源清理

资源清理的目的是: 清理磁盘上无用的数据, 减轻磁盘的压力. 清理的对象主要是, 不再使用的镜像, 已删除组件产生的数据. 清理的数据包括: 源代码, slug 包, 数据库元数据, 日志, 存储和镜像. 本文会一一介绍以上各种数据的清理.

源代码

在代码检测阶段, 检测完成后会马上清理相应源代码.

slug 包

源码构建的组件, 在构建成镜像前, 都根据源码会生成一个 slug 包, 这个 slug 包在镜像构建完后就不再需要了, 会马上被清理. 该 slug 包位于 /grdata/build/tenant/{tenant_id}/slug/{service_id}, tenant_idservice_id 分别为 租户ID 和 组件ID.

数据库元数据

组件的元数据保存在两个数据库中, 分别是 region 和 console. 它们保存了组件的环境变量, 端口, 健康检查, 资源配置 和 网关策略等信息;当你主动发起删除组件的操作时, 这个两个数据库中相应的数据也会被删除掉。

日志

日志包括事件日志容器日志事件日志 即组件的构建, 启动, 更新, 停止等操作产生的日志; 容器日志则是组件运行时 输出到标准输出的日志, 比如访问日志, 报错日志.

事件日志的清理策略是, 保留最近的 30 个和最近 30 天的日志. 而容器日志的策略则是保留最近 7 天的内容.

这些日志文件都位于 /grdata/download/log/ 目录下.

存储

存储分为本地存储, 共享存储内存文件存储, 会持久化到磁盘的是本地存储和共享存储, 当在控制台删除他们的时候, 并不会删除他们在磁盘上相应的数据, 仅仅删除其在数据库 中的元数据. 你在控制台中已经看不到该存储了, 其实它还在磁盘上. 对于无状态的组件, 它的持久化文件位于 /gradata/tenant/{tenant_id}/service/{service_id}/{volume name} 下; 而对于有状态组件, 它的持久化文件则位于 /gradata/tenant/{tenant_id}/service/{service_id}/{pod name}/{volume name} 下.

那么这些存储的持久化数据会在什么时候被删除呢? 答案就是 删除组件 时, 当你主动删除了某个组件, 它对应的全部存储的持久化数据都会被删除掉.

镜像

镜像的清理由Kubernetes中的kubelet来完成,Kubelet的垃圾回收功能可以清理不再使用的容器和镜像,kubelet对容器进行垃圾回收的频率是每分钟一次,对镜像进行垃圾回收的频率是每五分钟一次。详细内容请查看Kubernetes官方文档