تخطَّ إلى المحتوى
نسخة تجريبية

وحدات تخزين Kubernetes

كل مطالبة بوحدة تخزين دائمة (PersistentVolumeClaim) في مجموعتك تصبح قرصًا يتبع حاويتك من عقدة عاملة إلى أخرى ومعه بياناته. تُنشأ وحدة التخزين أول مرة تستخدم فيها حاويةٌ المطالبة، وتُركَّب بنظام الملفات ext4، وتظهر في قسم التخزين من المجموعة وفي صفحة وحدات التخزين في مساحة عملك.

تعرض كل وحدة تخزين هناك مطالبتها، واسم PersistentVolume الخاص بها، وحجمها، وكم تشغل منه على القرص. وحدة التخزين التي تُنشأ لمطالبة يكون اسمها pvc- يليه المعرّف الفريد (UID) للمطالبة، وهو الاسم الذي يعرضه kubectl get pvc في عمود VOLUME. أما وحدة التخزين المحتفَظ بها التي تعيد ربطها بملف من عندك فتحمل الاسم الذي أعطيته لـ PersistentVolume الخاص بها، وتعرضه لوحة التحكم حين تبلّغ عنه المجموعة.

فئات التخزين

لكل مجموعة فئتان:

فئة التخزينعند حذف المطالبة
sahabti-delete (الافتراضية)تُحذف وحدة التخزين وبياناتها.
sahabti-retainتغادر وحدة التخزين المجموعة وتحتفظ بها مساحة عملك، مع بياناتها، في وحدات التخزين.

كلتاهما تعطي وحدات ReadWriteOnce تركّبها عقدة عاملة واحدة في كل مرة، وكلتاهما قابلة للتكبير.

اطلب وحدة تخزين

yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: data
spec:
  accessModes: [ReadWriteOnce]
  storageClassName: sahabti-retain
  resources:
    requests:
      storage: 5Gi

احذف storageClassName لتحصل على sahabti-delete. وفي StatefulSet ضع المواصفات نفسها تحت volumeClaimTemplates، فتحصل كل نسخة على وحدة تخزين خاصة بها.

كبّر وحدة تخزين

من لوحة التحكم: في وحدات التخزين أو في قسم التخزين من المجموعة، افتح قائمة وحدة التخزين واختر تكبير وحدة التخزين، ثم أدخل الحجم الجديد بالغيغابايت. يجب أن يكون الحجم أكبر من حجم وحدة التخزين الحالي، وألا يتجاوز أكبر وحدة تخزين تسمح بها خطتك، وأن تتسع له حصة القرص في مساحة عملك. يستطيع محرّرو مجموعة وحدة التخزين ومديروها تكبيرها، ولا يستطيع ذلك المشاهدون.

ترفع لوحة التحكم الحجم المطلوب في المطالبة داخل المجموعة باسمك، وبدورك في المجموعة، تمامًا كما يفعل هذا الأمر:

bash
kubectl patch pvc data -p '{"spec":{"resources":{"requests":{"storage":"10Gi"}}}}'

وحدة التخزين التي تستخدمها حاوية تكبر وهي تعمل، ومعها نظام الملفات، عادةً خلال دقيقة أو دقيقتين، وتظهر عليها يجري التكبير حتى يكبر قرصها. والمطالبة التي لا تستخدمها أي حاوية تكبر حين تركّبها حاوية في المرة التالية. لا يمكن تصغير وحدات التخزين، ويُرفض أي طلب يتجاوز أكبر حجم تسمح به خطتك مع حدث يوضّح السبب على المطالبة.

لا تستطيع لوحة التحكم تكبير نوعين من وحدات التخزين:

  • وحدة التخزين المحتفَظ بها لا تنتمي إلى أي مجموعة، فليس لها مطالبة تُرفع. استخدمها في مجموعة من جديد، ثم كبّرها هناك.
  • وحدة تخزين أعدت ربطها بملف من عندك: ارفع الحجم المطلوب في المطالبة التي كتبتها لها باستخدام kubectl، فتكبر بالطريقة نفسها.

المستخدَم على القرص

المستخدَم على القرص هو المساحة التي تشغلها بيانات وحدة التخزين على تخزيننا، وتُقاس كل بضع دقائق، ومنها وحدات التخزين المحتفَظ بها. وهو رقم تقريبي، وليس رقم نظام الملفات نفسه:

  • المساحة التي يحرّرها حذف الملفات تعود حين تقتطع العقدة نظام الملفات (trim)، وهي تفعل ذلك مرة كل أسبوع. وحتى ذلك الحين تبقى الملفات المحذوفة محسوبة.
  • البيانات القابلة للضغط جيدًا تشغل على القرص مساحة أقل مما تشغله داخل وحدة التخزين، فقد يعرض df داخل حاوية رقمًا أكبر مما تعرضه لوحة التحكم.

وحدة التخزين التي لم تُقَس بعد تظهر بشَرطة. ولتعرف بدقة مدى امتلاء نظام الملفات، شغّل df -h على مسار تركيب وحدة التخزين داخل حاوية تستخدمها.

احتفظ بالبيانات مع sahabti-retain

حين تحذف مطالبة من فئة sahabti-retain — أو المجموعة كلها — تغادر وحدة تخزينها المجموعة وتبقى في صفحة وحدات التخزين في مساحة عملك، بعلامة محتفَظ بها، ومعها معرّف مثل kv_0123456789abcdef0123. وتظل تُحتسب من حصة القرص حتى تحذفها.

استخدم وحدة تخزين محتفَظًا بها من جديد

في وحدات التخزين، افتح قائمة الوحدة واختر استخدام في مجموعة. ستحصل على ملف مثل هذا لتطبّقه في أي مجموعة من مساحة العمل نفسها:

yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: data-postgres-0-restored
spec:
  capacity:
    storage: 10Gi
  accessModes: [ReadWriteOnce]
  persistentVolumeReclaimPolicy: Retain
  storageClassName: sahabti-retain
  csi:
    driver: disk.sahabti.com
    volumeHandle: kv_0123456789abcdef0123
    fsType: ext4
  nodeAffinity:
    required:
      nodeSelectorTerms:
        - matchExpressions:
            - key: topology.disk.sahabti.com/zone
              operator: In
              values: [zone-1a2b3c4d]
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: data-postgres-0-restored
  namespace: shop
spec:
  storageClassName: sahabti-retain
  volumeName: data-postgres-0-restored
  accessModes: [ReadWriteOnce]
  resources:
    requests:
      storage: 10Gi

وجّه حمل عملك إلى المطالبة فتُوصَل وحدة التخزين ومعها بياناتها. وتعود ملكًا لتلك المجموعة حتى تحذف المطالبة، فيُحتفَظ بها مرة أخرى.

تقع كل وحدة تخزين في منطقة واحدة، ويثبّت الملف الحاويات التي تستخدمها على عُقد عاملة في تلك المنطقة. وحين تزيل عُقدًا تُبقي المجموعة عقدة عاملة في كل منطقة فيها وحدة تخزين ما دام العدد الذي تطلبه يسمح بذلك، وتذهب العقدة العاملة الجديدة أولًا إلى منطقة فيها وحدة تخزين ولا عقدة عاملة فيها.

احذف وحدة تخزين محتفَظًا بها

في وحدات التخزين، اختر حذف وحدة التخزين. تذهب بياناتها إلى غير رجعة. ولا يمكن حذف وحدة تخزين لا تزال مجموعة تحتفظ بها من تلك الصفحة: احذف مطالبتها في المجموعة بدلًا من ذلك.

الحدود

تحدّد خطتك عدد وحدات التخزين في كل مجموعة وأكبر حجم لكل منها — انظر الخطط والحدود. كل وحدة تخزين، محتفَظًا بها أو قيد الاستخدام، تُحتسب من حصة القرص في مساحة عملك، ويمكن لمساحة العمل أن تحتفظ بما يصل إلى ضعف عدد وحدات التخزين المسموح به في المجموعة الواحدة من الوحدات التي لا تستخدمها.