במדריך הזה נראה איך פורסים אשכול של מסד נתונים וקטורי של Weaviate ב-Google Kubernetes Engine (GKE).
Weaviate הוא מסד נתונים וקטורי בקוד פתוח עם ביצועים של השהיה נמוכה ותמיכה בסיסית בסוגים שונים של מדיה, כמו טקסט ותמונות. הוא תומך בחיפוש סמנטי, במענה לשאלות ובסיווג. Weaviate מבוסס כולו על Go ומאחסן גם אובייקטים וגם וקטורים, כך שאפשר להשתמש בחיפוש וקטורי, בחיפוש לפי מילות מפתח ובשילוב של שניהם כחיפוש היברידי. מבחינת התשתית, Weaviate הוא מסד נתונים מבוסס-ענן ועמיד בכשלים. עמידות בפני תקלות מושגת באמצעות ארכיטקטורה ללא שרת ראשי, שבה כל צומת באשכול מסד הנתונים יכול לטפל בבקשות קריאה וכתיבה, וכך נמנעת נקודת כשל בודדת.
המדריך הזה מיועד לאדמינים ומומחי Cloud Architect של פלטפורמות ענן, למהנדסי ML ולמומחי MLOps (DevOps) שרוצים לפרוס אשכולות של מסדי נתונים וקטוריים ב-GKE.
יתרונות
היתרונות של Weaviate:
- ספריות לשפות תכנות שונות ו-API פתוח לשילוב עם שירותים אחרים.
- שינוי קנה מידה אופקי.
- איזון בין עלות-תועלת למהירות השאילתה, במיוחד כשמדובר במערכי נתונים גדולים. אתם יכולים לבחור כמה נתונים יישמרו בזיכרון וכמה בדיסק.
מטרות
במדריך הזה תלמדו איך:
- תכנון ופריסה של תשתית GKE ל-Weaviate.
- פורסים ומגדירים את מסד הנתונים של Weaviate באשכול GKE.
- מריצים נוטבוק כדי ליצור ולאחסן הטמעות וקטוריות לדוגמה במסד הנתונים, ומבצעים שאילתות חיפוש מבוססות-וקטורים.
עלויות
במסמך הזה משתמשים ברכיבים הבאים של 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.serviceAccountUser, roles/monitoring.viewergcloud 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=weaviate export REGION=us-central1מחליפים את
PROJECT_IDבמזהה הפרויקט ב- Google Cloud.במדריך הזה נעשה שימוש באזור
us-central1כדי ליצור את משאבי הפריסה.בודקים את הגרסה של Helm:
helm versionאם הגרסה ישנה יותר מ-3.13, צריך לעדכן אותה:
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bashמשכפלים את מאגר המקורות של הקוד לדוגמה מ-GitHub:
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samplesמנווטים לספרייה
weaviate:cd kubernetes-engine-samples/databases/weaviate
יצירת תשתית האשכול
בקטע הזה מריצים סקריפט של Terraform כדי ליצור אשכול GKE פרטי, זמין מאוד ואזורי, כדי לפרוס את מסד הנתונים של Weaviate.
אפשר לבחור לפרוס את Weaviate באמצעות אשכול רגיל או אשכול Autopilot. לכל אחד מהם יש יתרונות משלו ומודלים שונים של תמחור.
טייס אוטומטי
בתרשים הבא מוצג אשכול Autopilot GKE שנפרס בפרויקט.
כדי לפרוס את תשתית האשכול, מריצים את הפקודות הבאות ב-Cloud Shell:
export GOOGLE_OAUTH_ACCESS_TOKEN=$(gcloud auth print-access-token)
terraform -chdir=terraform/gke-autopilot init
terraform -chdir=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.
הפלט אמור להיראות כך:
...
Apply complete! Resources: 9 added, 0 changed, 0 destroyed.
Outputs:
kubectl_connection_command = "gcloud container clusters get-credentials weaviate-cluster --region us-central1"
Terraform יוצר את המשאבים הבאים:
- רשת VPC מותאמת אישית ורשת משנה פרטית לצמתים של Kubernetes.
- Cloud Router כדי לגשת לאינטרנט דרך תרגום כתובות רשת (NAT).
- אשכול GKE פרטי באזור
us-central1. ServiceAccountעם הרשאות רישום ביומן ומעקב עבור האשכול.- הגדרת השירות המנוהל של Google Cloud ל-Prometheus לצורך מעקב והתראות לגבי אשכולות.
רגילה
בתרשים הבא מוצג אשכול GKE פרטי רגיל שנפרס בשלושה אזורים שונים.
כדי לפרוס את תשתית האשכול, מריצים את הפקודות הבאות ב-Cloud Shell:
export GOOGLE_OAUTH_ACCESS_TOKEN=$(gcloud auth print-access-token)
terraform -chdir=terraform/gke-standard init
terraform -chdir=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. יכול להיות שיחלפו כמה דקות עד שהפקודות האלה יסתיימו והאשכול יציג סטטוס מוכן.
הפלט אמור להיראות כך:
...
Apply complete! Resources: 10 added, 0 changed, 0 destroyed.
Outputs:
kubectl_connection_command = "gcloud container clusters get-credentials weaviate-cluster --region us-central1"
Terraform יוצר את המשאבים הבאים:
- רשת VPC מותאמת אישית ורשת משנה פרטית לצמתים של Kubernetes.
- Cloud Router כדי לגשת לאינטרנט באמצעות תרגום כתובת רשת (NAT).
- אשכול GKE פרטי באזור
us-central1עם התאמה אוטומטית לעומס (צומת אחד עד שני צמתים לכל אזור). ServiceAccountעם הרשאות רישום ביומן ומעקב עבור האשכול.- הגדרת השירות המנוהל של Google Cloud ל-Prometheus לצורך מעקב והתראות לגבי אשכולות.
התחברות לאוסף
מגדירים את kubectl כדי לאחזר פרטי כניסה ולתקשר עם אשכול GKE החדש:
gcloud container clusters get-credentials \
${KUBERNETES_CLUSTER_PREFIX}-cluster --location ${REGION}
פריסת מסד הנתונים של Weaviate באשכול
כדי להשתמש בתרשים Helm לפריסת מסד הנתונים של Weaviate באשכול GKE, פועלים לפי השלבים הבאים:
כדי לפרוס את מאגר התרשימים של Weaviate database Helm באשכול GKE, צריך להוסיף אותו קודם:
helm repo add weaviate https://weaviate.github.io/weaviate-helmיוצרים את מרחב השמות
weaviateלמסד הנתונים:kubectl create ns weaviateיוצרים סוד כדי לאחסן את מפתח ה-API:
kubectl create secret generic apikeys --from-literal=AUTHENTICATION_APIKEY_ALLOWED_KEYS=$(openssl rand -base64 32) -n weaviateפריסת מאזן עומסים פנימי כדי לגשת ל-Weaviate מתוך הרשת הווירטואלית:
kubectl apply -n weaviate -f manifests/05-ilb/ilb.yamlבמניפסט
ilb.yamlמתואר שירות מאזן העומסים:מחילים את המניפסט כדי לפרוס את אשכול Weaviate:
helm upgrade --install "weaviate" weaviate/weaviate \ --namespace "weaviate" \ --values ./manifests/01-basic-cluster/weaviate_cluster.yamlקובץ המניפסט
weaviate_cluster.yamlמתאר את הפריסה. פריסה היא אובייקט Kubernetes API שמאפשר להפעיל כמה עותקים של Pods שמפוזרים בין הצמתים באשכול.מחכים כמה דקות עד שהאשכול של Weaviate יופעל באופן מלא.
בודקים את סטטוס הפריסה:
kubectl get weaviate -n weaviate --watchאם מסד הנתונים של
weaviateנפרס בהצלחה, הפלט אמור להיראות כך:NAME: weaviate LAST DEPLOYED: Tue Jun 18 13:15:53 2024 NAMESPACE: weaviate STATUS: deployed REVISION: 1 TEST SUITE: Noneמחכים ש-Kubernetes יפעיל את המשאבים:
kubectl wait pods -l app.kubernetes.io/name=weaviate --for condition=Ready --timeout=300s -n weaviate
הרצת שאילתות באמצעות Vertex AI Colab Enterprise notebook
בקטע הזה מוסבר איך להתחבר למסד הנתונים של Weaviate באמצעות Colab Enterprise.
אתם יכולים להשתמש בתבנית ייעודית של זמן ריצה כדי לפרוס אל weaviate-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, מזינים
weaviate-connect. - בתפריט הנפתח Region, בוחרים באפשרות
us-central1. זהו אותו אזור כמו באשכול GKE.
- בשדה Display name, מזינים
בקטע Configure compute (הגדרת מחשוב):
- ברשימה הנפתחת Machine type, בוחרים באפשרות
e2-standard-2. - בשדה גודל הדיסק, מזינים
30.
- ברשימה הנפתחת Machine type, בוחרים באפשרות
בקטע רשתות ואבטחה:
- ברשימה הנפתחת Network, בוחרים את הרשת שבה נמצא אשכול GKE.
- ברשימה הנפתחת Subnetwork, בוחרים את רשת המשנה המתאימה.
- מבטלים את הסימון של התיבה הפעלת גישה לאינטרנט לכולם.
כדי לסיים את יצירת התבנית של זמן הריצה, לוחצים על Create. תבנית זמן הריצה תופיע ברשימה בכרטיסייה תבניות זמן ריצה.
יצירת סביבת זמן ריצה
כדי ליצור סביבת זמן ריצה של Colab Enterprise:
ברשימת תבניות זמן הריצה של התבנית שיצרתם, בעמודה פעולות, לוחצים על more_vert ואז על יצירת זמן ריצה. החלונית Create Vertex AI Runtime נפתחת.
כדי ליצור סביבת ריצה על סמך התבנית, לוחצים על יצירה.
בכרטיסייה Runtimes (זמני ריצה) שנפתחת, מחכים שהסטטוס ישתנה ל-Healthy (תקין).
ייבוא ה-Notebook
כדי לייבא את ה-notebook ב-Colab Enterprise:
עוברים לכרטיסייה התיקיות שלי ולוחצים על ייבוא. מופיעה החלונית Import notebooks.
בקטע ייבוא מקור, בוחרים באפשרות כתובת URL.
בקטע כתובות URL של Notebook, מזינים את הקישור הבא:
https://raw.githubusercontent.com/GoogleCloudPlatform/kubernetes-engine-samples/main/databases/weaviate/manifests/02-notebook/vector-database.ipynbלוחצים על Import.
התחברות לסביבת זמן הריצה והרצת שאילתות
כדי להתחבר לסביבת זמן הריצה ולהריץ שאילתות:
ב-notebook, ליד הלחצן Connect, לוחצים על arrow_drop_down Additional connection options. מופיעה החלונית Connect to Vertex AI Runtime.
לוחצים על התחברות לסביבת זמן ריצה ואז על התחברות לסביבת זמן ריצה קיימת.
בוחרים את זמן הריצה שהפעלתם ולוחצים על Connect (חיבור).
כדי להריץ את התאים ב-notebook, לוחצים על הלחצן Run cell לצד כל תא קוד.
הנוטבוק מכיל תאי קוד וגם טקסט שמתאר כל בלוק קוד. כשמריצים תא קוד, הפקודות שבו מופעלות ומוצג פלט. אפשר להריץ את התאים לפי הסדר, או להריץ תאים ספציפיים לפי הצורך.
הצגת מדדי Prometheus של האשכול
אשכול GKE מוגדר עם השירות המנוהל של Google Cloud ל-Prometheus, שמאפשר איסוף מדדים בפורמט Prometheus. השירות הזה מספק פתרון מנוהל מלא למעקב ולהתראות, שמאפשר איסוף, אחסון וניתוח של מדדים מהאשכול ומהאפליקציות שלו.
בתרשים הבא אפשר לראות איך Prometheus אוסף מדדים לגבי האשכול:
האשכול הפרטי של GKE בתרשים מכיל את הרכיבים הבאים:
- Weaviate Pods שחושפים מדדים בנתיב
/metricsובפורט2112. - אוספים מבוססי-Prometheus שמעבדים את המדדים מה-Pods של Weaviate.
- משאב PodMonitoring ששולח את המדדים אל Cloud Monitoring.
כדי לייצא את המדדים ולראות אותם, פועלים לפי השלבים הבאים:
יוצרים את המשאב
PodMonitoringכדי לגרד מדדים לפיlabelSelector:kubectl apply -n weaviate -f manifests/03-prometheus-metrics/pod-monitoring.yamlהמניפסט
pod-monitoring.yamlמתאר את המשאבPodMonitoring:כדי לייבא מרכז בקרה בהתאמה אישית של Cloud Monitoring עם ההגדרות האישיות שנקבעו ב-
dashboard.json:gcloud --project "${PROJECT_ID}" monitoring dashboards create --config-from-file monitoring/dashboard.jsonאחרי שהפקודה מורצת בהצלחה, עוברים אל לוחות הבקרה ב-Cloud Monitoring:
ברשימת לוחות הבקרה, פותחים את לוח הבקרה
Weaviate Overview. יכול להיות שיעבור זמן עד שהמדדים ייאספו ויוצגו. במרכז הבקרה מוצגים מספר השברים (shards), הווקטורים והזמן שלוקח לפעולות להתבצע
הסרת המשאבים
כדי להימנע מחיובים בחשבון Google Cloud בגלל השימוש במשאבים שנעשה במסגרת המדריך הזה, אפשר למחוק את הפרויקט שמכיל את המשאבים או להשאיר את הפרויקט ולמחוק את המשאבים בנפרד.
מחיקת הפרויקט
הדרך הכי קלה להימנע מחיוב היא למחוק את הפרויקט שיצרתם בשביל המדריך הזה.
כדי למחוק Google Cloud פרויקט:
gcloud projects delete PROJECT_ID
אם מחקתם את הפרויקט, סיימתם את הניקוי. אם לא מחקתם את הפרויקט, צריך למחוק את המשאבים בנפרד.
מחיקת משאבים בודדים
מגדירים את משתני הסביבה.
export PROJECT_ID=${PROJECT_ID} export KUBERNETES_CLUSTER_PREFIX=weaviate export REGION=us-central1מריצים את הפקודה
terraform destroy:export GOOGLE_OAUTH_ACCESS_TOKEN=$(gcloud auth print-access-token) terraform -chdir=terraform/FOLDER destroy \ -var project_id=${PROJECT_ID} \ -var region=${REGION} \ -var cluster_prefix=${KUBERNETES_CLUSTER_PREFIX}מחליפים את
FOLDERב-gke-autopilotאו ב-gke-standard, בהתאם לסוג אשכול ה-GKE שיצרתם.כשמופיעה בקשה, מקלידים
yes.כדי למצוא את כל הדיסקים שלא צורפו:
export disk_list=$(gcloud compute disks list --filter="-users:* AND labels.name=${KUBERNETES_CLUSTER_PREFIX}-cluster" --format "value[separator=|](name,region)")מוחקים את הדיסקים:
for i in $disk_list; do disk_name=$(echo $i| cut -d'|' -f1) disk_region=$(echo $i| cut -d'|' -f2|sed 's|.*/||') echo "Deleting $disk_name" gcloud compute disks delete $disk_name --region $disk_region --quiet doneמחיקת המאגר ב-GitHub:
rm -r ~/kubernetes-engine-samples/