يسمح 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 وسيتم إنهاؤه تلقائيًا في غضون ثانيتين في حالة فشل العقدة.