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

۱. مرور کلی

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

e8a5140b09521b7a.png

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

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

44662d7a086358de.png

سیستم خلبان خودکار GKE چیست؟

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

AlloyDB چیست؟

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

آنچه یاد خواهید گرفت

در این آزمایشگاه، شما یاد خواهید گرفت که چگونه موارد زیر را انجام دهید:

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

پیش‌نیازها

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

۲. تنظیمات و الزامات

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

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

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

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

تنظیمات محیط

با کلیک روی آیکون سمت راست نوار جستجو، Cloud Shell را فعال کنید.

eb0157a992f16fa3.png

مخزن را کلون کنید و به دایرکتوری بروید، دستور زیر را کپی و در ترمینال پیست کنید و 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

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

6356559df3eccdda.png

راه‌اندازی حدود ۱۰ دقیقه طول خواهد کشید. اسکریپت راه‌اندازی که برای ایجاد وابستگی‌های مورد نیاز استفاده می‌شود را بررسی کنید.

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

ویژگی‌های موجود (بینش پرس‌وجو، نظارت) را در کنسول بررسی کنید.

3b12b0fa1367fb42.png

بررسی خوشه خلبان خودکار 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

خروجی نمونه:

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

خروجی نمونه:

۱۷۹a۲۳bd۳۳۷۹۳۹۲۴.png

۴. برنامه آزمایشی

برای ذخیره آدرس اینترنتی خدمات مشتری، دستورات زیر را اجرا کنید.

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

e1217216e003a839.png

d5c97fb5950c4db.png

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

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

543c5ed97819f540.png

۵. تبریک می‌گویم!

تبریک می‌گویم، شما codelab را تمام کردید!

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

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

قدم بعدی چیست؟

سایر آزمایشگاه‌های کد Cymbal Eats را کاوش کنید:

تمیز کردن

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

حذف پروژه

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