استخدام وحدات التخزين الدائم لـ Kubernetes pods – سحابة العنكبوت

يسمح Kubernetes باستخدام وحدات التخزين الحاسوبية كتخزين دائم للـ pods. توجد وحدات التخزين الدائم (PV) بشكل مستقل عن الـ pods ، مما يعني أن وحدة التخزين هذه تستمر بعد حذف الـ pod التي تم تركيبها عليها. يمكن تركيب وحدة التخزين الدائم هذه على pods أخرى للوصول إلى البيانات المخزنة عليه. يمكنك نزويد وحدات التخزين الدائم بشكل ديناميكي ، دون الحاجة إلى إنشائها يدويًا ، أو بشكل ثابت ، باستخدام وحدات التخزين الموجودة في مجموعة الحوسبة compute cluster.

إنشاء فئات التخزين

في سحابة العنكبوت ، يتم تعيين فئات التخزين لحساب سياسات التخزين المحددة في لوحة الإدارة. يلزم إنشاء فئة تخزين لجميع عمليات التخزين في مجموعة Kubernetes.

لإنشاء فئة تخزين

انقر على + Create في لوحة تحكم Kubernetes وحدد ملف YAML الذي يحدد هذا الكائن. على سبيل المثال:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: mysc
provisioner: cinder.csi.openstack.org
parameters:
  type: default

يصف هذا البيان فئة التخزين mysc مع ساسية التخزين default. يجب أن تكون سياسة التخزين موجودة في نظام مجموعة الحوسبة وأن يتم تحديدها في حصص التخزين للمشروع الحالي.

تزويد وحدات تخزين دائم ديناميكيًا

يمكن تزويد وحدات التخزين الدائم ديناميكيًا من خلال مطالبات وحدة التخزين الدائم “persistent volume claims” (PVC). تطلب PVC من وحدة التخزين الدائم كل من فئة تخزين معينة، وضع وصول معين وحجم معين. في حالة وجود وحدة تخزين دائم مناسبة في المجموعة ، فهي ملزمة بالمطالبة. إذا كانت وحدات التخزين الدائم المناسبة غير موجودة ولكن يمكن تزويدها ، يتم إنشاء وحدة تخزين جديدة وربطها بالمطالبة. يستخدم Kubernetes الـ PVC للحصول على دعم وحدة تخزين دائم لها وتثبيتها على الـ pod.

المتطلبات الأساسية

  • يجب أن تكون الـ pod والـ PVC التي تستخدمها موجودًا في نفس مساحة الاسم namespace.

لتزويد وحدة تخزين دائم بشكل ديناميكي إلى pod

  • قم بالدخول إلى مجموعة Kubernetes عبر لوحة التحكم. انقر على Kubernetes access للحصول على الإرشادات.
  • في لوحة تحكم Kubernetes ، أنشئ فئة تخزين ، كما هو موضح في إنشاء فئات التخزين.
  • قم بإنشاء PVC. للقيام بذلك، انقر على + Create وحدد ملف YAML التالي:

apiVersion: v1 kind: PersistentVolumeClaim metadata: name: mypvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 10Gi storageClassName: mysc

يحدد هذا البيان مطالبة وحدة التخزين الدائم mypvc التي تطلب من فئة التخزين mysc وحدة تخزينية لا تقل عن 10 جيجا بايت يمكن تركيبها في وضع القراءة / الكتابة read/write بواسطة عقدة واحدة.

يؤدي إنشاء PVC إلى تشغيل تزويد ديناميكي لوحدة تخزين دائم تلبي متطلبات المطالبة. ثم تربطها Kubernetes بالمطالبة.

  • قم بإنشاء pod وحدد الـ PVC كوحدة تخزينه. للقيام بذلك، انقر على + Create وأدخل ملف YAML التالي:
apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
  - image: nginx
    imagePullPolicy: IfNotPresent
    name: nginx
    ports:
    - containerPort: 80
      protocol: TCP
    volumeMounts:
      - mountPath: /var/lib/www/html
        name: mydisk
  volumes:
  - name: mydisk
    persistentVolumeClaim:
      claimName: mypvc
      readOnly: false

يصف ملف التكوين هذا pod nginx الذي يستخدم الـPVC mypvc. يمكن الوصول إلى وحدة التخزين الدائم المرتبطة بالمطالبة على /var/lib/www/html داخل حاوية nginx .

تزويد وحدات تخزين دائم بشكل ثابت

يمكنك تثبيت وحدات تخزين حوسبية موجودة على الـpods باستخدام التزويد الثابت لوحدات التخزين الدائم.

لتثبيت وحدة تخزين حوسبية

  • في لوحة الخدمة الذاتية ، احصل على مُعرّف (ID) وحدة التخزين المطلوبة.
  • قم بالدخول إلى مجموعة Kubernetes عبر لوحة التحكم. انقر على Kubernetes access للحصول على الإرشادات.
  • في لوحة تحكم Kubernetes ، أنشئ فئة تخزين ، كما هو موضح في إنشاء فئات التخزين.
  • قم بإنشاء وحدة تخزين دائم. للقيام بذلك، انقر على + Create وأدخل ملف YAML التالي:
apiVersion: v1
kind: PersistentVolume
metadata:
  annotations:
    pv.kubernetes.io/provisioned-by: cinder.csi.openstack.org
  name: mypv
spec:
  accessModes:
  - ReadWriteOnce
  capacity:
    storage: 10Gi
  csi:
    driver: cinder.csi.openstack.org
    fsType: ext4
    volumeHandle: c5850e42-4f9d-42b5-9bee-8809dedae424
  persistentVolumeReclaimPolicy: Delete
  storageClassName: mysc

يحدد هذا البيان وحدة التخزين الدائم mypv من فئة التخرين mysc التي تحتوي على 10 جيجا بايت من التخزين ووضع الوصول الذي يسمح بتثبيته في وضع القراءة / الكتابة بواسطة عقدة واحدة. وحدة التخزين الدائم mypv تستخدم وحدة التخزين الحوسبية المُعرّفة ID c5850e42-4f9d-42b5-9bee-8809dedae424 كتخزين احتياطي.

  • قم بإنشاء PVC. قبل أن تحدد PVC ، “تأكد من إنشاء وحدة تخزين دائم وأن حالتها “متوفرة “Available”. يجب أن تفي وحدة التخزين الدائم الحالية بمتطلبات المطالبة لحجم التخزين ووضع الوصول وفئة التخزين. انقر على + Create وحدد ملف YAML التالي:

apiVersion: v1 kind: PersistentVolumeClaim metadata: name: mypvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 10Gi storageClassName: mysc

بمجرّد إنشاء الـ PVC mypvc ، تكون وحدة التخزين mypv مرتبطة بها.

  • قم بإنشاء pod وحدد الـ PVC كوحدة تخزينه. استخدم المثال من الخطوة 4 في التزويد الديناميكي لوحدات التخزين الدائم.

    في لوحة الخدمة الذاتية ، سيتم تثبيت وحدة التخزين الحوسبية على المخدم الافتراضي الذي يقوم بتشغيل Kubernetes pod.

جعل عمليّات إطلاق Kubernetes ذات توافريّة عالية

إذا فشلت العقدة التي تستضيف Kubernetes pod أو أصبح يتعذر الوصول إليها عبر الشبكة ، فإن الـpod ستكون عالقة في حالة انتقالية. في هذه الحالة ، لا يتم فصل وحدات التخزين الدائم في الـ pod تلقائيًا ، ويمنع إعادة إطلاق الـpod على عقدة عاملة أخرى. لجعل تطبيقات Kubernetes الخاصة بك ذات توافرية عالية ، تحتاج إلى فرض إنهاء pod في حالة فشل العقدة، عن طريق إضافة قواعد إلى عمليّة إطلاق pod.

لإنهاء pod عالق

أضف الأسطر التالية إلى قسم spec في ملف تكوين الإطلاق:

terminationGracePeriodSeconds: 0
tolerations:
- effect: NoExecute
key: node.kubernetes.io/unreachable
operator: Exists
tolerationSeconds: 2
- effect: NoExecute
key: node.kubernetes.io/not-ready
operator: Exists
tolerationSeconds: 2

إذا تغيرت حالة العقدة إلى “NotReady” أو “Unreachable” ، فسيتم إنهاء الـpod تلقائيًا في غضون ثانيتين.

قد يبدو ملف YAML الكامل للإطلاق كما يلي:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      terminationGracePeriodSeconds: 0
      tolerations:
      - effect: NoExecute
        key: node.kubernetes.io/unreachable
        operator: Exists
        tolerationSeconds: 2
      - effect: NoExecute
        key: node.kubernetes.io/not-ready
        operator: Exists
        tolerationSeconds: 2
      containers:
      - image: nginx
        imagePullPolicy: IfNotPresent
        name: nginx
        ports:
        - containerPort: 80
          protocol: TCP
        volumeMounts:
          - mountPath: /var/lib/www/html
            name: mydisk
      volumes:
        - name: mydisk
          persistentVolumeClaim:
            claimName: mypvc

يصف البيان أعلاه الإطلاق nginx مع pod واحد يستخدم الـPVC mypvc وسيتم إنهاؤه تلقائيًا في غضون ثانيتين في حالة فشل العقدة.

مشاركة:
FacebookTwitterWhatsAppViberCopy LinkTelegramLinkedIn
تم التحديث في يونيو 30, 2022

هل كان المقال مفيداً؟

دروس ذات صلة