الاتصال بمثيل 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 Autopilot؟

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

ما هو AlloyDB؟

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

ما ستتعلمه

في هذا التمرين، ستتعرّف على كيفية إجراء ما يلي:

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

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

  • يفترض هذا التمرين الإلمام ببيئتَي Cloud Console وCloud Shell.
  • تكون الخبرة السابقة في GKE وAlloyDB مفيدة ولكنها ليست ضرورية.

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

إعداد مشروع Cloud

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

b35bf95b8bf3d5d8.pnga99b7ace416376c4.pngbd84a6d3004737c5.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 Job للتواصل مع قاعدة بيانات AlloyDB
  • ‫Cloud Run Job لإنشاء قاعدة بيانات 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 secrets لتخزين بيانات اعتماد قاعدة البيانات التي سيستخدمها تطبيق "خدمة العملاء" للاتصال بقاعدة البيانات:

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.pngd5c97fb5950c4db.png

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

افتح مستكشف السجلّات وابحث عن السجلّات التي تحتوي على النص "Customer already exists".

543c5ed97819f540.png

5- تهانينا!

تهانينا، لقد أكملت الدرس التطبيقي حول الترميز.

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

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

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

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

تَنظيم

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

حذف المشروع

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