راهنمای استفاده از API - Snapshot

پیش‌نیازها

  • مقدار متغیر {{baseURL}} را در دستورات خود تنظیم کنید:
    https://api.sotoon.ir/machine/v1/thr1
  • توکن Bearer معتبر در هدر قرار دهید. توصیه می‌شود ابتدا یک کاربر-سرویس با دسترسی compute-admin ساخته و از توکن این کاربر-سرویس استفاده نمایید:
Authorization: Bearer <TOKEN>
  • متغیر {namespace} برابر با نام فضای کاری شما در پنل ستون است (در این مستند از مثال business-staging استفاده شده است).
  • متغیر {snapshot-name} برابر با نام ریسورس volumesnapshot است (در این مستند از مثال snapshot-pvc-0 استفاده شده است).
    توجه کنید که این نام با نامی که در کلاستر Kubernetes مشاهده می‌کنید متفاوت است؛ در واقع این ریسورس در API کامپیوت همان underlying storage متناظر با volumesnapshotcontent در کلاستر Kubernetes شما است.

تنظیمات هدر

نمونه هدرهای استفاده‌شده (مهم‌ترین‌ها Authorization و Content-Type هستند):

Authorization: Bearer <TOKEN>
Content-Type: application/json
Accept: */*
Origin: [https://api.sotoon.ir/machine/v1/thr1](https://api.sotoon.ir/machine/v1/thr1)

الگوی مسیرها

تمامی آدرس‌ها از الگوی زیر استفاده می‌کنند:

{{baseURL}}/apis/snapshot.storage.k8s.io/v1/namespaces/{namespace}/volumesnapshots

در درخواست‌های مربوط به یک ریسورس خاص، نام Snapshot در انتهای مسیر قرار می‌گیرد:

{{baseURL}}/apis/snapshot.storage.k8s.io/v1/namespaces/{namespace}/volumesnapshots/{snapshot-name}

۱. دریافت لیست Snapshot

روش: GET

مسیر:
/apis/snapshot.storage.k8s.io/v1/namespaces/{namespace}/volumesnapshots

نمونه curl:

curl -X GET "{{baseURL}}/apis/snapshot.storage.k8s.io/v1/namespaces/business-staging/volumesnapshots" \
  -H "Authorization: Bearer <TOKEN>"

هدف: مشاهده‌ی وضعیت، متادیتا و اطلاعات منابع.


۲. دریافت یک Snapshot

روش: GET

مسیر: /apis/snapshot.storage.k8s.io/v1/namespaces/{namespace}/volumesnapshots/{snapshot-name}

نمونه curl:

curl -X GET "{{baseURL}}/apis/snapshot.storage.k8s.io/v1/namespaces/business-staging/volumesnapshots/snapshot-pvc-0" \
  -H "Authorization: Bearer <TOKEN>"

هدف: مشاهده‌ی وضعیت، متادیتا و اطلاعات منبع.


۳. ایجاد Snapshot

روش: POST

مسیر: /apis/snapshot.storage.k8s.io/v1/namespaces/{namespace}/volumesnapshots

بدنه (JSON) - قالب نمونه:

{
  "apiVersion": "snapshot.storage.k8s.io/v1",
  "kind": "VolumeSnapshot",
  "metadata": {
    "name": "<snapshot-name>",
    "namespace": "<workspace-name>"
  },
  "spec": {
    "source": {
      "persistentVolumeClaimName": "<pvc-name>"
    },
    "volumeSnapshotClassName": "general-purpose"
  }
}

نکات:

  • مقدار namespace را با نام فضای کاری موردنظر (مثلاً business-staging) جایگزین کنید.
  • مقدار persistentVolumeClaimName باید دقیقاً نام دیسکی باشد که می‌خواهید از آن Snapshot بگیرید.
  • مقدار volumeSnapshotClassName باید general-purpose باشد.

نمونه curl (با متغیرها):

curl -X POST "{{baseURL}}/apis/snapshot.storage.k8s.io/v1/namespaces/business-staging/volumesnapshots" \
  -H "Authorization: Bearer <TOKEN>" \
  -H "Content-Type: application/json" \
  --data-raw \
'{"apiVersion":"snapshot.storage.k8s.io/v1","kind":"VolumeSnapshot","metadata":{"name":"snapshot-pvc-0","namespace":"business-staging"},"spec":{"source":{"persistentVolumeClaimName":"pvc-0"},"volumeSnapshotClassName":"general-purpose"}}'

۴. حذف Snapshot

روش: DELETE

مسیر: /apis/snapshot.storage.k8s.io/v1/namespaces/{namespace}/volumesnapshots/{snapshot-name}

نمونه curl:

curl -X DELETE "{{baseURL}}/apis/snapshot.storage.k8s.io/v1/namespaces/business-staging/volumesnapshots/snapshot-pvc-0" \
  -H "Authorization: Bearer <TOKEN>"