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

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

ما هو وضع التشغيل الآلي في GKE؟
GKE Autopilot هو وضع تشغيل في GKE تدير فيه Google إعدادات مجموعتك، بما في ذلك العُقد والتوسيع والأمان والإعدادات الأخرى المُسبَقة الإعداد. تم تحسين مجموعات Autopilot لتشغيل معظم أحمال العمل في مرحلة الإنتاج، وتوفير موارد الحوسبة استنادًا إلى بيانات Kubernetes. يتّبع الإعداد المبسّط أفضل الممارسات والاقتراحات في GKE بشأن إعداد المجموعات وأحجام العمل وقابلية التوسّع والأمان. للاطّلاع على قائمة بالإعدادات المضمّنة، يُرجى الرجوع إلى جدول مقارنة بين "القيادة الذاتية" و"الإعدادات العادية".
ما هي AlloyDB؟
خدمة قاعدة بيانات متوافقة مع PostgreSQL ومُدارة بالكامل لتنفيذ مهام العمل الأكثر تطلّبًا في قواعد بيانات المؤسسات تجمع AlloyDB بين أفضل ما تقدّمه Google وأحد أكثر محركات قواعد البيانات مفتوحة المصدر شيوعًا، وهو PostgreSQL، لتحقيق أداء فائق وقابلية توسّع عالية وتوفّر كبير.
ما ستتعلمه
في هذه الميزة الاختبارية، ستتعرّف على كيفية تنفيذ ما يلي:
- إنشاء مثيل خاص من قاعدة بيانات AlloyDB
- نشر تطبيق على مجموعة GKE Autopilot يتصل بمثيل AlloyDB
المتطلبات الأساسية
- يفترض هذا التمرين العملي معرفة بيئتَي Cloud Console وCloud Shell.
- يُفضّل توفّر خبرة سابقة في GKE وAlloyDB، ولكنّها ليست شرطًا مطلوبًا.
2. الإعداد والمتطلبات
إعداد مشروع على السحابة الإلكترونية
- سجِّل الدخول إلى Google Cloud Console وأنشِئ مشروعًا جديدًا أو أعِد استخدام مشروع حالي. إذا لم يكن لديك حساب على Gmail أو Google Workspace، عليك إنشاء حساب.



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

استنسِخ المستودع وانتقِل إلى الدليل، ثم انسَخ الأمر أدناه والصِقه في الوحدة الطرفية واضغط على 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
إذا طُلب منك منح الإذن، انقر على "منح الإذن" للمتابعة.

ستستغرق عملية الإعداد حوالي 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
استكشاف الميزات المتاحة(مثل "إحصاءات الاستعلامات" و"المراقبة") في وحدة التحكّم

مراجعة مجموعة 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
مثال على الناتج:

نفِّذ الأمر التالي لتخزين بيانات اعتماد المجموعة:
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 في وحدة التحكّم لمراجعة تفاصيل أحدث إصدار.

اضبط متغيّر البيئة أدناه باستخدام قيمة عنوان 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
مثال على الناتج:

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 وراجِع "أحمال العمل" و"الخدمات" التي تم إنشاؤها.


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

5- تهانينا!
تهانينا، لقد أكملت درس البرمجة.
المواضيع التي تناولناها:
- كيفية إنشاء مثيل خاص من قاعدة بيانات AlloyDB
- كيفية نشر تطبيق على مجموعة GKE Autopilot تتصل بمثيل AlloyDB
الخطوة التالية:
استكشِف دروسًا تطبيقية أخرى حول Cymbal Eats:
- تشغيل Cloud Workflows باستخدام Eventarc
- تفعيل معالجة الأحداث من Cloud Storage
- الاتصال بخدمة CloudSQL الخاصة من Cloud Run
- الاتصال بقواعد بيانات مُدارة بالكامل من Cloud Run
- تأمين التطبيقات بدون خادم باستخدام Identity Aware Proxy (IAP)
- تشغيل مهام Cloud Run باستخدام Cloud Scheduler
- النشر بأمان على Cloud Run
- تأمين حركة المرور الواردة إلى Cloud Run
تَنظيم
لتجنُّب تحمّل رسوم في حسابك على Google Cloud مقابل الموارد المستخدَمة في هذا البرنامج التعليمي، احذف المشروع الذي يحتوي على الموارد أو احتفظ بالمشروع واحذف الموارد الفردية.
حذف المشروع
أسهل طريقة لإيقاف الفوترة هي حذف المشروع الذي أنشأته لتنفيذ البرنامج التعليمي.