ACME WhatsApp Banking - إعداد GKE

هذا المنشور متعلق بخدمات ACME WhatsApp المصرفية ، إذا لم تقرأ الجزء الأولي ، فيرجى النقر هنا للبدء من البداية.

إنشاء الكتلة

يمكنك إنشاء مجموعة من الطرق المختلفة ، والفكرة هنا هي إظهار بعض الخيارات.

إنشاء مجموعة باستخدام Google Cloud Console

إنشاء مجموعة GKE

في الوقت الحالي ، لننشئ بيئة بسيطة بخيارات افتراضية. من أجل خفض التكاليف المرتبطة بهذا العرض التوضيحي ، دعنا نقوم بإنشاء أجهزة VM استباقية.

تكوين كتلة GKE kubernetes

انقر فوق حفظ ثم قم بإنشاء زر لبدء إدارة مجموعة Kubernetes.

استخدام مثيلات حسابية مسبقة

قررت استخدام VMs استباقية لتجنب التكاليف المرتفعة حتى مع العلم أن مجموعتي ستكون متاحة لبضعة أيام فقط وأيضًا لاختبار مرونة الحل الخاص بي .

مثيلات الأجهزة الافتراضية (PVMs) الوقائية وفقًا لـ Google:

VMs الاستباقية هي حالات حسابية قصيرة التكلفة للغاية وقصيرة العمر مناسبة للمهام الدفعية وأعباء العمل التي تتحمل الأخطاء.

هذه فكرة جميلة للغاية ، من الجدير التحقق من مشاركة Sandeep Dinesh حول هذا هنا.

يؤدي استخدام PVMs أيضًا إلى إنشاء قرد فوضى طبيعي في نظامك

تتوفر نفس الميزة في أمازون كمثيلات EC2 Spot و Azure مثل الأجهزة الافتراضية ذات الأولوية المنخفضة.

إنشاء كتلة k8s بواسطة سطر الأوامر

في وحدة تحكم Google Cloud ، هناك خيار لرؤية سطر الأوامر الذي تم إنشاؤه جنبًا إلى جنب مع خيار REST ، يمكنك لفه في برنامج نصي shell وتخصيصه وفقًا لذوقك.

أمر REST لإنشاء مجموعة gcloud k8s

إنشاء باستخدام Hashicorp Terraform

هذا الخيار هو الخيار الموصى به حيث يمكنك الحفاظ على حالة البنية التحتية الخاصة بك عن طريق الحصول عليها بطريقة منظمة وغير ثابتة وخطيرة (غير إجرائية) ، يمكنك الحفاظ على التكوين الخاص بك في SCM للإصدار مما يساعد على تتبع تعقب التغييرات .

لبدء استخدام Terraform ، يرجى التحقق من هذا الرابط.

قم بإنشاء مستخدم IAM واحصل على بيانات اعتماد حساب الخدمة ليتم استخدامها بواسطة ملف البرنامج النصي Terraform الخاص بك.

$ PROJECT_NAME = $ (مشروع الحصول على قيمة التكوين gcloud) $ حسابات خدمة gcloud iam إنشاء terraformuser $ قائمة حسابات خدمة gcloud iam $ مفاتيح خدمة خدمة gcloud iam إنشاء مفاتيح terraformuser.json --iam-account [email protected]$PROJECT_NAME.iam. gserviceaccount.com

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

$ PROJECT_NAME = $ (مشروع الحصول على قيمة gcloud config)
القرص المضغوط $ 
خطة $ terraform -var 'project_name = $ PROJECT_NAME' $ terraform تنطبق -var 'project_name = $ PROJECT_NAME'

لتدمير مجموعتك وجميع الموارد المرتبطة بها ، فقط قم بتشغيل الأمر التالي:

$ terraform تدمير

إنشاء kubectl

سيقوم الأمر أدناه بتكوين kubectl للإشارة إلى نظام المجموعة الخاص بك عن طريق إضافة الشهادات العامة إلى ملف .kube / config.

الحصول على بيانات اعتماد مجموعات حاويات gcloud $ --منطقة
#example: مجموعات حاويات $ gcloud تحصل على بيانات اعتماد acme-Banking-الكتلة --zone us-central1

إذا لم يكن لديك تثبيت gcloud CLI ولم يكن لديك سوى ملف تكوين kubernetes ، فيمكنك تهيئة kubectl بالطريقة التالية:

$ export KUBECONFIG = ~ / .kube / config 

إقامة الدفة

بمجرد الانتهاء من تشغيل kubernetes وتشغيله ، حان الوقت لتكوين عميلك وخادمك (tiller) الخاص بك لنشر وإدارة الإصدارات بسلاسة في بيئة kubernetes الخاصة بك.

إذا لم تكن على دراية بالدفة ، فالرجاء البدء بالتحقق هنا.

الآن بعد أن قمت بتثبيت Helm ، فلنقم بإنشاء موارد RBAC (حساب الخدمة ، ربط دور المجموعة ، إلخ).

قم بتشغيل الأمر التالي لتكوين أداة الحراثة وتوجيه عميل الدفة إليها.

$ helm init - خادم حسابات

لن تكون هذه الخطوة مطلوبة في إصدار الدفة القادمة 3.

تكوين سجل الحاوية

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

لنقم أولاً بتهيئة برنامج docker للإشارة إلى سجل Google Cloud:

$ gcloud auth config-docker $ تثبيت مكونات gcloud docker-credential-gcr $ docker-credential-gcr config-docker

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

المسودة مكتوبة بلغة go-lang وتستخدم مكتبة تسمى Linguist تحت الغطاء لاكتشاف لغة البرنامج المستخدمة لإنشاء مخططات Dockerfile و Helm مخصصة لك تلقائيًا.

https://github.com/Azure/draft/blob/master/cmd/draft/create.go
  • تكوين المسودة

تعتمد المسودة على تسجيل Helm و Docker. تحقق مما إذا كان اسم التسجيل يحتوي على اسم مشروع google الملحق به ، وإلا فلن يعمل.

$ PROJECT_NAME = $ (مشروع الحصول على القيمة gcloud config) $ مسودة تكوين مجموعة التسجيل gcr.io/$PROJECT_NAME
مسودة $ init $ cd إنشاء مشروع $
إذا كنت قد أنشأت ملف Dockerfile سابقًا ، فلن يغيره أمر إنشاء المسودة.
  • تنفيذ النشر

الآن بعد أن قمت بتكوين جميع المتطلبات المسبقة للمسودة ، يجب أن تكون مهمة النشر مباشرة ، نحتاج فقط إلى إصدار أمر أدناه:

$ مسودة
مشروع النشر

إذا تلقيت رسالة خطأ عند إصدار التطبيق ، فمن المستحسن أن الدفة غير قادرة على ترقية الإصدار ، لحل هذا ، قم بتشغيل الأمر التالي:

$ helm del --purge 

دخول

في هذه المرحلة لدينا مجموعة Kubernetes ونحن قادرون على نشر خدماتنا الدقيقة باستخدام المسودة بطريقة سلسة. سيعمل النشر على إنشاء القرون وموارد الخدمات. حان الوقت الآن لتكوين مكون Ingress المسؤول عن توزيع الحمل ، وتوجيه الطلبات الواردة إلى الخدمات المختلفة.

  • تثبيت دخول Nginx

سيقوم الأمر التالي بإنشاء وحدة تحكم Nginx وحوامل الخلفية.

$ helm تثبيت مستقر / nginx-ingress - مساحة الاسم = افتراضي - name = nginx-ingress
  • إنشاء configMaps مع قواعد التوجيه لـ Ingress

يمكنك إنشاء ملف configmap yaml يدويًا أو يمكنك استخدام ملف ingress.yaml الذي تم إنشاؤه بواسطة الأمر "مسودة إنشاء" كجزء من إنشاء المخطط. في الصورة أدناه ، نحتاج فقط إلى تغيير التوجيه من "تمكين: خطأ" إلى "تمكين: صحيح" في ملف القيم. yaml لتنشيط قاعدة Ingress لخدمتك.

إذا تركتها خاطئة ، فلن تنشئ المسودة خريطة تكوين قاعدة الدخول.

تكوين الدخول
  • التوجيه إلى الخدمات في مساحة اسم مختلفة

يحتوي دخول Nginx على بعض الحيل لتتمكن من التوجيه إلى خدمة يتم نشرها في مساحة اسم مختلفة عنها. اضطررت إلى إنشاء خدمة خارجية كما هو موضح أدناه:

apiVersion: v1 نوع: بيانات تعريف الخدمة: اسم فارغ: مساحة اسم prometheus: مواصفات المراقبة: نوع فارغ: ExternalName externalName: prometheus.monitoring.svc.cluster.local

يجب إنشاء الخدمة الخارجية أعلاه في مساحة الاسم التي اخترتها. يجب أن يتبع الاسم الخارجي الاصطلاح:

. .svc.cluster.local
  • اختبار دخول Nginx

يمكن لـ Nginx Ingress التوجيه استنادًا إلى قواعد مختلفة ، ولكن القاعدة الرئيسية هي تقييم رأس المضيف ، إذا كان هناك تطابق ، فسيحدث المسار.

$ curl -H 'Host: acme-banking.com' http: // node-port-ip: port / context

أو يمكنك استخدام ملحق ModHeader من الكروم كما هو موضح أدناه:

ModHeaders تمديد الكروم

MongoDB

الخطوة مطلوبة لحلنا لتخزين واسترداد معلومات المنتج لإثراء محادثة chatbot.

يعتمد تكوين MongoDB المستخدم على StatefulSet و sidecar كما هو موضح في منشور المدونة Running MongoDB على Kubernetes مع StatefulSets

$ git clone https://github.com/thesandlord/mongo-k8s-sidecar.git $ cd ./mongo-k8s-sidecar/example/StatefulSet $ ​​kubectl تنطبق -f googlecloud_ssd.yaml $ kubectl تقدم -f mongo-statefulset. يامل
  • حل بعض المشاكل على طول الطريق
  1. إذا كنت تواجه مشاكل تتعلق بالملفات الصغيرة ، فقد تم حلها عن طريق تحديث صورة mongo إلى الإصدار 4 (mongo: 4.0).
  2. إذا ظهر لك الخطأ "code: 13435، codeName: NotMasterNoSlaveOk"
$ mongo> rs.slaveOk ()
# أو إذا كان لديك المزيد من النسخ المتماثلة
rs.initiate ({_id: "myReplSet" ، الإصدار: 1 ، الأعضاء: [{_id: 0 ، host: "mongodb0.example.net:27017"} ، {_id: 1 ، host: "mongodb1.example.net: 27017 "} ، {_id: 2 ، host:" mongodb2.example.net:27017 "}]})

3. إذا ظهرت لك رسالة الخطأ "خطأ: لم يتم تكوين النسخ المتماثل بعد" ، فقد يكون الحل هو تشغيل الأمر أدناه.

$ mongo> rs.initiate ()

4. تغيير تعريف Mongo StatefulSet للالتزام بالعنوان 0.0.0.0 ؛

ربط MongoDB على أي شبكة
  • إنشاء مجموعات MongoDB
استخدام $ kubectl exec -it mongo-0 / bin / sh $ mongo> > ديسيبل. .insert ({id: 1، name: 'Product 01'})
أين: * - اسم قاعدة البيانات الخاصة بك ، سيتم إنشاؤها إذا لم تكن موجودة * - اسم مجموعتك

المراقبة مع بروميثيوس وجرافانا

تتضمن إمكانية المراقبة التتبع الموزع والمراقبة / التنبيه وتجميع التسجيلات والتحليلات. نحن نغطي فقط جزء المراقبة بما في ذلك البنية التحتية ومراقبة نشاط الأعمال.

#Installing Prometheus $ helm install --name prometheus مستقرة / prometheus - مراقبة مساحة الاسم - set server.persistentVolume.enabled = true
# تثبيت Grafana $ helm install --name grafana مستقرة / grafana

يمكنك توفير المزيد من الخيارات في أمر القيادة الخاص بك إذا كنت تريد المزيد من التخصيص لـ Prometheus و Grafana ، تحقق من الوثائق هنا وهنا.

  • تكوين بروميثيوس

https://gist.github.com/victorpaulo/9c4399cc4ffb22bd5847a6e9d0a1406b

يتم تسليط الضوء على الجزء المهم أدناه ، قسم "scrape_configs" و "الأهداف" ، وهذا يمثل الخدمات التي تريد أن تتخلص منها بروميثيوس بناءً على نقطة النهاية ، والجزء الافتراضي هو "/ metrics".

scrape_configs: - job_name: مخطط 'hackathon' ACME Banking: http static_configs: - الأهداف: ["10.0.14.59:8080"، "10.0.12.103:8080"، "10.0.14.245:8080"]

أوصي باستبدال عنوان IP باسم DNS مثل:

. .svc.cluster.local
  • تكوين لوحة القيادة Grafana

تعد Grafana سهلة الإعداد ، نحتاج أولاً إلى إضافة مصدر البيانات إلى prometheus ثم إنشاء لوحة تحكم.

تكوين Grafana Datasource إلى بروميثيوس

لقد قمت بتصدير تعريف لوحة المعلومات الخاصة بي وهو متاح أدناه.

https://gist.github.com/victorpaulo/82daf3f33b5cf4cfe1d74286744eeb46

لوحة أجهزة القياس الخاصة بي- آسف على لقطة الشاشة :-)

ستصف المقالة التالية كيفية إعداد برنامج chatbot على IBM Watson Assistant ، وكيفية ترجمة استجاباتها إلى الصوت باستخدام واجهة برمجة تطبيقات IBM Watson Text-to-Speech وكيفية استخدام AWS S3 لتخزين الملفات الصوتية. يرجى التحقق من ذلك هنا.