سیاست Lifecycle باکت
Lifecycle قوانین ایستادهای است که بهصورت خودکار داده را حذف میکند — مثلاً آبجکتهای قدیمی زیر یک پیشوند، نسخههای قدیمی، یا آپلودهای ناتمام. این تنظیم روی bucket claim در namespace نوشته میشود — از کنسول یا با kubectl.
هر قاعده اینجا داده را پاک میکند. حذف ناهمزمان و روی زمانبندی پسزمینه انجام میشود و برای آبجکتهایی که بعداً آپلود شوند هم اعمال میگردد. وضعیت claim گزارش نمیدهد چه چیزی حذف شده است.
اگر Lifecycle ننویسید، آبجکتها تا وقتی خودتان (یا سیاست حذف claim) آنها را پاک نکنید باقی میمانند.
تنظیم از کنسول

- وارد workspace شوید و یک namespace را باز کنید.
- در ناوبری namespace، از گروه Object Storage روی Bucket claims بزنید.
- claim موردنظر را باز کنید.
- تب Lifecycle را انتخاب کنید.
- روی Add rule بزنید و فیلدها را پر کنید:
- rule name — نام یکتا برای قاعده (الزامی)
- Armed / Disabled — قاعده فقط وقتی Armed باشد اجرا میشود
- Expire objects after (days) — حذف آبجکت N روز بعد از ساخت
- Abort unfinished uploads after (days) (اختیاری) — لغو آپلود چندبخشی ناتمام
- Expire delete markers… یا Expire superseded versions در صورت نیاز (معمولاً برای باکت versioned)
- Filter (اختیاری) — مثلاً پیشوند
logs/یا محدودیت اندازه
- روی Save lifecycle بزنید.
حذف Lifecycle
همهٔ قواعد را حذف کنید و دوباره Save lifecycle بزنید تا پیکربندی از باکت برداشته شود.
تنظیم با kubectl
فیلد spec.lifecyclePolicy را روی همان S3BucketClaim تنظیم کنید:
❯ kubectl -n <namespace> apply -f - <<EOF❯ apiVersion: oss.tapsicloud.com/v1alpha1❯ kind: S3BucketClaim❯ metadata:❯ name: app-data❯ spec:❯ lifecyclePolicy:❯ - name: expire-logs❯ enabled: true❯ filter:❯ prefix: logs/❯ expireAfterDays: 30❯ abortIncompleteMultipartUploadAfterDays: 7❯ EOF
<namespace> را با namespace خود جایگزین کنید. فرض بر این است که kubeconfig و context مربوط به workspace شما از قبل تنظیم شده است.
چند قاعده (نسخهها و قاعدهٔ غیرفعال)
1apiVersion: oss.tapsicloud.com/v1alpha12kind: S3BucketClaim3metadata:4 name: app-data5spec:6 lifecyclePolicy:7 - name: expire-logs8 enabled: true9 filter:10 prefix: logs/11 tags:12 - key: class13 value: transient14 objectSizeGreaterThan: 1Ki15 expireAfterDays: 3016 abortIncompleteMultipartUploadAfterDays: 717 - name: trim-versions18 enabled: true19 noncurrentVersions:20 expireAfterDays: 1421 keepNewest: 322 - name: parked23 enabled: false24 filter:25 prefix: tmp/26 expireAfterDays: 1
فیلدهای هر قاعده
| فیلد | معنی ساده |
|---|---|
name | شناسهٔ یکتای قاعده |
enabled | true = فعال؛ false = ذخیره میشود ولی اجرا نمیشود |
filter (اختیاری) | محدوده؛ خالی = همهٔ آبجکتها |
filter.prefix | پیشوند کلید |
filter.tags | تگهایی که باید همخوان باشند |
filter.objectSizeGreaterThan / objectSizeLessThan | محدودهٔ اندازه (مثلاً 1Ki, 128Mi) |
expireAfterDays | حذف آبجکت N روز بعد از ساخت |
expireDeleteMarkers | پاک کردن delete marker تنهامانده (با expireAfterDays همزمان نیست) |
noncurrentVersions | حذف نسخههای قدیمی در باکت versioned |
abortIncompleteMultipartUploadAfterDays | لغو آپلود چندبخشی ناتمام |
expireAfterDays و expireDeleteMarkers با هم در یک قاعده مجاز نیستند. قواعد مربوط به نسخهٔ غیرجاری یا delete marker روی باکت بدون versioning پذیرفته میشوند ولی عملاً اجرا نمیشوند.
روی باکت versioned، expireAfterDays معمولاً نسخهٔ جاری را با delete marker منقضی میکند؛ برای پاک کردن نسخههای قدیمی از noncurrentVersions استفاده کنید.
پاک کردن Lifecycle
❯ kubectl -n <namespace> patch s3bucketclaim app-data --type=merge -p '{"spec":{"lifecyclePolicy":null}}'