الاتصال بمثيل 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 ضبط مجموعتك، بما في ذلك العُقد والتحجيم والأمان وغيرها من الإعدادات المعدّة مسبقًا. تم تحسين مجموعات التوجيه الآلي لتشغيل معظم أعباء الإنتاج، وتوفير موارد الحوسبة بناءً على بيانات Kubernetes. تتّبع الإعدادات السلسة أفضل الممارسات والاقتراحات المتعلقة بـ GKE بشأن إعداد التجميع وعبء العمل وقابلية التوسّع والأمان. للاطّلاع على قائمة بالإعدادات المضمّنة، راجِع جدول المقارنة التلقائي والعادي.

ما هو تطبيق 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.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 في "مهمة تشغيل السحابة الإلكترونية" للتواصل مع قاعدة بيانات AlloyDB
  • مهمة تشغيل السحابة الإلكترونية لإنشاء قاعدة بيانات AlloyDB
  • مجموعة التوجيه التلقائي في GKE
./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

نشر تطبيق

ستقوم بعد ذلك بنشر تطبيق خدمة العملاء.

تطبيق خدمة العملاء هو خدمة مصغّرة تستند إلى جافا وتستخدم إطار عمل 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 في ملف Publishing.yaml:

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

شغّل الأمر لنشر التطبيق:

kubectl apply -f customer-service-deployment.yaml

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

شغِّل الأمر لإنشاء عنوان 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

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

افتح مستكشف السجلات وابحث عن السجلات التي تحتوي على عبارة "العميل موجود سلفًا". النص.

543c5ed97819f540.png

5- تهانينا!

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

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

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

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

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

تَنظيم

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

حذف المشروع

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