1. بررسی اجمالی
در این آزمایشگاه، شما یک میکروسرویس دو لایه را با یک پاد در حال اجرا در GKE Autopilot و اتصال آن به یک نمونه خصوصی از پایگاه داده AlloyDB مستقر خواهید کرد. برنامه خدمات مشتری بخشی از سیستم Cymbal Eats است و عملکردی را برای مدیریت کاربران ثبت نام شده ارائه می دهد. برنامه خدمات مشتری یک میکروسرویس مبتنی بر جاوا است که از چارچوب Quarkus استفاده می کند.
AlloyDB از اتصال شبکه از طریق آدرس های IP خصوصی و داخلی که برای دسترسی به سرویس های خصوصی پیکربندی شده اند پشتیبانی می کند.
دسترسی به سرویسهای خصوصی بهعنوان یک اتصال همتا VPC بین شبکه VPC شما و شبکه Google Cloud VPC زیربنایی که منابع AlloyDB (خوشهها و نمونهها) در آن قرار دارند، پیادهسازی میشود. اتصال خصوصی منابع موجود در شبکه VPC شما را قادر می سازد تا با استفاده از آدرس های IP داخلی با منابع AlloyDB که منحصراً به آنها دسترسی دارند ارتباط برقرار کنند. منابع موجود در شبکه VPC شما برای دسترسی به منابع AlloyDB نیازی به دسترسی به اینترنت یا آدرس های IP خارجی ندارند.
GKE Autopilot چیست؟
GKE Autopilot حالتی از عملکرد در GKE است که در آن Google پیکربندی کلاستر شما را مدیریت میکند، از جمله گرهها، مقیاسگذاری، امنیت و سایر تنظیمات از پیش پیکربندی شده شما. خوشههای خلبان خودکار برای اجرای بیشتر بارهای کاری تولید بهینه شدهاند و منابع محاسباتی را بر اساس مانیفستهای Kubernetes شما ارائه میکنند. پیکربندی کارآمد از بهترین شیوهها و توصیههای GKE برای راهاندازی کلاستر و حجم کار، مقیاسپذیری و امنیت پیروی میکند. برای فهرستی از تنظیمات داخلی، به جدول مقایسه خودکار و استاندارد مراجعه کنید.
AlloyDB چیست؟
یک سرویس پایگاه داده کاملاً مدیریت شده سازگار با PostgreSQL برای سخت ترین حجم کاری پایگاه داده سازمانی شما. AlloyDB بهترینهای گوگل را با یکی از محبوبترین موتورهای پایگاه داده منبع باز، PostgreSQL، ترکیب میکند تا عملکرد، مقیاس و در دسترس بودن برتر را داشته باشد.
آنچه خواهید آموخت
در این آزمایشگاه با نحوه انجام کارهای زیر آشنا می شوید:
- یک نمونه خصوصی از پایگاه داده AlloyDB ایجاد کنید
- برنامه ای را در کلاستر GKE Autopilot مستقر کنید که به نمونه AlloyDB متصل می شود
پیش نیازها
- این آزمایشگاه آشنایی با محیط های Cloud Console و Cloud Shell را فرض می کند.
- تجربه قبلی GKE و AlloyDB مفید است اما لازم نیست.
2. راه اندازی و الزامات
راه اندازی پروژه ابری
- به Google Cloud Console وارد شوید و یک پروژه جدید ایجاد کنید یا از یک موجود استفاده مجدد کنید. اگر قبلاً یک حساب Gmail یا Google Workspace ندارید، باید یک حساب ایجاد کنید .
- نام پروژه نام نمایشی برای شرکت کنندگان این پروژه است. این یک رشته کاراکتری است که توسط API های Google استفاده نمی شود. شما می توانید آن را در هر زمان به روز کنید.
- شناسه پروژه در تمام پروژههای Google Cloud منحصربهفرد است و تغییرناپذیر است (پس از تنظیم نمیتوان آن را تغییر داد). Cloud Console به طور خودکار یک رشته منحصر به فرد تولید می کند. معمولاً برای شما مهم نیست که چیست. در اکثر کدها، باید به شناسه پروژه ارجاع دهید (معمولاً به عنوان
PROJECT_ID
شناخته می شود). اگر شناسه تولید شده را دوست ندارید، ممکن است یک شناسه تصادفی دیگر ایجاد کنید. از طرف دیگر، میتوانید خودتان را امتحان کنید و ببینید آیا در دسترس است یا خیر. پس از این مرحله نمی توان آن را تغییر داد و در طول مدت پروژه باقی می ماند. - برای اطلاع شما، یک مقدار سوم وجود دارد، یک شماره پروژه که برخی از API ها از آن استفاده می کنند. در مورد هر سه این مقادیر در مستندات بیشتر بیاموزید.
- در مرحله بعد، برای استفاده از منابع Cloud/APIها باید صورتحساب را در کنسول 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 Access برای Cloud Run Job برای برقراری ارتباط با پایگاه داده AlloyDB
- Cloud Run Job برای ایجاد پایگاه داده 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
ویژگی های موجود (Query Insight، Monitoring) را در کنسول کاوش کنید.
کلاستر 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 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
خروجی نمونه:
4. برنامه آزمایشی
برای ذخیره URL خدمات مشتری، دستورات زیر را اجرا کنید.
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 را در Cloud Console باز کنید و بارهای کاری و خدمات ایجاد شده را بررسی کنید.
گزارش های برنامه
Logs Explorer را باز کنید و گزارشهایی را جستجو کنید که حاوی متن "مشتری در حال حاضر وجود دارد".
5. تبریک می گویم!
تبریک می گویم، شما نرم افزار کد را تمام کردید!
آنچه ما پوشش داده ایم:
- نحوه ایجاد نمونه خصوصی از پایگاه داده AlloyDB
- نحوه استقرار یک برنامه در کلاستر GKE Autopilot که به نمونه AlloyDB متصل می شود
بعدش چیه:
سایر کدهای Cymbal Eats را کاوش کنید:
- راهاندازی گردشهای کاری ابری با Eventarc
- راه اندازی پردازش رویداد از فضای ذخیره سازی ابری
- اتصال به Private CloudSQL از Cloud Run
- اتصال به پایگاه های داده کاملاً مدیریت شده از Cloud Run
- برنامه امن بدون سرور با پروکسی آگاه از هویت (IAP)
- راه اندازی Cloud Run Jobs با Cloud Scheduler
- استقرار ایمن در Cloud Run
- ایمن سازی ترافیک ورودی در اجرای ابر
تمیز کردن
برای جلوگیری از تحمیل هزینه به حساب Google Cloud خود برای منابع استفاده شده در این آموزش، یا پروژه حاوی منابع را حذف کنید یا پروژه را نگه دارید و منابع فردی را حذف کنید.
حذف پروژه
ساده ترین راه برای حذف صورتحساب، حذف پروژه ای است که برای آموزش ایجاد کرده اید.