۱. مرور کلی
در این آزمایش، شما یک میکروسرویس دولایه با یک پاد که روی GKE Autopilot اجرا میشود و آن را به یک نمونه خصوصی از پایگاه داده AlloyDB متصل میکند، مستقر خواهید کرد. برنامه خدمات مشتری بخشی از سیستم Cymbal Eats است و قابلیت مدیریت کاربران ثبت نام شده را فراهم میکند. برنامه خدمات مشتری یک میکروسرویس مبتنی بر جاوا است که از چارچوب Quarkus استفاده میکند.

AlloyDB از طریق آدرسهای IP خصوصی و داخلی که برای دسترسی به سرویسهای خصوصی پیکربندی شدهاند، از اتصال به شبکه پشتیبانی میکند.
دسترسی به سرویسهای خصوصی به عنوان یک اتصال همتا به VPC بین شبکه VPC شما و شبکه Google Cloud VPC زیربنایی که منابع AlloyDB شما (خوشهها و نمونهها) در آن قرار دارند، پیادهسازی میشود. اتصال خصوصی، منابع موجود در شبکه VPC شما را قادر میسازد تا با منابع AlloyDB که منحصراً با استفاده از آدرسهای IP داخلی به آنها دسترسی دارند، ارتباط برقرار کنند. منابع موجود در شبکه VPC شما برای دسترسی به منابع AlloyDB نیازی به دسترسی به اینترنت یا آدرسهای IP خارجی ندارند.

سیستم خلبان خودکار GKE چیست؟
GKE Autopilot یک حالت عملیاتی در GKE است که در آن گوگل پیکربندی کلاستر شما، از جمله گرهها، مقیاسپذیری، امنیت و سایر تنظیمات از پیش پیکربندی شده را مدیریت میکند. کلاسترهای Autopilot برای اجرای اکثر بارهای کاری تولید بهینه شدهاند و منابع محاسباتی را بر اساس مانیفستهای Kubernetes شما فراهم میکنند. پیکربندی سادهشده از بهترین شیوهها و توصیههای GKE برای راهاندازی کلاستر و بار کاری، مقیاسپذیری و امنیت پیروی میکند. برای مشاهده لیستی از تنظیمات داخلی، به جدول مقایسه Autopilot و Standard مراجعه کنید.
AlloyDB چیست؟
یک سرویس پایگاه داده کاملاً مدیریتشده سازگار با PostgreSQL برای سنگینترین حجم کاری پایگاه داده سازمانی شما. AlloyDB بهترینهای گوگل را با یکی از محبوبترین موتورهای پایگاه داده متنباز، PostgreSQL، برای عملکرد، مقیاسپذیری و دسترسیپذیری برتر ترکیب میکند.
آنچه یاد خواهید گرفت
در این آزمایشگاه، شما یاد خواهید گرفت که چگونه موارد زیر را انجام دهید:
- ایجاد یک نمونه خصوصی از پایگاه داده AlloyDB
- یک برنامه را روی کلاستر GKE Autopilot که به نمونه AlloyDB متصل میشود، مستقر کنید.
پیشنیازها
- این آزمایشگاه آشنایی با محیطهای Cloud Console و Cloud Shell را پیشفرض قرار میدهد.
- تجربه قبلی در GKE و AlloyDB مفید است اما الزامی نیست.
۲. تنظیمات و الزامات
راهاندازی پروژه ابری
- وارد کنسول گوگل کلود شوید و یک پروژه جدید ایجاد کنید یا از یک پروژه موجود دوباره استفاده کنید. اگر از قبل حساب جیمیل یا گوگل ورک اسپیس ندارید، باید یکی ایجاد کنید .



- نام پروژه ، نام نمایشی برای شرکتکنندگان این پروژه است. این یک رشته کاراکتری است که توسط APIهای گوگل استفاده نمیشود. میتوانید آن را در هر زمانی بهروزرسانی کنید.
- شناسه پروژه در تمام پروژههای گوگل کلود منحصر به فرد است و تغییرناپذیر است (پس از تنظیم، قابل تغییر نیست). کنسول کلود به طور خودکار یک رشته منحصر به فرد تولید میکند؛ معمولاً برای شما مهم نیست که چیست. در اکثر آزمایشگاههای کد، باید به شناسه پروژه ارجاع دهید (که معمولاً با عنوان
PROJECT_IDشناخته میشود). اگر شناسه تولید شده را دوست ندارید، میتوانید یک شناسه تصادفی دیگر ایجاد کنید. به عنوان یک جایگزین، میتوانید شناسه خودتان را امتحان کنید و ببینید که آیا در دسترس است یا خیر. پس از این مرحله قابل تغییر نیست و در طول پروژه باقی خواهد ماند. - برای اطلاع شما، یک مقدار سوم هم وجود دارد، شماره پروژه که برخی از APIها از آن استفاده میکنند. برای کسب اطلاعات بیشتر در مورد هر سه این مقادیر، به مستندات مراجعه کنید.
- در مرحله بعد، برای استفاده از منابع/API های ابری، باید پرداخت صورتحساب را در کنسول ابری فعال کنید . اجرای این آزمایشگاه کد، اگر اصلاً هزینهای نداشته باشد، هزینه زیادی نخواهد داشت. برای خاموش کردن منابع به طوری که پس از این آموزش متحمل پرداخت صورتحساب نشوید، میتوانید منابعی را که ایجاد کردهاید یا کل پروژه را حذف کنید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان ۳۰۰ دلاری هستند.
تنظیمات محیط
با کلیک روی آیکون سمت راست نوار جستجو، Cloud Shell را فعال کنید.

مخزن را کلون کنید و به دایرکتوری بروید، دستور زیر را کپی و در ترمینال پیست کنید و Enter را بزنید:
git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git && cd cymbal-eats/customer-service
با اجرای gke-lab-setup.sh وابستگیهای مورد نیاز را مستقر کنید
منابع زیر ایجاد خواهند شد:
- کلاستر و نمونه AlloyDB
- رجیستری مصنوعات برای ذخیره تصاویر کانتینر برای کار Cloud Run و خدمات مشتری
- رابط دسترسی VPC برای اجرای ابری کار (Cloud Run Job) جهت ارتباط با پایگاه داده AlloyDB
- اجرای ابری کار برای ایجاد پایگاه داده AlloyDB
- خوشه خلبان خودکار GKE
./gke-lab-setup.sh
اگر از شما خواسته شد که مجوز دهید، برای ادامه روی «مجوز» کلیک کنید.

راهاندازی حدود ۱۰ دقیقه طول خواهد کشید. اسکریپت راهاندازی که برای ایجاد وابستگیهای مورد نیاز استفاده میشود را بررسی کنید.
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.
۳. استقرار برنامه
بررسی کلاستر 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
تنظیم متغیرهای محیطی پروژه:
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 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
خروجی نمونه:

۴. برنامه آزمایشی
برای ذخیره آدرس اینترنتی خدمات مشتری، دستورات زیر را اجرا کنید.
kubectl get svc
متغیر محیطی زیر را با استفاده از مقدار External 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"}'
دستور بالا را چندین بار اجرا کنید تا پیامهای لاگی ایجاد شود که بعداً در Logs Explorer مشاهده خواهید کرد.
بررسی سوابق مشتری
برای مشاهده رکورد مشتری ایجاد شده، دستورات زیر را اجرا کنید.
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 باز کنید و Workloads و سرویسهای ایجاد شده را بررسی کنید.


گزارشهای برنامه
Logs Explorer را باز کنید و لاگهایی را که حاوی متن «مشتری از قبل وجود دارد» هستند، جستجو کنید.

۵. تبریک میگویم!
تبریک میگویم، شما codelab را تمام کردید!
آنچه ما پوشش دادهایم:
- نحوه ایجاد نمونه خصوصی از پایگاه داده AlloyDB
- نحوه استقرار یک برنامه در خوشه GKE Autopilot که به نمونه AlloyDB متصل میشود
قدم بعدی چیست؟
سایر آزمایشگاههای کد Cymbal Eats را کاوش کنید:
- راهاندازی گردشهای کاری ابری با Eventarc
- راهاندازی پردازش رویداد از فضای ذخیرهسازی ابری
- اتصال به CloudSQL خصوصی از Cloud Run
- اتصال به پایگاههای داده کاملاً مدیریتشده از Cloud Run
- برنامه بدون سرور امن با پروکسی آگاه از هویت (IAP)
- راهاندازی کارهای ابری با استفاده از زمانبند ابری
- استقرار ایمن در Cloud Run
- ایمنسازی ترافیک ورودی Cloud Run
تمیز کردن
برای جلوگیری از تحمیل هزینه به حساب گوگل کلود خود برای منابع استفاده شده در این آموزش، یا پروژهای که شامل منابع است را حذف کنید، یا پروژه را نگه دارید و منابع تکی را حذف کنید.
حذف پروژه
سادهترین راه برای حذف هزینهها، حذف پروژهای است که برای آموزش ایجاد کردهاید.