الاتصال بمثيل AlloyDB الخاص من تطبيق يعمل على GKE Autopilot

1. نظرة عامة

في هذا التمرين العملي، ستنشر خدمة مصغّرة ذات مستويَين مع وحدة تعمل على GKE Autopilot وربطها بمثيل خاص من قاعدة بيانات AlloyDB. تطبيق "خدمة العملاء" هو جزء من نظام Cymbal Eats ويوفر وظائف لإدارة المستخدمين المسجّلين. تطبيق "خدمة العملاء" هو خدمة مصغّرة مستندة إلى Java تستخدم إطار عمل Quarkus.

e8a5140b09521b7a.png

تتيح AlloyDB إمكانية الاتصال بالشبكة من خلال عناوين IP خاصة وداخلية تم ضبطها للوصول إلى الخدمات الخاصة.

يتم تنفيذ "الوصول الخاص إلى الخدمات" كعملية تبادل معلومات بين شبكتَي VPC، أي بين شبكة VPC وشبكة VPC الأساسية في Google Cloud التي تتوفّر فيها موارد AlloyDB (المجموعات والمثيلات). يتيح الاتصال الخاص للموارد في شبكة السحابة الافتراضية الخاصة (VPC) إمكانية التواصل مع موارد AlloyDB التي تصل إليها حصريًا باستخدام عناوين IP داخلية. لا تحتاج الموارد في شبكة VPC إلى الوصول إلى الإنترنت أو عناوين IP خارجية للوصول إلى موارد AlloyDB.

44662d7a086358de.png

ما هو وضع التشغيل الآلي في GKE؟

‫GKE Autopilot هو وضع تشغيل في GKE تدير فيه Google إعدادات مجموعتك، بما في ذلك العُقد والتوسيع والأمان والإعدادات الأخرى المُسبَقة الإعداد. تم تحسين مجموعات Autopilot لتشغيل معظم أحمال العمل في مرحلة الإنتاج، وتوفير موارد الحوسبة استنادًا إلى بيانات Kubernetes. يتّبع الإعداد المبسّط أفضل الممارسات والاقتراحات في GKE بشأن إعداد المجموعات وأحجام العمل وقابلية التوسّع والأمان. للاطّلاع على قائمة بالإعدادات المضمّنة، يُرجى الرجوع إلى جدول مقارنة بين "القيادة الذاتية" و"الإعدادات العادية".

ما هي AlloyDB؟

خدمة قاعدة بيانات متوافقة مع PostgreSQL ومُدارة بالكامل لتنفيذ مهام العمل الأكثر تطلّبًا في قواعد بيانات المؤسسات تجمع AlloyDB بين أفضل ما تقدّمه Google وأحد أكثر محركات قواعد البيانات مفتوحة المصدر شيوعًا، وهو PostgreSQL، لتحقيق أداء فائق وقابلية توسّع عالية وتوفّر كبير.

ما ستتعلمه

في هذه الميزة الاختبارية، ستتعرّف على كيفية تنفيذ ما يلي:

  • إنشاء مثيل خاص من قاعدة بيانات AlloyDB
  • نشر تطبيق على مجموعة GKE Autopilot يتصل بمثيل AlloyDB

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

  • يفترض هذا التمرين العملي معرفة بيئتَي Cloud Console وCloud Shell.
  • يُفضّل توفّر خبرة سابقة في GKE وAlloyDB، ولكنّها ليست شرطًا مطلوبًا.

2. الإعداد والمتطلبات

إعداد مشروع على السحابة الإلكترونية

  1. سجِّل الدخول إلى Google Cloud Console وأنشِئ مشروعًا جديدًا أو أعِد استخدام مشروع حالي. إذا لم يكن لديك حساب على Gmail أو Google Workspace، عليك إنشاء حساب.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • اسم المشروع هو الاسم المعروض للمشاركين في هذا المشروع. وهي سلسلة أحرف لا تستخدمها Google APIs. ويمكنك تعديله في أي وقت.
  • رقم تعريف المشروع هو معرّف فريد في جميع مشاريع Google Cloud ولا يمكن تغييره بعد ضبطه. تنشئ Cloud Console تلقائيًا سلسلة فريدة، ولا يهمّك عادةً ما هي. في معظم دروس البرمجة، عليك الرجوع إلى رقم تعريف المشروع (يتم تحديده عادةً على أنّه PROJECT_ID). إذا لم يعجبك رقم التعريف الذي تم إنشاؤه، يمكنك إنشاء رقم تعريف عشوائي آخر. يمكنك بدلاً من ذلك تجربة اسم مستخدم من اختيارك ومعرفة ما إذا كان متاحًا. لا يمكن تغيير هذا الخيار بعد هذه الخطوة وسيظل ساريًا طوال مدة المشروع.
  • للعلم، هناك قيمة ثالثة، وهي رقم المشروع الذي تستخدمه بعض واجهات برمجة التطبيقات. يمكنك الاطّلاع على مزيد من المعلومات عن كل هذه القيم الثلاث في المستندات.
  1. بعد ذلك، عليك تفعيل الفوترة في Cloud Console لاستخدام موارد/واجهات برمجة تطبيقات Cloud. لن تكلفك تجربة هذا الدرس البرمجي الكثير من المال، إن لم تكلفك شيئًا على الإطلاق. لإيقاف الموارد كي لا يتم تحصيل رسوم منك بعد هذا البرنامج التعليمي، يمكنك حذف الموارد التي أنشأتها أو حذف المشروع بأكمله. يمكن لمستخدمي Google Cloud الجدد الاستفادة من برنامج الفترة التجريبية المجانية بقيمة 300 دولار أمريكي.

إعداد البيئة

فعِّل Cloud Shell من خلال النقر على الرمز على يسار شريط البحث.

eb0157a992f16fa3.png

استنسِخ المستودع وانتقِل إلى الدليل، ثم انسَخ الأمر أدناه والصِقه في الوحدة الطرفية واضغط على Enter:

git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git && cd cymbal-eats/customer-service

نشر العناصر التابعة المطلوبة من خلال تنفيذ gke-lab-setup.sh

سيتم إنشاء الموارد التالية:

  • مجموعة ومثيل AlloyDB
  • ‫Artifact Registry لتخزين صور الحاويات لخدمة Cloud Run Job وخدمة العملاء
  • موصِّل الوصول إلى شبكة VPC لتمكين مهمة Cloud Run من التواصل مع قاعدة بيانات AlloyDB
  • مهمة Cloud Run لإنشاء قاعدة بيانات AlloyDB
  • مجموعة GKE Autopilot
./gke-lab-setup.sh

إذا طُلب منك منح الإذن، انقر على "منح الإذن" للمتابعة.

6356559df3eccdda.png

ستستغرق عملية الإعداد حوالي 10 دقائق. راجِع نص الإعداد البرمجي المستخدَم لإنشاء التبعيات المطلوبة.

gke-lab-setup.sh

انتظِر حتى ينتهي النص البرمجي ويظهر الناتج أدناه قبل تنفيذ الخطوات التالية.

Job [db-job] has successfully been created.

To execute this job, use:
gcloud beta run jobs execute db-job
OK Creating execution... Done.               
  OK Provisioning resources...
Done.
Execution [db-job-k94ps] has successfully started running.

3- نشر التطبيق

مراجعة مجموعة AlloyDB

نفِّذ الأمر أدناه لمراجعة مثيل AlloyDB الذي تم إنشاؤه:

gcloud alloydb instances describe customer-instance --cluster=customer-cluster --region=us-central1

مثال على الناتج:

createTime: '2023-01-06T14:40:07.213288293Z'
instanceType: PRIMARY
ipAddress: 10.77.176.2
machineConfig:
  cpuCount: 2
name: projects/cymbal-eats-20056-16671/locations/us-central1/clusters/customer-cluster/instances/customer-instance
nodes:
- zoneId: us-central1-f
queryInsightsConfig:
  queryPlansPerMinute: 5
  queryStringLength: 1024
  recordApplicationTags: true
  recordClientAddress: true
reconciling: false
state: READY
uid: df90d57d-88df-49be-a626-6dfec0513e64
updateTime: '2023-01-06T14:49:40.907977843Z'
writableNode:
  zoneId: us-central1-b

استكشاف الميزات المتاحة(مثل "إحصاءات الاستعلامات" و"المراقبة") في وحدة التحكّم

3b12b0fa1367fb42.png

مراجعة مجموعة GKE Autopilot

اضبط متغيّرات بيئة المشروع:

export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
export PROJECT_NAME=$(gcloud projects describe $PROJECT_ID --format='value(name)')

كجزء من عملية الإعداد الأوّلية، تم إنشاء المجموعة باستخدام الأمر أدناه (لست بحاجة إلى تنفيذ هذا الأمر):

gcloud container clusters create-auto $CLUSTER_NAME --region $REGION

نفِّذ الأمر التالي لعرض مجموعة GKE Autopilot التي تم إنشاؤها:

gcloud container clusters list

مثال على الناتج:

e8882c44fa0bb631.png

نفِّذ الأمر التالي لتخزين بيانات اعتماد المجموعة:

CLUSTER_NAME=rewards-cluster
REGION=us-central1

gcloud container clusters get-credentials $CLUSTER_NAME --region=$REGION

نشر تطبيق

بعد ذلك، ستنشئ تطبيق "خدمة العملاء".

تطبيق خدمة العملاء هو خدمة مصغّرة مستندة إلى Java تستخدم إطار عمل Quarkus.

انتقِل إلى المجلد cymbal-eats/customer-service وشغِّل الأوامر لإنشاء صورة الحاوية وتحميلها:

./mvnw clean package -DskipTests

export CUSTOMER_SERVICE_IMAGE=gcr.io/$PROJECT_ID/customer-service:1.0.0

gcloud builds submit --tag $CUSTOMER_SERVICE_IMAGE .

افتح Cloud Build في وحدة التحكّم لمراجعة تفاصيل أحدث إصدار.

49fd65309967ae47.png

اضبط متغيّر البيئة أدناه باستخدام قيمة عنوان IP الخاص في AlloyDB:

export DB_HOST=$(gcloud beta alloydb instances describe customer-instance \
    --cluster=customer-cluster \
    --region=$REGION \
    --format=json | jq \
    --raw-output ".ipAddress")

echo $DB_HOST

نفِّذ الأوامر أدناه لإنشاء عنصر أسرار Kubernetes لتخزين بيانات اعتماد قاعدة البيانات التي سيستخدمها تطبيق "خدمة العملاء" للاتصال بقاعدة البيانات:

DB_NAME=customers
DB_USER=postgres
DB_PASSWORD=password123

kubectl create secret generic gke-alloydb-secrets \
  --from-literal=database=$DB_NAME \
  --from-literal=username=$DB_USER \
  --from-literal=password=$DB_PASSWORD \
  --from-literal=db_host=$DB_HOST

نفِّذ الأمر لاستبدال CUSTOMER_SERVICE_IMAGE في ملف deployment.yaml:

sed "s@CUSTOMER_SERVICE_IMAGE@$CUSTOMER_SERVICE_IMAGE@g" deployment.yaml.tmpl > customer-service-deployment.yaml

نفِّذ الأمر التالي لنشر التطبيق:

kubectl apply -f customer-service-deployment.yaml

سيستغرق انتقال التطبيق إلى حالة RUNNING بضع لحظات.

نفِّذ الأمر لإنشاء عنوان IP خارجي سيتم استخدامه في خطوات الاختبار:

SERVICE_NAME=customer-service

kubectl expose deployment $SERVICE_NAME \
  --type LoadBalancer --port 80 --target-port 8080

نفِّذ الأمر للتحقّق من الموارد التي تم إنشاؤها:

kubectl get all

مثال على الناتج:

179a23bd33793924.png

4. تطبيق الاختبار

نفِّذ الأوامر أدناه لحفظ عنوان URL الخاص بخدمة العملاء.

kubectl get svc

اضبط متغيّر البيئة أدناه باستخدام قيمة عنوان IP الخارجي من الناتج السابق.

CUSTOMER_SERVICE_URL=$(kubectl get svc customer-service -o=jsonpath='{.status.loadBalancer.ingress[0].ip}')

نفِّذ الأوامر أدناه لإنشاء سجلّ عميل جديد:

curl -X POST $CUSTOMER_SERVICE_URL/customer \
-H 'Content-Type: application/json' \
-d '{"id": "id1","rewardPoints": 3,"address": "1845 Denise St","city": "Mountain View","createDateTime": "2022-11-11T15:56:45.487566","email": "ajensen9090+eats@gmail.com","name": "Angela Jensen","state": "CA","updateDateTime": "2022-11-11T15:56:45.866125","zip": "94043"}'

نفِّذ الأمر أعلاه عدة مرات لإنشاء رسائل سجلّ ستعرضها في "مستكشف السجلّات" لاحقًا.

مراجعة سجلّات العملاء

نفِّذ الأوامر أدناه لعرض سجلّ العميل الذي تم إنشاؤه.

curl $CUSTOMER_SERVICE_URL/customer | jq

مثال على الناتج:

[
  {
    "address": "1845 Denise St",
    "city": "Mountain View",
    "createDateTime": "2023-01-06T16:13:19.118744",
    "email": "ajensen9090+eats@gmail.com",
    "id": "id1",
    "name": "Angela Jensen",
    "rewardPoints": 3,
    "state": "CA",
    "updateDateTime": "2023-01-06T16:13:19.118896",
    "zip": "94043"
  }
]

مراجعة أحمال العمل والخدمات في GKE

افتح Kubernetes Engine في Cloud Console وراجِع "أحمال العمل" و"الخدمات" التي تم إنشاؤها.

e1217216e003a839.png

d5c97fb5950c4db.png

سجلّات التطبيقات

افتح Logs Explorer وابحث عن السجلات التي تحتوي على النص "العميل موجود من قبل".

543c5ed97819f540.png

5- تهانينا!

تهانينا، لقد أكملت درس البرمجة.

المواضيع التي تناولناها:

  • كيفية إنشاء مثيل خاص من قاعدة بيانات AlloyDB
  • كيفية نشر تطبيق على مجموعة GKE Autopilot تتصل بمثيل AlloyDB

الخطوة التالية:

استكشِف دروسًا تطبيقية أخرى حول Cymbal Eats:

تَنظيم

لتجنُّب تحمّل رسوم في حسابك على Google Cloud مقابل الموارد المستخدَمة في هذا البرنامج التعليمي، احذف المشروع الذي يحتوي على الموارد أو احتفظ بالمشروع واحذف الموارد الفردية.

حذف المشروع

أسهل طريقة لإيقاف الفوترة هي حذف المشروع الذي أنشأته لتنفيذ البرنامج التعليمي.