اتصال به نمونه خصوصی AlloyDB از برنامه در حال اجرا در GKE Autopilot

1. بررسی اجمالی

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

e8a5140b09521b7a.png

AlloyDB از اتصال شبکه از طریق آدرس های IP خصوصی و داخلی که برای دسترسی به سرویس های خصوصی پیکربندی شده اند پشتیبانی می کند.

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

44662d7a086358de.png

GKE Autopilot چیست؟

GKE Autopilot حالتی از عملکرد در GKE است که در آن Google پیکربندی کلاستر شما را مدیریت می‌کند، از جمله گره‌ها، مقیاس‌گذاری، امنیت و سایر تنظیمات از پیش پیکربندی شده شما. خوشه‌های خلبان خودکار برای اجرای بیشتر بارهای کاری تولید بهینه شده‌اند و منابع محاسباتی را بر اساس مانیفست‌های Kubernetes شما ارائه می‌کنند. پیکربندی کارآمد از بهترین شیوه‌ها و توصیه‌های GKE برای راه‌اندازی کلاستر و حجم کار، مقیاس‌پذیری و امنیت پیروی می‌کند. برای فهرستی از تنظیمات داخلی، به جدول مقایسه خودکار و استاندارد مراجعه کنید.

AlloyDB چیست؟

یک سرویس پایگاه داده کاملاً مدیریت شده سازگار با PostgreSQL برای سخت ترین حجم کاری پایگاه داده سازمانی شما. AlloyDB بهترین‌های گوگل را با یکی از محبوب‌ترین موتورهای پایگاه داده منبع باز، PostgreSQL، ترکیب می‌کند تا عملکرد، مقیاس و در دسترس بودن برتر را داشته باشد.

آنچه خواهید آموخت

در این آزمایشگاه با نحوه انجام کارهای زیر آشنا می شوید:

  • یک نمونه خصوصی از پایگاه داده AlloyDB ایجاد کنید
  • برنامه ای را در کلاستر GKE Autopilot مستقر کنید که به نمونه AlloyDB متصل می شود

پیش نیازها

  • این آزمایشگاه آشنایی با محیط های Cloud Console و Cloud Shell را فرض می کند.
  • تجربه قبلی GKE و AlloyDB مفید است اما لازم نیست.

2. راه اندازی و الزامات

راه اندازی پروژه ابری

  1. به Google Cloud Console وارد شوید و یک پروژه جدید ایجاد کنید یا از یک موجود استفاده مجدد کنید. اگر قبلاً یک حساب Gmail یا Google Workspace ندارید، باید یک حساب ایجاد کنید .

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • نام پروژه نام نمایشی برای شرکت کنندگان این پروژه است. این یک رشته کاراکتری است که توسط API های Google استفاده نمی شود. شما می توانید آن را در هر زمان به روز کنید.
  • شناسه پروژه در تمام پروژه‌های Google Cloud منحصربه‌فرد است و تغییرناپذیر است (پس از تنظیم نمی‌توان آن را تغییر داد). Cloud Console به طور خودکار یک رشته منحصر به فرد تولید می کند. معمولاً برای شما مهم نیست که چیست. در اکثر کدها، باید به شناسه پروژه ارجاع دهید (معمولاً به عنوان PROJECT_ID شناخته می شود). اگر شناسه تولید شده را دوست ندارید، ممکن است یک شناسه تصادفی دیگر ایجاد کنید. از طرف دیگر، می‌توانید خودتان را امتحان کنید و ببینید آیا در دسترس است یا خیر. پس از این مرحله نمی توان آن را تغییر داد و در طول مدت پروژه باقی می ماند.
  • برای اطلاع شما، یک مقدار سوم وجود دارد، یک شماره پروژه که برخی از API ها از آن استفاده می کنند. در مورد هر سه این مقادیر در مستندات بیشتر بیاموزید.
  1. در مرحله بعد، برای استفاده از منابع Cloud/APIها باید صورتحساب را در کنسول 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 Access برای Cloud Run Job برای برقراری ارتباط با پایگاه داده AlloyDB
  • Cloud Run Job برای ایجاد پایگاه داده 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

ویژگی های موجود (Query Insight، Monitoring) را در کنسول کاوش کنید.

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 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

خروجی نمونه:

179a23bd33793924.png

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 باز کنید و بارهای کاری و خدمات ایجاد شده را بررسی کنید.

e1217216e003a839.png

d5c97fb5950c4db.png

گزارش های برنامه

Logs Explorer را باز کنید و گزارش‌هایی را جستجو کنید که حاوی متن "مشتری در حال حاضر وجود دارد".

543c5ed97819f540.png

5. تبریک می گویم!

تبریک می گویم، شما نرم افزار کد را تمام کردید!

آنچه ما پوشش داده ایم:

  • نحوه ایجاد نمونه خصوصی از پایگاه داده AlloyDB
  • نحوه استقرار یک برنامه در کلاستر GKE Autopilot که به نمونه AlloyDB متصل می شود

بعدش چیه:

سایر کدهای Cymbal Eats را کاوش کنید:

تمیز کردن

برای جلوگیری از تحمیل هزینه به حساب Google Cloud خود برای منابع استفاده شده در این آموزش، یا پروژه حاوی منابع را حذف کنید یا پروژه را نگه دارید و منابع فردی را حذف کنید.

حذف پروژه

ساده ترین راه برای حذف صورتحساب، حذف پروژه ای است که برای آموزش ایجاد کرده اید.