كيفية أداء تثبيت MongoDB على Kubernetes

تنصيب التطبيقات في Kubernetes يمكن أن يكون تحديًا، خاصة بالنسبة لتطبيقات ذات الحالة مثل MongoDB في مجموعة Kubernetes. كيف يمكنك تسهيل التنصيب؟ دع مشغل Kubernetes لـ MongoDB يقوم تلقائيًا بتنصيب وإدارة التطبيقات ذات الحالة داخل مجموعة Kubernetes الخاصة بك.

في هذا البرنامج التعليمي، ستتعلم كيفية تنصيب MongoDB في Kubernetes باستخدام مشغل Kubernetes لـ MongoDB.

استمر في القراءة وابدأ في أتمتة تنصيب Kubernetes الخاص بك!

المتطلبات المسبقة

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

  • A Kubernetes cluster – This demo uses the Kubernetes cluster v1.23.
  • Kubectl مثبت على الجهاز المحلي.
  • Git مثبت على جهازك.
  • jq محلل JSON مثبت على الجهاز المحلي.

إنشاء فضاء اسم لـ MongoDB

عند نشر التطبيقات على Kubernetes ، من الأفضل دائمًا إنشاء فضاء اسم محدد لمشاريعك.

تجعل الفضاءات الاسمية إدارة موارد Kubernetes أسهل للمسؤولين وتمنع تعارض الأسماء. في الوقت نفسه ، يمنع إنشاء الفضاءات الاسمية استخدام الموارد بشكل غير صحيح في بيئة Kubernetes.

افتح الطرفية الخاصة بك وقم بتشغيل الأمر التالي kubectl create أدناه لإنشاء فضاء اسم جديد (ns) بإسم mongodb على عقدة Kubernetes الخاصة بك.

kubectl create ns mongodb

الآن قم بتشغيل الأمر التالي kubectl get للتحقق من قائمة الفضاءات الاسمية على عقدة Kubernetes الخاصة بك.

kubectl get ns

سترى فضاء اسم جديد باسم mongodb المتاح على عقدتك ، كما هو موضح أدناه.

Creating and Verifying the mongodb Namespace

تنزيل مشغل MongoDB لـ Kubernetes

بعد إنشاء مساحة الأسماء، حان الوقت لتنزيل مشغل MongoDB Kubernetes. مشغل MongoDB Kubernetes هو مجموعة من مشغلات Kubernetes. تقدم هذه المشغلات الأوتوماتيكية نشرًا وتكوينًا وإدارة لـ MongoDB Community على بيئة Kubernetes.

قم بتشغيل الأمر git أدناه لـ clone مشروع مشغل MongoDB Kubernetes إلى جهازك المحلي.

git clone <https://github.com/mongodb/mongodb-kubernetes-operator.git>

الآن، قم بتشغيل كل أمر أدناه لتغيير دليل عملك الحالي إلى mongodb-kubernetes-operator وقائمة (ls) جميع الملفات والدلائل المتاحة.

# قم بتغيير دليل العمل إلى mongodb-kubernetes-operator
cd mongodb-kubernetes-operator/

# قائمة الملفات والدلائل
ls

سترى دليلًا فرعيًا يحمل اسم config داخل ~/mongodb-kubernetes-operator كما هو موضح أدناه. يحتوي الدليل الفرعي config على أمثلة من ملفات YAML لنشر MongoDB إلى Kubernetes.

Downloading mongodb-kubernetes-operator Source Code

نشر مشغل MongoDB

الآن بعد إعداد مساحتك الخاصة ومشغل MongoDB Kubernetes، أنت مستعد لنشر مشغل MongoDB إلى عنقود Kubernetes الخاص بك. كيف؟ ستستخدم التكوين داخل الدليل config.

يتعامل مشغل MongoDB مع دورة حياة نشر MongoDB الخاص بك على عنقود Kubernetes. سيقوم المشغل تلقائيًا بإنشاء وإدارة وتكييف حالة نشر MongoDB الخاص بك.

لنشر مشغل MongoDB ، يجب عليك إنشاء تعريف مخصص للموارد (CRD) في Kubernetes والتحكم. يمكن توسيع تعريف الموارد المخصصة في Kubernetes لـ Kubernetes API ، مما يتيح لك إنشاء موارد مخصصة في Kubernetes.

1. قم بتشغيل الأمر kubectl apply التالي لإنشاء تعريف CRD جديد في Kubernetes لنشر MongoDB.

يحل المشغل في Kubernetesمحل كل تفاعل بشري لنشر تطبيق على Kubernetes. المشغل هو تحكم في الحاوية يقوم تلقائيًا بنشر وإدارة التطبيق الذي يحتفظ بحالته على Kubernetes.

kubectl apply -f config/crd/bases/mongodbcommunity.mongodb.com_mongodbcommunity.yaml
Creating New Kubernetes CRD MongoDB Kubernetes Deployment

2. بعد ذلك ، قم بتشغيل الأمر kubectl get التالي للتحقق من قائمة crd المتاحة في Kubernetes الخاص بك.

kubectl get crd/mongodbcommunity.mongodbcommunity.mongodb.com

أدناه ، يمكنك رؤية CRD بالاسم mongodbcommunity.mongodbcommunity.mongodb.org.

Checking List of CRDs

3. قم بتشغيل الأمر التالي لإنشاء تحكم وصول مستند إلى الدور (RBAC) المخصص لمشغل MongoDB ، وحدد تنفيذ RBAC لمساحة الاسم mongodb.

هذا الأمر يقوم بإنشاء دور وربط للدور وحساب خدمة لعامل MongoDB ، وهي أذونات مخصصة على عنقود Kubernetes الخاص بك. تلك الأذونات المخصصة مطلوبة لنشر وإدارة MongoDB تلقائيًا.

kubectl apply -k config/rbac/ -n mongodb
Deploying RBAC for MongoDB Deployment

4. الآن ، قم بتشغيل كل أمر kubectl أدناه للتحقق من الدور وربط الدور وحساب الخدمة لعامل MongoDB.

# التحقق من قائمة الأدوار
kubectl get role mongodb-kubernetes-operator -n mongodb

# التحقق من قائمة ربط الأدوار
kubectl get rolebinding mongodb-kubernetes-operator -n mongodb

# التحقق من حساب الخدمة
kubectl get serviceaccount mongodb-kubernetes-operator -n mongodb

النتيجة أدناه توضح أن الدور وربط الدور وحساب الخدمة mongodb-kubernetes-operator تم إنشاؤها في مساحة الاسم mongodb.

Checking role, rolebinding, and serviceaccount on Kubernetes

5. بمجرد اكتمال التحقق ، قم بتشغيل الأمر kubectl أدناه لنشر عامل MongoDB إلى مساحة الاسم mongodb.

يقوم هذا الأمر بإنشاء وحدة تحكم جديدة (mongodb-kubernetes-operator) بصورة Docker الأساسية (quay.io/mongodb/mongodb-kubernetes-operator). ستعمل هذه الوحدة كمتحكم لنشر ReplicaSets MongoDB تلقائيًا على عنقود Kubernetes.

kubectl create -f config/manager/manager.yaml -n mongodb

أدناه ، يمكنك رؤية أن تم إنشاء نشر عامل MongoDB ، ولكن الوحدة لا تزال في طور التهيئة.

Deploying MongoDB Operator to the mongodb Namespace

6. أخيرًا ، قم بتشغيل الأوامر التالية للتحقق من النشر والوحدات على مساحة الاسم mongodb.

# التحقق من النشر في مساحة الاسم mongodb
kubectl get deployment.apps -n mongodb

# التحقق من الوحدات في مساحة الاسم mongodb
kubectl get pods -n mongodb

كما يمكنك رؤية أدناه ، فإن وحدة تحكم عامل MongoDB قيد التشغيل.

Verifying MongoDB Operator Deployment and Pod

نشر ReplicaSet لـ MongoDB إلى Kubernetes

بعد نشر MongoDB الخاص بك، ستقوم بنشر ReplicaSet إلى Kubernetes الخاص بك لتوفير التوافر العالي والتكرار لنشر MongoDB الخاص بك. لن ترغب في وقت توقف في نشرك.

نشر ReplicaSets لـ MongoDB باستخدام Operator Kubernetes لـ MongoDB آمنة افتراضيًا باستخدام المصادقة SCRAM للمستخدمين. في نفس الوقت، يمكنك استخدام اتصال آمن بـ TLS لاتصالات المستخدمين والتطبيقات وتعريض مقاييس Prometheus لمراقبة الموارد.

ذات صلة: البدء مع رصد عنقود Kubernetes باستخدام Grafana & Prometheus

داخل الدليل config/samples/، سترى عينات متعددة من ملفات YAML لنشر ReplicaSet. يمكن استخدام كل ملف في سيناريوهات نشر مختلفة، ولكن ملف نشر ReplicaSet الافتراضي هو mongodb.com_v1_mongodbcommunity_cr.yaml.

1. قم بتحرير ملف YAML الخاص بنشرك باستخدام محرر النصوص المفضل لديك. في هذا العرض التوضيحي، يستخدم هذا الملف /mongodb.com_v1_hostpath.yaml للنشر المحلي. يقع هذا الملف YAML في الدليل config/samples/arbitrary_statefulset_configuration/.

إذا كنت تقوم بنشر مشغل MongoDB Kubernetes على خدمات السحابة مثل GKE و AKS ، استخدم ملف YAML mongodb.com_v1_mongodbcommunity_cr.yaml. ولكن إذا كنت تنشره محليًا داخل Kind أو Minikube ، يمكنك استخدام ملف YAML المخصص (arbitrary_statefulset_configuration/mongodb.com_v1_hostpath.yaml) ، الذي ينشئ تلقائيًا PV و PVC مخصصة لحاويات MongoDB ReplicaSet.

قم بتغيير عدد ReplicaSets الذي ترغب في نشره اعتمادًا على بيئتك ، ولكن القيمة الافتراضية هي 3. لهذا البرنامج التعليمي ، تم تعيين عدد ReplicaSets على 2.

spec:
  members: 2 # عدد مجموعات النسخ الاحتياطي لإنشاء
  security:
    authentication:
      modes:
      - SCRAM
  statefulSet:

استبدل <your-password-here> بكلمة مرور قوية. ستستخدم هذه الكلمة المرور لتسجيل الدخول إلى قاعدة بيانات MongoDB ، وبشكل افتراضي ، يتم استخدام المصادقة SCRAM.

احفظ التغييرات وأغلق المحرر عندما تكون راضيًا عن كلمة المرور.

---
apiVersion: v1
kind: Secret
metadata:
  name: my-user-password
type: Opaque
stringData:
  password: <your-password-here> # تعيين كلمة مرور المسؤول MongoDB

2. بعد ذلك ، قم بتشغيل الأمر kubectl أدناه لنشر (apply) مجموعة النسخ الاحتياطي MongoDB باستخدام mongodb.com_v1_hostpath.yaml إلى مساحة الأسماء mongodb.

ينشئ هذا الأمر ما يلي:

  • A new custom resource (MongoDBCommunity) with the name mdb0 under the mongodbcommunity.mongodb.com/v1 CRD
  • أسرار Kubernetes لتخزين كلمات مرور مستخدمي MongoDB. في نفس الوقت ، بعض PV و PVC بنوع hostPath لمجموعة نسخ MongoDB.

النشر سيستغرق بعض الوقت ، اعتمادًا على حجم ReplicaSets التي يجب إنشاؤها وعلى نفس مجموعة Kubernetes.

kubectl apply -f config/samples/arbitrary_statefulset_configuration/mongodb.com_v1_hostpath.yaml -n mongodb
Deploying MongoDB Replica Sets

3. بعد النشر ، قم بتشغيل كل أمر أدناه للتحقق من الموارد المخصصة والهللات على مساحة الاسم mongodb.

# فحص معيار معالجة البيانات mongodbcommunity
kubectl get mongodbcommunity -n mongodb

# فحص هللات على مساحة الاسم mongodb
kubectl get pods -n mongodb

الإخراج أدناه يظهر ما يلي:

  • موارد MongoDBCommunity المخصصة بالاسم mdb0 تعمل بنظام MongoDB v4.4.0.
  • هللتا ReplicaSet لـ MongoDB تعمل بالاسم mdb0-0 و mdb0-1. كل هللة تحتوي على حاويتين مختلفتين ، الحاوية mongod ، وحاوية mongodb-agent.
Verifying MongoDB ReplicaSet Deployment and Pods

4. أخيرًا ، قم بتشغيل أمر آخر kubectl أدناه للتحقق من pv و pvc على مساحة الاسم mongodb.

kubectl get pv,pvc -n mongodb

الإخراج أدناه يظهر بعض pv و pvc المستخدمة من قبل هللات ReplicaSet لـ MongoDB.

Checking PV and PVC on the mongodb Namespace

إنشاء مستخدم وقاعدة بيانات جديدة لنشر MongoDB

لقد أكملت نشر مشغل MongoDB و ReplicaSets إلى مجموعة Kubernetes الخاصة بك في هذه المرحلة. الخطوة التالية هي إنشاء قاعدة بيانات ومستخدم جديدين لتطبيقك.

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

1. أنشئ ملف YAML جديد باستخدام محررك المفضل واملأ السر الكامن التالي لكوبرنيتيس. يمكنك تسمية ملف YAML كما تريد، ولكن الملف يتم تسميته new-user.yaml في هذا البرنامج التعليمي.

ينشئ هذا الملف YAML سرًا جديدًا لـ Kubernetes بالاسم myappdata وكلمة المرور هي myapppassword.

---
apiVersion: v1
kind: Secret
metadata:
  name: myappdata  # اسم السر meta.data 
type: Opaque
stringData:
  password: myapppassword  # كلمة المرور للمستخدم الجديد 

2. بعد ذلك، قم بتشغيل الأمر kubectl أدناه لتنفيذ تكوين new-user.yaml.

يقوم هذا الأمر بإنشاء وتطبيق (apply) سر Kubernetes جديد على عنقودك ويطبق هذا السر على مساحة أسماء mongodb.

kubectl apply -f new-user.yaml -n mongodb
Creating Secret to Kubernetes Cluster

3. عدل ملف YAML تكوين ReplicaSet CRD الخاص بك (mongodb.com_v1_hostpath.yaml) في الدليل config/samples/arbitrary_statefulset_configuration

أضف التكوين التالي إلى ملف mongodb.com_v1_hostpath.yaml الذي ينشئ قاعدة البيانات والمستخدم لـ MongoDB.

تأكد من استبدال scram-secret-myapp ببيانات الاعتماد الخاصة بك، واحفظ التغييرات في الملف وأغلق المحرر.

    - name: appuser  # مستخدم جديد appuser 
      db: admin  # يسمح بالمصادقة على قاعدة البيانات الإدارية 
      passwordSecretRef:
        name: myappdata  # السر في Kubernetes 
      roles:
        - name: dbAdmin  # قم بإعداد دور dbAdmin 
          db: appdb1  # لـ appdb1
      scramCredentialsSecretName: scram-secret-myapp

4. الآن، قم بتشغيل الأمر أدناه لتطبيق التغييرات الجديدة التي قمت بها في ملف mongodb.com_v1_hostpath.yaml في الخطوة الثالثة.

kubectl apply -f config/samples/arbitrary_statefulset_configuration/mongodb.com_v1_hostpath.yaml -n mongodb
Creating New MongoDB User and Database on Kubernetes

5. في النهاية، قم بتشغيل كل أمر أدناه لإنشاء اتصالات MongoDB المفصلة لتطبيقك. تولد هذه الأوامر اتصال MongoDB المفصل لتطبيقاتك بتنسيق JSON وتحليل الإخراج باستخدام أمر السطر الأمري jq.

استبدل mdb0-admin-mongoadmin بتفاصيل بيئتك كما يلي:

  • mdb0 – اسم البيانات الوصفية لموارد MongoDB.
  • admin – قاعدة البيانات للمصادقة.
  • mongoadmin – المستخدم الذي ستستخدمه للمصادقة.
# الحصول على تفاصيل المصادقة والاتصالات الإدارية
kubectl get secrets mdb0-admin-mongoadmin -n mongodb -o json | jq -r '.data | with_entries(.value |= @base64d)'

# الحصول على تفاصيل المصادقة والاتصالات لمستخدم التطبيق
kubectl get secrets mdb0-admin-appuser -n mongodb -o json | jq -r '.data | with_entries(.value |= @base64d)'

يوضح الإخراج أدناه كيف يمكنك الاتصال بـ MongoDB باستخدام الاتصالات القياسية و standardSrv. سترى أيضًا اسم المستخدم وكلمة المرور لنشر MongoDB الخاص بك.

Retrieving Details of MongoDB User and Password, and Connections

الاتصال بنشر MongoDB

لقد أكملت نشر MongoDB على عنقود Kubernetes باستخدام مشغل Kubernetes لـ MongoDB. ولكن كيف تعرف أن النشر يعمل؟ ستتحقق من اتصال قاعدة البيانات المحلية على جهاز الكمبيوتر الخاص بك واتصال المستخدم بـ MongoDB داخل عنقود Kubernetes.

للتحقق من الاتصال بنشر MongoDB الخاص بك، ستستخدم توجيه المنفذ. يسمح توجيه المنفذ في Kubernetes بإنشاء منفذ توجيه من أي خدمة Kubernetes إلى منفذك المحلي.

1. تشغيل الأمر kubectl أدناه للحصول على قائمة الخدمات (svc) في مساحة الأسماء mongodb (-n).

kubectl get svc -n mongodb

فيما يلي، سترى الخدمة المسماة mdb0-svc، التي تعرض منفذ 27017 (المنفذ الافتراضي لـ MongoDB).

Listing Services on the mongodb Namespace

2. بعد ذلك، قم بتشغيل الأمر أدناه لإنشاء توجيه النطاق الى عقدة Kubernetes.

ينشئ هذا الأمر توجيه نطاق جديد على خدمة Kubernetes (mdb0-svc) ويوجه المنفذ المحلي 27017 إلى منفذ خدمة Kubernetes 27017.

kubectl port-forward service/mdb0-svc -n mongodb 27017:27017
Setting up Port-forward

3. في النهاية، افتح تطبيق MongoDB Compass على جهازك المحلي، أضف اتصالًا جديدًا بالشكل التالي، وانقر فوق الاتصال للاتصال بـ MongoDB.

قم بتغيير حقل اسم المستخدم وكلمة المرور بمستخدم MongoDB وكلمة مرورك.

# الاتصال كـ mongoadmin
mongodb://mongoadmin:secretpassword@localhost:27017/admin?ssl=false

# الاتصال كـ appuser
mongodb://appuser:myapppassword@localhost:27017/admin?ssl=false
Connecting as mongoadmin user to MongoDB
Connecting as appuser to MongoDB

عندما يكون الاتصال ناجحًا، ستحصل على النافذة التالية التي تؤكد أن نشر MongoDB إلى Kubernetes يعمل بشكل صحيح.

بالنسبة لمستخدم mongoadmin، سترى قواعد بيانات افتراضية (local و config و admin).

Verifying Connection to the MongoDB mongoadmin

بالنسبة للمستخدم appuser، سترى قاعدة بيانات صلاحيات واحدة تحمل اسم appdb1.

Verifying Connection to the MongoDB as appuser

الختام

خلال هذا البرنامج التعليمي، تعلمت كيفية نشر MongoDB إلى عقدة Kubernetes باستخدام عامل MongoDB Kubernetes. كما لمسنا الاستخدام الأساسي لعامل Kubernetes. والآن، لديك معرفة جيدة بالفعل حول نشر التطبيقات وإدارتها تلقائيًا على Kubernetes.

لماذا لا تقوم بإعداد اتصال TLS على تنفيذ MongoDB الخاص بك للاستفادة من هذا المعرفة الجديدة؟ يؤمّن اتصال TLS الاتصالات بين مجموعات النسخ الاحتياطي ويؤمّن اتصالات العميل أو التطبيق بـ MongoDB.

Source:
https://adamtheautomator.com/mongodb-kubernetes/