如何在GCP中列出并删除90天以上的镜像?
删除GCP项目中90天以上镜像的最佳方法
方法一:gcloud命令行手动清理(一次性操作)
这是最直接的方式,适合临时清理需求。
针对Compute Engine镜像
- 先列出所有超过90天的镜像,确认目标列表:
gcloud compute images list --filter="creationTimestamp < $(date -d '-90 days' +%Y-%m-%dT%H:%M:%SZ)" --format="value(name)"
通过creationTimestamp过滤创建时间早于90天的镜像,date命令生成GCP兼容的UTC时间戳。
- 确认列表无误后,批量删除:
gcloud compute images delete $(gcloud compute images list --filter="creationTimestamp < $(date -d '-90 days' +%Y-%m-%dT%H:%M:%SZ)" --format="value(name)")
镜像数量极多时可加--quiet参数跳过确认,但建议先手动核对列表再执行。
针对Artifact Registry/Container Registry容器镜像
- 列出90天以上的容器镜像:
gcloud artifacts docker images list [REGISTRY_LOCATION]-docker.pkg.dev/[PROJECT_ID]/[REPOSITORY] --filter="updateTime < $(date -d '-90 days' +%Y-%m-%dT%H:%M:%SZ)" --format="value(IMAGE_PATH)"
替换[REGISTRY_LOCATION]、[PROJECT_ID]、[REPOSITORY]为实际信息。
- 批量删除(含标签):
gcloud artifacts docker images delete $(gcloud artifacts docker images list [REGISTRY_LOCATION]-docker.pkg.dev/[PROJECT_ID]/[REPOSITORY] --filter="updateTime < $(date -d '-90 days' +%Y-%m-%dT%H:%M:%SZ)" --format="value(IMAGE_PATH)") --delete-tags
方法二:Cloud Functions自动化清理(长期维护)
如果需要定期自动清理,推荐用Cloud Functions+Cloud Scheduler组合:
- 编写清理函数(以Python为例):
import os from datetime import datetime, timedelta from google.cloud import compute_v1 def delete_old_images(event, context): project_id = os.environ.get('PROJECT_ID') image_client = compute_v1.ImagesClient() # 计算90天前的UTC时间戳 cutoff_time = (datetime.utcnow() - timedelta(days=90)).isoformat() + 'Z' # 筛选旧镜像 images = image_client.list(project=project_id) old_images = [img.name for img in images if img.creation_timestamp < cutoff_time] # 批量删除 for img_name in old_images: try: image_client.delete(project=project_id, image=img_name) print(f"Deleted image: {img_name}") except Exception as e: print(f"Failed to delete {img_name}: {str(e)}")
部署函数到Cloud Functions,设置环境变量
PROJECT_ID为你的项目ID,赋予函数compute.images.delete权限。创建Cloud Scheduler任务,设置每周/每月触发该函数,实现自动清理。
方法三:Artifact Registry生命周期规则(无代码自动化)
仅适用于Artifact Registry的容器镜像,无需编写代码即可自动清理:
- 进入GCP控制台的Artifact Registry,选择目标仓库。
- 点击「生命周期规则」→「添加规则」。
- 配置规则:选择「删除旧版本」,设置「版本年龄」为90天,保存后规则自动生效。
注意事项
- 操作前务必确认镜像未被实例模板、磁盘或运行中实例依赖,可通过
gcloud compute images describe [IMAGE_NAME] --format="value(usedBy)"检查。 - 确保操作账号拥有对应权限:Compute Engine需
compute.images.delete,Artifact Registry需artifacts.repositories.deleteArtifacts。
内容的提问来源于stack exchange,提问作者Pankaj K
相关产品推荐
相关产品推荐

