במדריך הזה נסביר איך לפרוס אשכול של מסד נתונים וקטורי של PostgreSQL ב-Google Kubernetes Engine (GKE).
PostgreSQL כולל מגוון מודולים ותוספים שמרחיבים את הפונקציונליות של מסד הנתונים. במדריך הזה נסביר איך להתקין את התוסף pgvector באשכול PostgreSQL קיים שנפרס ב-GKE. התוסף Pgvector מאפשר לכם לאחסן וקטורים בטבלאות של מסד הנתונים על ידי הוספת סוגי וקטורים ל-PostgreSQL. בנוסף, Pgvector מספק חיפושים של דמיון על ידי הפעלת שאילתות SQL נפוצות.
כדי לפשט את הפריסה של התוסף PGvector, אנחנו פורסים קודם את האופרטור CloudnativePG, כי האופרטור מספק גרסה של התוסף שכלולה בחבילה.
המדריך הזה מיועד לאדמינים ומומחי Cloud Architect של פלטפורמות ענן, למהנדסי ML ולמומחי MLOps (DevOps) שרוצים לפרוס אשכולות של מסדי נתונים של PostgreSQL ב-GKE.
מטרות
במדריך הזה תלמדו איך:
- פריסת תשתית GKE ל-PostgreSQL.
- מתקינים את התוסף pgvector באשכול PostgreSQL שנפרס ב-GKE.
- פריסה והגדרה של מפעיל CloudNativePG PostgreSQL באמצעות Helm.
- העלאה של קבוצת נתונים לדוגמה והרצת שאילתות חיפוש באמצעות Jupyter Notebook.
עלויות
במסמך הזה משתמשים ברכיבים הבאים של Google Cloud, והשימוש בהם כרוך בתשלום:
כדי ליצור הערכת עלויות בהתאם לשימוש החזוי, אתם יכולים להשתמש במחשבון התמחור.
כשמסיימים את המשימות שמתוארות במסמך הזה אפשר למחוק את המשאבים שיצרתם כדי להימנע מחיובים נוספים. מידע נוסף זמין בקטע הסרת המשאבים.
לפני שמתחילים
במדריך הזה משתמשים ב-Cloud Shell כדי להריץ פקודות. Cloud Shell היא סביבת מעטפת לניהול משאבים שמתארחים ב- Google Cloud. הוא מותקן מראש עם כלי שורת הפקודה Google Cloud CLI, kubectl, Helm ו- Terraform. אם אתם לא משתמשים ב-Cloud Shell, אתם צריכים להתקין את Google Cloud CLI.
- נכנסים לחשבון Google Cloud . אנחנו ממליצים למשתמשים חדשים ב- Google Cloud ליצור חשבון כדי שיוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
-
התקינו את ה-CLI של Google Cloud.
-
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:
gcloud init -
יוצרים או בוחרים Google Cloud פרויקט.
התפקידים שנדרשים כדי לבחור או ליצור פרויקט
- Select a project: כדי לבחור פרויקט לא צריך תפקיד IAM ספציפי – אפשר לבחור כל פרויקט שקיבלתם בו תפקיד.
-
יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד Project Creator (
roles/resourcemanager.projectCreator), שכולל את ההרשאהresourcemanager.projects.create. איך מקצים תפקידים
-
יוצרים Google Cloud פרויקט:
gcloud projects create PROJECT_ID
מחליפים את
PROJECT_IDבשם של פרויקט Google Cloud שיוצרים. -
בוחרים את הפרויקט שיצרתם: Google Cloud
gcloud config set project PROJECT_ID
מחליפים את
PROJECT_IDבשם הפרויקט ב- Google Cloud .
מפעילים את ממשקי ה-API של Cloud Resource Manager, Compute Engine, GKE ו-IAM Service Account Credentials, אם אחד מהם לא מופעל:
התפקידים שנדרשים כדי להפעיל ממשקי API
כדי להפעיל ממשקי API, צריך את ההרשאה
serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד 'בעלים' (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד 'אדמין בממשק Service Usage' (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידיםgcloud services enable cloudresourcemanager.googleapis.com
compute.googleapis.com container.googleapis.com iamcredentials.googleapis.com -
התקינו את ה-CLI של Google Cloud.
-
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:
gcloud init -
יוצרים או בוחרים Google Cloud פרויקט.
התפקידים שנדרשים כדי לבחור או ליצור פרויקט
- Select a project: כדי לבחור פרויקט לא צריך תפקיד IAM ספציפי – אפשר לבחור כל פרויקט שקיבלתם בו תפקיד.
-
יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד Project Creator (
roles/resourcemanager.projectCreator), שכולל את ההרשאהresourcemanager.projects.create. איך מקצים תפקידים
-
יוצרים Google Cloud פרויקט:
gcloud projects create PROJECT_ID
מחליפים את
PROJECT_IDבשם של פרויקט Google Cloud שיוצרים. -
בוחרים את הפרויקט שיצרתם: Google Cloud
gcloud config set project PROJECT_ID
מחליפים את
PROJECT_IDבשם הפרויקט ב- Google Cloud .
מפעילים את ממשקי ה-API של Cloud Resource Manager, Compute Engine, GKE ו-IAM Service Account Credentials, אם אחד מהם לא מופעל:
התפקידים שנדרשים כדי להפעיל ממשקי API
כדי להפעיל ממשקי API, צריך את ההרשאה
serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד 'בעלים' (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד 'אדמין בממשק Service Usage' (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידיםgcloud services enable cloudresourcemanager.googleapis.com
compute.googleapis.com container.googleapis.com iamcredentials.googleapis.com -
מעניקים תפקידים לחשבון המשתמש. מריצים את הפקודה הבאה לכל אחד מהתפקידים הבאים ב-IAM:
roles/compute.securityAdmin, roles/compute.viewer, roles/container.clusterAdmin, roles/container.admin, roles/iam.serviceAccountAdmin, roles/iam.serviceAccountUsergcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט. -
USER_IDENTIFIER: המזהה של חשבון המשתמש . לדוגמה,myemail@example.com. -
ROLE: תפקיד ה-IAM שאתם מקצים לחשבון המשתמש.
-
מגדירים את הסביבה
כדי להגדיר את הסביבה באמצעות Cloud Shell:
מגדירים משתני סביבה לפרויקט, לאזור ולקידומת של משאב אשכול Kubernetes:
export PROJECT_ID=PROJECT_ID export KUBERNETES_CLUSTER_PREFIX=postgres export REGION=us-central1- מחליפים את
PROJECT_IDבמזהה הפרויקט ב- Google Cloud.
במדריך הזה נעשה שימוש באזור
us-central1.- מחליפים את
משכפלים את מאגר המקורות של הקוד לדוגמה מ-GitHub:
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samplesמנווטים לספרייה
postgres-pgvector:cd kubernetes-engine-samples/databases/postgres-pgvector
יצירת תשתית האשכול
בקטע הזה מריצים סקריפט Terraform כדי ליצור אשכול GKE פרטי, זמין מאוד ואזורי, כדי לפרוס את מסד הנתונים של PostgreSQL.
אפשר לבחור לפרוס את PostgreSQL באמצעות אשכול רגיל או אשכול במצב Autopilot. לכל אחד מהם יש יתרונות משלו ומודלים שונים של תמחור.
טייס אוטומטי
כדי לפרוס את תשתית אשכול Autopilot, מריצים את הפקודות הבאות ב-Cloud Shell:
export GOOGLE_OAUTH_ACCESS_TOKEN=$(gcloud auth print-access-token)
terraform -chdir=../postgresql-cloudnativepg/terraform/gke-autopilot init
terraform -chdir=../postgresql-cloudnativepg/terraform/gke-autopilot apply \
-var project_id=${PROJECT_ID} \
-var region=${REGION} \
-var cluster_prefix=${KUBERNETES_CLUSTER_PREFIX}
GKE מחליף את המשתנים הבאים בזמן הריצה:
-
GOOGLE_OAUTH_ACCESS_TOKENמשתמש בפקודהgcloud auth print-access-tokenכדי לאחזר אסימון גישה שמאמת אינטראקציות עם ממשקי Google Cloud API שונים -
PROJECT_ID, REGIONו-KUBERNETES_CLUSTER_PREFIXהם משתני הסביבה שמוגדרים בקטע הגדרת הסביבה ומוקצים למשתנים הרלוונטיים החדשים עבור אשכול Autopilot שאתם יוצרים.
כשמופיעה בקשה, כותבים yes.
Terraform יוצר את המשאבים הבאים:
- רשת VPC בהתאמה אישית ורשת משנה פרטית לצומתי Kubernetes.
- Cloud Router כדי לגשת לאינטרנט דרך תרגום כתובות רשת (NAT).
- אשכול GKE פרטי באזור
us-central1. ServiceAccountעם הרשאות רישום ביומן ומעקב באשכול.- הגדרת השירות המנוהל של Google Cloud ל-Prometheus לצורך מעקב והתראות לגבי אשכולות.
הפלט אמור להיראות כך:
...
Apply complete! Resources: 11 added, 0 changed, 0 destroyed.
...
רגילה
כדי לפרוס את התשתית של אשכול Standard, מריצים את הפקודות הבאות ב-Cloud Shell:
export GOOGLE_OAUTH_ACCESS_TOKEN=$(gcloud auth print-access-token)
terraform -chdir=../postgresql-cloudnativepg/terraform/gke-standard init
terraform -chdir=../postgresql-cloudnativepg/terraform/gke-standard apply \
-var project_id=${PROJECT_ID} \
-var region=${REGION} \
-var cluster_prefix=${KUBERNETES_CLUSTER_PREFIX}
GKE מחליף את המשתנים הבאים בזמן הריצה:
-
GOOGLE_OAUTH_ACCESS_TOKENמשתמש בפקודהgcloud auth print-access-tokenכדי לאחזר אסימון גישה שמאמת אינטראקציות עם ממשקי Google Cloud API שונים. -
PROJECT_ID, REGIONו-KUBERNETES_CLUSTER_PREFIXהם משתני הסביבה שמוגדרים בקטע הגדרת הסביבה ומוקצים למשתנים הרלוונטיים החדשים עבור אשכול Standard שאתם יוצרים.
כשמופיעה בקשה, כותבים yes. יכול להיות שיחלפו כמה דקות עד שהפקודות האלה יסתיימו והאשכול יציג סטטוס מוכן.
Terraform יוצר את המשאבים הבאים:
- רשת VPC בהתאמה אישית ורשת משנה פרטית לצומתי Kubernetes.
- Cloud Router כדי לגשת לאינטרנט דרך תרגום כתובות רשת (NAT).
- אשכול GKE פרטי באזור
us-central1עם התאמה אוטומטית לעומס (צומת אחד עד שני צמתים לכל אזור). ServiceAccountעם הרשאות רישום ביומן ומעקב באשכול.- הגדרת השירות המנוהל של Google Cloud ל-Prometheus למעקב אחרי אשכולות ולהתראות.
הפלט אמור להיראות כך:
...
Apply complete! Resources: 14 added, 0 changed, 0 destroyed.
...
התחברות לאוסף
מגדירים את kubectl כדי לאחזר פרטי כניסה ולתקשר עם אשכול GKE החדש:
gcloud container clusters get-credentials \
${KUBERNETES_CLUSTER_PREFIX}-cluster --location ${REGION} --project ${PROJECT_ID}
פריסת האופרטור CloudNativePG
פורסים את CloudNativePG באשכול Kubernetes באמצעות Helm chart:
בודקים את הגרסה של Helm:
helm versionאם הגרסה ישנה יותר מ-3.13, מעדכנים אותה:
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bashמוסיפים את מאגר התרשימים של CloudNativePG operator Helm:
helm repo add cnpg https://cloudnative-pg.github.io/chartsפורסים את האופרטור CloudNativePG באמצעות כלי שורת הפקודה Helm:
helm upgrade --install cnpg \ --namespace cnpg-system \ --create-namespace \ cnpg/cloudnative-pgהפלט אמור להיראות כך:
Release "cnpg" does not exist. Installing it now. NAME: cnpg LAST DEPLOYED: Fri Oct 13 13:52:36 2023 NAMESPACE: cnpg-system STATUS: deployed REVISION: 1 TEST SUITE: None ...
פריסת מסד נתונים וקטורי של PostgreSQL
בקטע הזה פורסים את מסד הנתונים הווקטורי של PostgreSQL.
יוצרים מרחב שמות
pg-nsלמסד הנתונים:kubectl create ns pg-nsמחילים את המניפסט כדי לפרוס את אשכול PostgreSQL. קובץ המניפסט של האוסף מאפשר את התוסף pgvector.
kubectl apply -n pg-ns -f manifests/01-basic-cluster/postgreSQL_cluster.yamlpostgreSQL_cluster.yamlהמניפסט מתאר את הפריסה:בודקים את הסטטוס של האשכול:
kubectl get cluster -n pg-ns --watchמחכים עד שהפלט יציג את הסטטוס
Cluster in healthy stateלפני שעוברים לשלב הבא.
הרצת שאילתות באמצעות מחברת Vertex AI Colab Enterprise
בקטע הזה תעלו וקטורים לטבלה ב-PostgreSQL ותריצו שאילתות חיפוש סמנטי באמצעות תחביר SQL.
מתחברים למסד הנתונים של PostgreSQL באמצעות Colab Enterprise.
משתמשים בתבנית ייעודית של זמן ריצה כדי לפרוס ל-postgres-vpc, כדי שמחברת ה-Notebook תוכל לתקשר עם משאבים באשכול GKE.
מידע נוסף על Vertex AI Colab Enterprise זמין במאמרי העזרה של Colab Enterprise.
יצירת תבנית בזמן ריצה
כדי ליצור תבנית של סביבת זמן ריצה ב-Colab Enterprise:
במסוף Google Cloud , עוברים לדף Runtime Templates של Colab Enterprise ומוודאים שהפרויקט שלכם נבחר:
לוחצים על add_box תבנית חדשה. מופיע הדף Create new runtime template.
בקטע Runtime basics (יסודות זמן הריצה):
- בשדה Display name, מזינים
pgvector-connect. - בתפריט הנפתח Region, בוחרים באפשרות
us-central1. זהו אותו אזור כמו באשכול GKE.
- בשדה Display name, מזינים
בקטע Configure compute (הגדרת מחשוב):
- בתפריט הנפתח Machine type, בוחרים באפשרות
e2-standard-2. - בשדה גודל הדיסק, מזינים
30.
- בתפריט הנפתח Machine type, בוחרים באפשרות
בקטע רשתות ואבטחה:
- ברשימה הנפתחת Network, בוחרים את הרשת שבה נמצא אשכול GKE.
- ברשימה הנפתחת Subnetwork, בוחרים את רשת המשנה המתאימה.
- מבטלים את הסימון של התיבה הפעלת גישה לאינטרנט הציבורי.
כדי לסיים את יצירת תבנית זמן הריצה, לוחצים על יצירה. תבנית זמן הריצה תופיע ברשימה בכרטיסייה תבניות זמן ריצה.
יצירת סביבת זמן ריצה
כדי ליצור סביבת זמן ריצה ב-Colab Enterprise:
ברשימת התבניות של סביבות זמן הריצה, בעמודה Actions של התבנית שיצרתם, לוחצים על more_vert ואז על Create runtime. מופיעה החלונית Create Vertex AI Runtime.
כדי ליצור סביבת ריצה על סמך התבנית, לוחצים על יצירה.
בכרטיסייה Runtimes שנפתחת, ממתינים עד שהסטטוס ישתנה ל-Healthy.
ייבוא ה-Notebook
כדי לייבא את ה-notebook ב-Colab Enterprise:
עוברים לכרטיסייה המחברות שלי ולוחצים על ייבוא. מופיעה החלונית Import notebooks.
בקטע מקור הייבוא, בוחרים באפשרות כתובת URL.
בקטע כתובות URL של Notebook, מזינים את הקישור הבא:
https://raw.githubusercontent.com/epam/kubernetes-engine-samples/internal_lb/databases/postgres-pgvector/manifests/02-notebook/vector-database.ipynbלוחצים על Import.
התחברות לסביבת זמן הריצה והרצת שאילתות
כדי להתחבר לסביבת זמן הריצה ולהריץ שאילתות:
ב-notebook, ליד הלחצן Connect, לוחצים על arrow_drop_down Additional connection options. מופיעה החלונית Connect to Vertex AI Runtime.
בוחרים באפשרות התחברות לסביבת זמן ריצה ואז באפשרות התחברות לסביבת זמן ריצה קיימת.
בוחרים את זמן הריצה שהפעלתם ולוחצים על Connect (חיבור).
כדי להריץ את התאים ב-notebook, לוחצים על הלחצן Run cell לצד כל תא קוד.
הנוטבוק מכיל תאי קוד וגם טקסט שמתאר כל בלוק קוד. כשמריצים תא קוד, הפקודות שבו מופעלות ומוצג פלט. אפשר להריץ את התאים לפי הסדר, או להריץ תאים ספציפיים לפי הצורך.
הסרת המשאבים
כדי להימנע מחיובים בחשבון Google Cloud בגלל השימוש במשאבים שנעשה במסגרת המדריך הזה, אפשר למחוק את הפרויקט שמכיל את המשאבים או להשאיר את הפרויקט ולמחוק את המשאבים בנפרד.
מחיקת הפרויקט
הדרך הכי קלה להימנע מחיוב היא למחוק את הפרויקט שיצרתם בשביל המדריך הזה.
כדי למחוק Google Cloud פרויקט:
gcloud projects delete PROJECT_ID
אם מחקתם את הפרויקט, סיימתם את הניקוי. אם לא מחקתם את הפרויקט, צריך למחוק את המשאבים בנפרד.
מחיקת משאבים בודדים
מגדירים משתני סביבה.
export PROJECT_ID=${PROJECT_ID} export KUBERNETES_CLUSTER_PREFIX=postgres export REGION=us-central1מריצים את הפקודה
terraform destroy:export GOOGLE_OAUTH_ACCESS_TOKEN=$(gcloud auth print-access-token) terraform -chdir=../postgresql-cloudnativepg/terraform/FOLDER destroy \ -var project_id=${PROJECT_ID} \ -var region=${REGION} \ -var cluster_prefix=${KUBERNETES_CLUSTER_PREFIX}מחליפים את
FOLDERב-gke-autopilotאו ב-gke-standard, בהתאם לסוג אשכול GKE שיצרתם.כשמופיעה בקשה, מקלידים
yes.