1. نظرة عامة
في هذا التمرين المعملي، سيتم نشر خدمة دقيقة من مستويين مع مجموعة صغيرة تعمل على GKE Autopilot وربطها بمثيل خاص من قاعدة بيانات AlloyDB. يمثّل تطبيق "خدمة العملاء" جزءًا من نظام Cymbal Eats ويوفّر وظائف لإدارة المستخدمين المسجَّلين. تطبيق خدمة العملاء هو خدمة صغيرة تستند إلى Java وتستخدم إطار عمل Quarkus.
يتيح تطبيق AlloyDB الاتصال بالشبكة من خلال عناوين IP خاصة وداخلية تم ضبطها للوصول إلى الخدمات الخاصة.
يمكن الوصول إلى الخدمات الخاصة كاتصال تبادلي بين شبكة VPC بين شبكة VPC الأساسية وشبكة VPC الأساسية في Google Cloud حيث تتوفّر موارد AlloyDB (المجموعات والمثيلات). يتيح الاتصال الخاص للموارد في شبكة VPC التواصل مع موارد AlloyDB التي يمكنها الوصول إليها بشكل حصري باستخدام عناوين IP الداخلية. لا تحتاج موارد شبكة VPC إلى الاتصال بالإنترنت أو عناوين IP الخارجية للوصول إلى موارد AlloyDB.
ما هو 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
- سجِّل الدخول إلى 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 في "مهمة تشغيل السحابة الإلكترونية" للتواصل مع قاعدة بيانات AlloyDB
- مهمة تشغيل السحابة الإلكترونية لإنشاء قاعدة بيانات AlloyDB
- مجموعة التوجيه التلقائي في GKE
./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
نشر تطبيق
ستقوم بعد ذلك بنشر تطبيق خدمة العملاء.
تطبيق خدمة العملاء هو خدمة مصغّرة تستند إلى جافا وتستخدم إطار عمل 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 في ملف 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
عينة الناتج:
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 وراجِع مهام العمل والخدمات التي تم إنشاؤها.
سجلات التطبيق
افتح مستكشف السجلات وابحث عن السجلات التي تحتوي على عبارة "العميل موجود سلفًا". النص.
5- تهانينا!
تهانينا، لقد أنهيت الدرس التطبيقي حول الترميز.
المواضيع التي تناولناها:
- كيفية إنشاء مثيل خاص من قاعدة بيانات AlloyDB
- كيفية نشر تطبيق على مجموعة GKE Autopilot يتصل بمثيل AlloyDB
الخطوة التالية:
اطّلع على الدروس التطبيقية الأخرى حول الترميز في Cymbal Eats:
- تشغيل Cloud Workflows باستخدام Eventarc
- بدء معالجة الأحداث من Cloud Storage
- الاتصال بـ Private CloudSQL من خلال Cloud Run
- الاتصال بقواعد بيانات مُدارة بالكامل من خلال تشغيل السحابة الإلكترونية
- تطبيق آمن بدون خادم مع خادم وكيل يستخدم الهوية (IAP)
- تشغيل مهام تشغيل السحابة الإلكترونية باستخدام أداة جدولة المهام في السحابة الإلكترونية
- النشر الآمن إلى التشغيل في السحابة الإلكترونية
- تأمين الزيارات الواردة من تشغيل السحابة الإلكترونية
تَنظيم
لتجنُّب تحمُّل الرسوم المفروضة على حسابك على Google Cloud مقابل الموارد المُستخدَمة في هذا الدليل التوجيهي، يمكنك إما حذف المشروع الذي يحتوي على الموارد أو الاحتفاظ بالمشروع وحذف الموارد الفردية.
حذف المشروع
أسهل طريقة لإزالة الفوترة هي حذف المشروع الذي أنشأته للبرنامج التعليمي.