跳转到主要内容

批量过期

说明

新增: MinIO

RELEASE.2023-12-02T10-51-33Z

MinIO 批处理框架允许你使用 YAML 格式的作业定义文件(“batch file”)创建、管理、监控和执行作业。 批处理作业直接在 MinIO 部署上运行,从而利用服务端处理能力,而不受运行 MinIO Client 的本地机器限制。

expire 批处理作业会将 对象自动过期 的行为应用到单个存储桶。 该作业根据提供的配置判断对象是否符合过期条件,且独立于任何已配置的过期规则。

行为

对象立即过期

批量过期会作为批处理作业的一部分立即执行,这与 passive scanner-based application of expiration rules 不同。 具体来说,批量过期不会让位于应用 I/O,因此可能影响部署上常规读写操作的性能。

过期资格在批处理运行时确定

批量过期按存储桶工作,并且每次运行都会一次性执行直至完成。 该作业在运行时判断对象是否符合过期条件,并且 不会 定期重新扫描或重新检查新对象。

如果要处理任何新近满足过期条件的对象,请重新运行该批处理作业。

过期规则仅检查最新对象

批量过期作业只会使用每个对象的最新版本或“current”版本来匹配各条批量过期规则。

SILO 20261109 生命周期、权限与 Object Lock

在 SILO 20261109 中:

  • 提交批量 expire 作业需要 admin:StartBatchJob、s3:ListBucket 与 s3:ListBucketVersions。运行期间,SILO 会持续重新校验提交者凭据,并对每个目标版本强制检查 s3:GetObject、s3:GetObjectVersion、s3:DeleteObject 与 s3:DeleteObjectVersion(当任一规则按标签过滤时还需 s3:GetObjectTagging 与 s3:GetObjectVersionTagging,#310、#311)。禁用、删除、过期或撤销提交者,或移除上述必需权限,都会以 failureReason 停止该作业。
  • 临时 IAM 或授权故障以及不完整的存储桶列举会使作业进入暂停(pausedReason)并自动重试,而不会把中断扫描记录为已完成(#313)。
  • 逐版本过期(retainVersions > 0)会保留 Object Lock 保留期与法定保留保护,跳过受保护版本而不予删除(计入 versionsSkippedLocked,终态为 complete-with-skips,#310、#311)。
  • 全版本清除(retainVersions: 0)仅删除匹配键自身的各个版本,不会误删该前缀下的子键;若任一版本已迁移到远端分层或受 Object Lock 保护,SILO 会整键拒绝删除(计入 keysRefused,终态为 complete-with-skips,#297)。详见 SILO 批处理作业生命周期与无分层下的版本语义。
  • 已完成的 expire 作业在服务重启后仍保持完成状态,即使提交者凭据此后过期或变更也不会重跑或报错(#315)。

expire 批处理作业参考

字段

说明

expire

必需

过期作业类型的顶层字段。

apiVersion

必需

设为 v1。

bucket

必需

指定该作业运行所在的存储桶名称。

prefix

可选

指定该作业运行所在的存储桶前缀。

rules

必需

一个包含一条或多条过期规则的数组,用于应用到指定 bucket 和 prefix (如有)中的对象。

rules.[n].type

必需

支持以下两个值之一:

  • object - 仅应用于当前版本不是 DeleteMarker 的对象。

  • deleted - 仅应用于当前版本是 DeleteMarker 的对象。

有关 DeleteMarker 或版本控制存储桶中删除操作的更完整文档,请参见 对象删除。

rules.[n].name

可选

指定用于过滤对象的匹配字符串。

支持 glob 风格通配符(*、?)。

rules.[n].olderThan

可选

指定对象年龄以过滤对象。 该规则仅应用于年龄超过指定时间单位的对象。

例如,72h 或 3d 会选择年龄超过三天的对象。

rules.[n].createdBefore

可选

指定一个 RFC3339 日期时间来过滤对象。

该规则仅应用于在指定时间戳之前创建的对象。

rules.[n].tags

可选

指定一个键值对数组,用于描述对象标签并据此过滤对象。 value 条目支持 glob 风格通配符(*、?)。

例如,以下配置会将该规则过滤为仅匹配具有相应标签的对象:

tags:
  - key: archive
    value: True

此键与 rules.[n].type: deleted 不兼容。

rules.[n].metadata

可选

指定一个键值对数组,用于描述对象元数据并据此过滤对象。 value 键支持 glob 风格通配符(*、?)。

例如,以下配置会将该规则过滤为仅匹配具有相应元数据的对象:

metadata:
  - key: content-type
    value: image/*

此键与 rules.[n].type: deleted 不兼容。

rules.[n].size

可选

指定对象大小范围以过滤对象。

  • lessThan - 匹配大小小于指定数值的对象(例如 MiB、GiB)。

  • greaterThan - 匹配大小大于指定数值的对象(例如 MiB、GiB)。

rules.[n].purge.retainVersions

可选

指定在执行过期时要保留的对象版本数量。

默认为 0,即删除所有对象版本(最快)。

notify.endpoint

可选

用于发送通知事件的预定义端点。

notify.token

可选

用于访问 notify.endpoint 的可选 JSON Web Token (JWT)。

retry.attempts

可选

在放弃之前完成该批处理作业的重试次数。

retry.delay

可选

每次尝试之间的等待时间(ms)。

expire 作业类型的 YAML 示例

使用 mc batch generate 创建基础 expire 批处理作业,再进行进一步定制。

expire:
  apiVersion: v1
  bucket: mybucket # Bucket where this job will expire matching objects from
  prefix: myprefix # (Optional) Prefix under which this job will expire objects matching the rules below.
  rules:
    - type: object  # objects with zero or more older versions
      name: NAME # match object names that satisfy the wildcard expression.
      olderThan: 70h # match objects older than this value
      createdBefore: "2006-01-02T15:04:05.00Z" # match objects created before this date and time in RFC3339 format
      tags:
        - key: name
          value: pick* # match objects with tag 'name', all values starting with 'pick'
      metadata:
        - key: content-type
          value: image/* # match objects with 'content-type', all values starting with 'image/'
      size:
        lessThan: 10MiB # match objects with size less than this value (e.g. 10MiB)
        greaterThan: 1MiB # match objects with size greater than this value (e.g. 1MiB)
      purge:
          # retainVersions: 0 # (default) delete all versions of the object. This option is the fastest.
          # retainVersions: 5 # keep the latest 5 versions of the object.

    - type: deleted # objects with delete marker as their latest version
      name: NAME # match object names that satisfy the wildcard expression.
      olderThan: 10h # match objects older than this value (e.g. 7d10h31s)
      createdBefore: "2006-01-02T15:04:05.00Z" # match objects created before this date and time in RFC3339 format
      purge:
          # retainVersions: 0 # (default) delete all versions of the object. This option is the fastest.
          # retainVersions: 5 # keep the latest 5 versions of the object including delete markers.

  notify:
    endpoint: https://notify.endpoint # notification endpoint to receive job completion status
    token: Bearer xxxxx # optional authentication token for the notification endpoint

  retry:
    attempts: 10 # number of retries for the job before giving up
    delay: 500ms # least amount of delay between each retry