You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在LakeFS中硬删除超过n天的对象并实现定时执行?

LakeFS 查找+硬删除超期对象及定时任务实现方案

硬删除会直接清理底层存储数据,操作后无法恢复,首次执行前务必确认待删除对象符合业务清理规则

一、手动查找并硬删除超n天对象步骤

  • 第一步:筛选符合条件的超期对象,使用官方lakectl命令行工具即可完成过滤,将下方命令中的n替换为实际要求的保留天数,路径、仓库、分支参数替换为实际业务配置:
    # 输出超期对象列表到文件,可先校验列表准确性
    lakectl fs ls -r lakefs://<仓库名>/<分支名>/<扫描路径前缀> --created-before $(date -d "-n days" +%Y-%m-%dT%H:%M:%SZ) | awk '{print $6}' > expired_objects.txt
    
  • 第二步:执行硬删除操作,通过--hard参数指定硬删除模式,批量执行命令如下:
    cat expired_objects.txt | xargs -I {} lakectl fs rm --hard {}
    

如果需要通过API实现,调用DELETE /repositories/{repository}/objects接口时添加hard=true参数,配合对象列表接口的创建时间过滤逻辑即可实现相同效果。

二、定时自动执行配置方案

方案1:Linux 服务器 Cron 定时任务

  • 提前在任务执行服务器上安装lakectl,完成身份认证(配置~/.lakectl.yaml的服务地址、访问密钥),测试手动执行清理逻辑正常
  • 编写清理脚本lakefs_clean_expired.sh,示例内容如下:
    #!/bin/bash
    # 业务配置项,按需修改
    LAKEFS_REPO="业务仓库名"
    LAKEFS_BRANCH="main"
    SCAN_PATH="待扫描路径前缀/"
    EXPIRE_DAYS=30
    LOG_PATH="/var/log/lakefs_clean.log"
    
    echo "[$(date)] 开始清理超${EXPIRE_DAYS}天对象" >> $LOG_PATH
    lakectl fs ls -r lakefs://${LAKEFS_REPO}/${LAKEFS_BRANCH}/${SCAN_PATH} --created-before $(date -d "-${EXPIRE_DAYS} days" +%Y-%m-%dT%H:%M:%SZ) --json | jq -r '.path' | xargs -I {} lakectl fs rm --hard lakefs://${LAKEFS_REPO}/${LAKEFS_BRANCH}/{} >> $LOG_PATH 2>&1
    echo "[$(date)] 清理完成" >> $LOG_PATH
    
  • 给脚本添加执行权限:chmod +x /path/to/lakefs_clean_expired.sh
  • 配置定时规则,执行crontab -e添加定时任务,示例为每天凌晨2点执行:
    0 2 * * * /path/to/lakefs_clean_expired.sh
    

方案2:Kubernetes CronJob 定时任务

提前将LakeFS访问密钥存入集群Secret,打包包含lakectl、jq工具的基础镜像,CronJob配置示例如下:

apiVersion: batch/v1
kind: CronJob
metadata:
  name: lakefs-expired-clean
spec:
  schedule: "0 2 * * *" # 自定义执行周期,Cron表达式格式
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: lakectl
            image: 自定义镜像地址/lakectl-with-jq:latest
            env:
              - name: LAKEFS_REPO
                value: "业务仓库名"
              - name: EXPIRE_DAYS
                value: "30"
              - name: LAKECTL_SERVER_ENDPOINT_URL
                value: "LakeFS服务访问地址"
              - name: LAKECTL_CREDENTIALS_ACCESS_KEY_ID
                valueFrom:
                  secretKeyRef:
                    name: lakefs-secret
                    key: access_key
              - name: LAKECTL_CREDENTIALS_SECRET_ACCESS_KEY
                valueFrom:
                  secretKeyRef:
                    name: lakefs-secret
                    key: secret_key
            command:
            - /bin/bash
            - -c
            - |
              lakectl fs ls -r lakefs://${LAKEFS_REPO}/main/data/ --created-before $(date -d "-${EXPIRE_DAYS} days" +%Y-%m-%dT%H:%M:%SZ) --json | jq -r '.path' | xargs -I {} lakectl fs rm --hard lakefs://${LAKEFS_REPO}/main/data/{}
          restartPolicy: OnFailure

首次执行前可将脚本中的lakectl fs rm --hard替换为echo,试运行确认待删除对象列表符合预期后再上线正式任务。

内容的提问来源于stack exchange,提问作者awrow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 20:15:04