پرش به مطلب اصلی

سیاست Lifecycle باکت

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

توجه

هر قاعده اینجا داده را پاک می‌کند. حذف ناهم‌زمان و روی زمان‌بندی پس‌زمینه انجام می‌شود و برای آبجکت‌هایی که بعداً آپلود شوند هم اعمال می‌گردد. وضعیت claim گزارش نمی‌دهد چه چیزی حذف شده است.

نکته

اگر Lifecycle ننویسید، آبجکت‌ها تا وقتی خودتان (یا سیاست حذف claim) آن‌ها را پاک نکنید باقی می‌مانند.

تنظیم از کنسول​

تب Lifecycle در کنسول

  1. وارد workspace شوید و یک namespace را باز کنید.
  2. در ناوبری namespace، از گروه Object Storage روی Bucket claims بزنید.
  3. claim موردنظر را باز کنید.
  4. تب Lifecycle را انتخاب کنید.
  5. روی 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/ یا محدودیت اندازه
  6. روی Save lifecycle بزنید.

حذف Lifecycle​

همهٔ قواعد را حذف کنید و دوباره Save lifecycle بزنید تا پیکربندی از باکت برداشته شود.

تنظیم با kubectl​

فیلد spec.lifecyclePolicy را روی همان S3BucketClaim تنظیم کنید:

zsh
❯ 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 شما از قبل تنظیم شده است.

چند قاعده (نسخه‌ها و قاعدهٔ غیرفعال)​

!manifest.yaml×
tapsicloud › manifest.yaml
1apiVersion: oss.tapsicloud.com/v1alpha1
2kind: S3BucketClaim
3metadata:
4 name: app-data
5spec:
6 lifecyclePolicy:
7 - name: expire-logs
8 enabled: true
9 filter:
10 prefix: logs/
11 tags:
12 - key: class
13 value: transient
14 objectSizeGreaterThan: 1Ki
15 expireAfterDays: 30
16 abortIncompleteMultipartUploadAfterDays: 7
17 - name: trim-versions
18 enabled: true
19 noncurrentVersions:
20 expireAfterDays: 14
21 keepNewest: 3
22 - name: parked
23 enabled: false
24 filter:
25 prefix: tmp/
26 expireAfterDays: 1
✓ dry-runLn 26 · YAML

فیلدهای هر قاعده​

فیلدمعنی ساده
nameشناسهٔ یکتای قاعده
enabledtrue = فعال؛ 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​

zsh
❯ kubectl -n <namespace> patch s3bucketclaim app-data --type=merge -p '{"spec":{"lifecyclePolicy":null}}'