如何查询Google Container Registry中镜像的上次拉取/访问时间
GCP Container Registry 查询镜像上次拉取时间及过时镜像清理方案
GCR 原生未直接对外暴露镜像上次拉取/访问时间的元数据字段,默认仅支持查询镜像的创建时间、修改时间,要实现基于拉取时间的镜像清理,需要结合 GCP 云审计日志功能实现,具体方案如下:
实现步骤
- 开启 GCR 审计日志
进入项目 IAM 控制台的审计日志设置页,找到Google Container Registry API,开启Data Read类型的审计日志,开启后所有镜像拉取操作都会被记录到云日志中。 - 查询指定镜像最近拉取时间
执行如下gcloud命令即可获取指定镜像最近一次拉取的时间戳,替换命令中占位符为你自己的项目、仓库、镜像 digest 信息即可:gcloud logging read "resource.type=gcr_repository AND protoPayload.methodName=google.containerregistry.v1.ContainerRegistry.PullImage AND protoPayload.resourceName=\"projects/你的项目ID/repositories/镜像仓库名/manifests/镜像digest\"" --limit 1 --order-by=timestamp desc - 批量筛选超期未访问镜像
可以自己写脚本批量执行如下逻辑:- 遍历项目下所有 GCR 镜像,拿到所有镜像的 digest 列表
- 对每个 digest 执行上述日志查询命令,拿到最近拉取时间,无查询结果的镜像兜底用创建时间计算
- 对比你设定的阈值X,标记出超过X天未被拉取的镜像
- 批量清理过时镜像
对标记完成的可清理镜像,执行如下命令批量删除即可:gcloud container images delete gcr.io/你的项目ID/镜像名@镜像digest --quiet
注意事项
审计日志仅记录开启之后的拉取操作,开启前的历史拉取记录无法回溯,首次使用时建议先按创建/修改时间做初步清理,待审计日志积累时长≥你设置的清理阈值X后,再用拉取时间做精准清理。
GCP 云日志默认保留时长为30天,若你的清理阈值超过30天,需要手动调整对应日志桶的存储保留时长,避免历史拉取记录被提前清理。
内容的提问来源于stack exchange,提问作者wittydavid
相关产品推荐
相关产品推荐

