כדי לשלב את IBM Symphony עם Google Kubernetes Engine (GKE) לניהול דינמי של משאבים, צריך להתקין ולהגדיר את ספק Symphony ל-GKE. הספק הזה מאפשר ל-Symphony להקצות ולנהל משאבי מחשוב כ-Pods באשכול GKE, וכך מאפשר שינוי יעיל של גודל נפח העבודה באמצעות תזמור של Kubernetes.
כדי להפעיל את השילוב הזה, צריך להתקין אופרטור של Kubernetes באשכול, להתקין את הפלאגין של הספק במארח הראשי של Symphony ולהגדיר את שירות המארח של Symphony כדי לתקשר עם GKE.
מידע נוסף על Symphony Connectors for Google Cloudזמין במאמר Integrate IBM Spectrum Symphony withGoogle Cloud.
לפני שמתחילים
כדי להתקין את ספק Symphony ל-GKE, צריכים להיות לכם המשאבים הבאים:
- קלאסטר פעיל של IBM Spectrum Symphony עם שירות Host Factory מופעל.
- אשכול GKE פעיל. הוראות ליצירת אשכול זמינות בסקירה הכללית של GKE.
- חשבון שירות עם ההרשאות המתאימות. פרטים נוספים מופיעים בקטע תפקידים נדרשים.
- כלי שורת הפקודה
kubectlמותקן ומוגדר לתקשורת עם אשכול ה-GKE.
התפקידים הנדרשים
כדי לקבל את ההרשאות שדרושות להתקנת האופרטור ולניהול של Podים של Symphony, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים בפרויקט:
-
כדי לנהל משאבי Kubernetes:
אדמין של Kubernetes Engine (
roles/container.admin)
להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.
התקנת האופרטור של Kubernetes
לפני שמתקינים את ספק GKE, צריך להתקין את האופרטור המשויך של Kubernetes. האופרטור מנהל את מחזור החיים של פודים של מחשוב Symphony באשכול GKE.
יצירת תמונת המפעיל
כדי ליצור ולפרוס את המניפסטים של Kubernetes לאופרטור, צריך קודם ליצור את קובץ אימג' של קונטיינר של האופרטור. המניפסטים כוללים את Custom Resource Definition (CRD) שבו האופרטור משתמש כדי לנהל את Symphony. כדי להשיג את התמונה, אפשר ליצור אותה מהמקור.
כדי ליצור את תמונת האופרטור מהמקור, מבצעים את השלבים הבאים:
משכפלים את מאגר
symphony-gcp-connectorמ-GitHub:git clone https://github.com/GoogleCloudPlatform/symphony-gcp-connector.gitמנווטים לספרייה
k8s-operator:cd symphony-gcp-connector/k8s-operatorמגדירים את משתני הסביבה לשם התמונה, למאגר ולתג:
export IMAGE="gcp-symphony-operator" export REGISTRY="IMAGE_REPO" export TAG="TAG"מחליפים את מה שכתוב בשדות הבאים:
-
IMAGE_REPO: מאגר התמונות שבו מאוחסנת תמונת המפעיל. לדוגמה, אפשר להשתמש ב-Artifact Registry כדי לאחסן תמונות של אופרטורים. מידע נוסף זמין במאמר יצירת מאגרי Docker. -
TAG: התג של תמונת האופרטור, לדוגמה,0.0.1.
-
יוצרים את קובץ האימג' של האופרטור ושולחים אותו:
bash -c 'docker buildx build --platform linux/amd64 -t $IMAGE:$TAG -t $IMAGE:latest -t $REGISTRY/$IMAGE:$TAG -t $REGISTRY/$IMAGE:latest .' bash -c 'docker push $REGISTRY/$IMAGE:$TAG && docker push $REGISTRY/$IMAGE:latest'
הגדרת מניפסטים של אופרטורים
אחרי שיש לכם את תמונת האופרטור, אתם צריכים ליצור ולהגדיר את מניפסטים של Kubernetes.
כדי ליצור את קובצי המניפסט, משתמשים בפקודה
export-manifestsעם תמונת האופרטור:docker run --rm gcp-symphony-operator:latest export-manifests > manifests.yamlפותחים את הקובץ
manifests.yamlבכלי לעריכת טקסט לבחירתכם.בקטע
spec.template.spec.containers, מאתרים את השדהimageומעדכנים את הערך שלו לנתיב המלא של התמונה שהעליתם למאגר.... containers: - image: IMAGE_REPO/gcp-symphony-operator:TAG name: manager ...מחליפים את מה שכתוב בשדות הבאים:
IMAGE_REPO: הנתיב למאגר התמונות שאליו העליתם את תמונת האופרטור.
TAG: התג שהקציתם לתמונת האופרטור כשבניתם אותה.
אופציונלי: אפשר גם לשנות את הערך של
imagePullPolicyכך שיתאים לשיטות שלכם לניהול אשכולות.
החלת המניפסטים של האופרטור
אחרי שמגדירים את קובצי המניפסט, מחילים אותם על אשכול Kubernetes.
אפשר להחיל את המניפסטים באמצעות kubectl או Cluster Toolkit.
kubectl: כדי להחיל את המניפסטים באמצעות
kubectl, מריצים את הפקודה הבאה:kubectl apply -f manifests.yamlCluster Toolkit: אם התשתית של GKE מנוהלת על ידי Cluster Toolkit, צריך להוסיף מקור
modules/management/kubectl-applyלתוכנית ה-blueprint של GKE כדי להחיל את המניפסטים. הנה דוגמה להגדרה, בהנחה שהקובץmanifests.yamlנמצא באותה ספרייה כמו תוכנית ה-GKE:- id: symphony_operator_install source: modules/management/kubectl-apply use: [gke_cluster] settings: apply_manifests: - source: $(ghpc_stage("manifests.yaml"))מידע נוסף זמין במאמר סקירה כללית על Cluster Toolkit.
טעינה של משתני הסביבה של המארח
כדי להגדיר או לנהל את שירותי המפעל של המארחים, צריך לטעון את משתני הסביבה של Symphony בסשן של מעטפת הפקודות. במכונת ה-VM של המארח הראשי של Symphony, מריצים את הפקודה הבאה:
source INSTALL_FOLDER/profile.platform
מחליפים את הערך ב-INSTALL_FOLDER בנתיב לתיקיית ההתקנה. נתיב תיקיית ההתקנה של Symphony שמוגדר כברירת מחדל הוא /opt/ibm/spectrumcomputing. עם זאת, אם התקנתם את Symphony במקום אחר, אתם צריכים להשתמש בנתיב הנכון לסביבה שלכם.
הפקודה הזו מפעילה את הסקריפט profile.platform, שמייצא משתני סביבה חיוניים כמו $EGO_TOP ו-$HF_TOP, ומוסיף את כלי שורת הפקודה של Symphony אל PATH של המעטפת. כדי לוודא שהסביבה מוגדרת בצורה נכונה, צריך להריץ את הפקודה הזו בכל סשן חדש של מסוף.
התקנת הפלאגין של הספק
כדי לשלב את ספק GKE עם מפעל המארחים של Symphony, מתקינים את פלאגין הספק שנבנה מראש מחבילת ה-RPM או בוחרים לבנות את הספק מקוד המקור.
התקנת פלאגין מוכן מראש של ספק
כדי להתקין את הפלאגין של הספק באמצעות חבילות RPM, צריך לבצע את השלבים הבאים במכונה הווירטואלית של המארח הראשי של Symphony:
מוסיפים את מאגר
yumעבור Google Cloud Symphony Connectors:sudo tee /etc/yum.repos.d/google-cloud-symphony-connector.repo << EOM [google-cloud-symphony-connector] name=Google Cloud Symphony Connector baseurl=https://packages.cloud.google.com/yum/repos/google-cloud-symphony-connector-x86-64 enabled=1 gpgcheck=0 repo_gpgcheck=0 gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg EOMמתקינים את חבילת הספק ל-GKE:
sudo yum install -y hf-gcpgke-provider.x86_64
התקנת ה-RPM ממקמת באופן אוטומטי את קובצי ההפעלה והסקריפטים של הספק בספריות הנכונות בשביל שירות המפעל של מארח Symphony. אחרי ההתקנה, מבנה הספריות של פלאגין הספק יופיע כך בנתיב $HF_TOP/$HF_VERSION/providerplugins/gcpgke:
├── bin
│ ├── hf-gke
│ └── README.md
└── scripts
├── getAvailableTemplates.sh
├── getRequestStatus.sh
├── getReturnRequests.sh
├── requestMachines.sh
└── requestReturnMachines.sh
בניית הספק מקוד המקור
כדי ליצור ולהתקין את קובץ ההפעלה של ה-CLI בספרייה bin של ספריית הפלאגין של הספק, פועלים לפי השלבים הבאים:
משכפלים את מאגר
symphony-gcp-connectorמ-GitHub:git clone https://github.com/GoogleCloudPlatform/symphony-gcp-connector.gitמנווטים לספרייה
hf-provider:cd PROJECT_ROOT/hf-providerמחליפים את
PROJECT_ROOTבנתיב לספרייה ברמה העליונה שמכילה את הספרייה hf-provider, לדוגמה/home/user/symphony-gcp-connector.אם לא מותקנת אצלכם גרסת
uv, צריך להתקין אותה:pip install uvיוצרים סביבה וירטואלית של Python באמצעות מנהל חבילות Python
uv:uv venvמפעילים את הסביבה הווירטואלית:
source .venv/bin/activateמתקינים את יחסי התלות הנדרשים בפרויקט:
uv pip install .מתקינים את PyInstaller, שמאגד את אפליקציית Python לקובץ הפעלה עצמאי:
uv pip install pyinstallerיוצרים את
hf-gkeCLI לאשכולות של Google Kubernetes Engine:uv run pyinstaller hf-gke.spec --cleanכדי לוודא שההתקנה בוצעה, מריצים את הפקודה
--helpעבור קובץ הפעלה. יכול להיות שתופיע שגיאה אם לא תגדירו את משתני הסביבה הנדרשים.dist/hf-gke --helpאם יוצרים את הספק באופן ידני, צריך ליצור ספריות של פלאגין ספק עבור הקובץ הבינארי והסקריפטים:
mkdir -p $HF_TOP/$HF_VERSION/providerplugins/gcpgke/bin mkdir -p $HF_TOP/$HF_VERSION/providerplugins/gcpgke/scriptsמעתיקים את הקובץ הבינארי ואת הסקריפטים אל ספריות הפלאגין של הספק.
hf-gkeקובץ ה-hf-gkeהבינארי נמצא בספרייהdist/שנוצרה על ידי PyInstaller, והסקריפטים נמצאים בספרייהscripts/gcpgke/:cp dist/hf-gke $HF_TOP/$HF_VERSION/providerplugins/gcpgke/bin/ cp scripts/gcpgke/* $HF_TOP/$HF_VERSION/providerplugins/gcpgke/scripts/אחרי ההתקנה, מבנה הספריות של פלאגין הספק יופיע כך בנתיב
$HF_TOP/$HF_VERSION/providerplugins/gcpgke:
├── bin
│ └── hf-gke
└── scripts
├── getAvailableTemplates.sh
├── getRequestStatus.sh
├── getReturnRequests.sh
├── requestMachines.sh
└── requestReturnMachines.sh
הפעלת פלאגין הספק
כדי להפעיל את פלאגין ספק GKE, צריך לרשום אותו בהגדרות של host factory.
פותחים את הקובץ
${HF_TOP}/conf/providerplugins/hostProviderPlugins.json.פקודת המקור מגדירה את משתנה הסביבה
$HF_TOPבסביבה שלכם. הערך הוא הנתיב לספריית ההתקנה ברמה העליונה של שירות המפעל של המארח IBM Spectrum Symphony.מוסיפים קטע של פלאגין ספק
gcpgke:{ "name": "gcpgke", "enabled": 1, "scriptPath": "${HF_TOP}/${HF_VERSION}/providerplugins/gcpgke/scripts/" }
הגדרת מופע של ספק
כדי להגדיר את ספק GKE לסביבה שלכם, יוצרים מופע של ספק.
אם אתם יוצרים את המחבר באופן ידני, אתם צריכים ליצור ספרייה למופע של הספק, למשל:
$HF_TOP/conf/providers/gcpgkeinst/.משתנה הסביבה
$HF_TOPמוגדר בסביבה שלכם אם הפעלתם את הסקריפטprofile.platform script. הערך הוא הנתיב לספריית ההתקנה ברמה העליונה של שירות IBM Spectrum Symphony host factory.בספרייה של מופע הספק (
$HF_TOP/conf/providers/gcpgkeinst/), יוצרים או מגדירים את הקובץgcpgkeinstprov_config.json. הקובץ הזה מכיל את התצורה הראשית של הספק.אם התקנתם את הפלאגין של הספק באמצעות חבילת ה-RPM, תוכלו להעתיק את קובץ התצורה לדוגמה ואז להתאים אותו אישית:
cp $HF_TOP/conf/providers/gcpgkeinst/gcpgkeinstprov_config.json.dist $HF_TOP/conf/providers/gcpgkeinst/gcpgkeinstprov_config.jsonאם יצרתם את הספק ממקור, צריך ליצור קובץ
gcpgkeinstprov_config.json.
בדרך כלל צריך להגדיר בקובץ הזה רק את המשתנה
GKE_KUBECONFIG, שמגדיר את הנתיב לקובץ תצורה רגיל של kubectl עבור אשכול GKE המשויך. אם לא מציינים נתיב, ברירת המחדל היאkubeconfigבספריית מופע הספק. צריך לוודא שהנתיב הזה מצביע על קובץ תצורה kubectl תקין עבור אשכול Kubernetes שמופע הספק הזה משתמש בו.דוגמה להגדרה:
{ "GKE_KUBECONFIG": "kubeconfig" }המשתנים הבאים של ההגדרות נתמכים:
שם המשתנה תיאור ערך ברירת המחדל GKE_KUBECONFIGהנתיב לקובץ התצורה שמשמש את פקודת kubectl. ללא GKE_CRD_NAMESPACE*ההגדרה מגדירה את מרחב השמות של Kubernetes שבו נוצרים כל המשאבים. gcp-symphonyGKE_CRD_GROUP*קבוצת המשאבים שמשמשת לזיהוי משאבים מותאמים אישית עבור האופרטור של GKE host factory. accenture.comGKE_CRD_VERSION*הגרסה שמשמשת לזיהוי משאבים מותאמים אישית עבור האופרטור של GKE host factory. v1GKE_CRD_KIND*השם שניתן להגדרת משאב מותאם אישית שמגדיר בקשה למשאבי מחשוב (pods). GCP Symphony ResourceGKE_CRD_SINGULAR*משמש בקריאות ל-API כשמפנים למופע של Google Cloud Symphony ResourceCR.gcp-symphony-resourceGKE_CRD_RETURN_REQUEST_KIND*השם שניתן להגדרת משאב מותאם אישית שמגדיר בקשה להחזרת משאבי מחשוב (pods). Machine Return RequestGKE_CRD_RETURN_REQUEST_SINGULAR*משמש בקריאות ל-API כשמפנים למופע יחיד של משאב מותאם אישית MachineReturnRequest.machine-return-requestGKE_REQUEST_TIMEOUTמשך הזמן בשניות שבו בקשה למישור הבקרה של GKE ממתינה לתגובה. 300LOG_LEVELקובעת את רמת הפירוט של היומן שספק GKE כותב לקובץ היומן. האפשרויות הן CRITICAL, WARNING, ERROR, INFO, DEBUG.WARNINGבאותה ספרייה, יוצרים או מגדירים את הקובץ
gcpgkeinstprov_templates.json. בקובץ הזה מוגדרות התבניות של ה-pods שהספק יכול ליצור.אם התקנתם את הפלאגין של הספק באמצעות חבילת ה-RPM, אתם יכולים להעתיק את קובץ התבניות לדוגמה ואז להתאים אותו אישית:
cp $HF_TOP/conf/providers/gcpgkeinst/gcpgkeinstprov_templates.json.dist $HF_TOP/conf/providers/gcpgkeinst/gcpgkeinstprov_templates.jsonאם יצרתם את הספק ממקור, צריך ליצור קובץ
gcpgkeinstprov_templates.json.מאפייני התבנית צריכים להיות תואמים למקורות המידע במפרט של ה-Pod. זוהי תבנית לדוגמה:
{ "templates": [ { "templateId": "template-gcp-01", "maxNumber": 5000, "attributes": { "type": [ "String", "X86_64" ], "ncores": [ "Numeric", "1" ], "ncpus": [ "Numeric", "1" ], "nram": [ "Numeric", "2048" ] }, "podSpecYaml": "pod-specs/pod-spec.yaml" } ] }
באותה ספרייה, יוצרים קובץ
kubeconfigשהוא קובץ תצורה חוקי של kubectl לאשכול Kubernetes.בספריית מופע הספק, יוצרים או עורכים את הקובץ
pod-spec.yaml. הקובץ הזה משמש כתבנית שמגדירה את המפרטים של פלטפורמות הענן של Symphony שנוצרות באשכול GKE.ה-pods שנוצרים מהמפרט הזה מתפקדים כצמתי מחשוב ונדרשת להם גישה להתקנה של Symphony. אפשר לספק את הגישה הזו דרך קובץ אימג' של קונטיינר, שכולל את ההתקנה של Symphony, או דרך טעינה של מערכת קבצים משותפת שמכילה את ההתקנה. בזמן ההפעלה, ה-pods משתמשים בגישה הזו כדי להצטרף לאשכול Symphony.
השלבים ליצירת הקובץ תלויים באופן שבו התקנתם את הספק:
אם התקנתם את הספק מחבילת RPM, מעתיקים את קובץ הדוגמה
pod-spec.yaml.distשנכלל בהתקנה:cp $HF_TOP/conf/providers/gcpgkeinst/pod-specs/pod-spec.yaml.dist $HF_TOP/conf/providers/gcpgkeinst/pod-specs/pod-spec.yamlאם יצרתם את הספק ממקור, אתם צריכים ליצור ידנית את הספרייה
pod-specsואת הקובץpod-spec.yaml:mkdir -p $HF_TOP/conf/providers/gcpgkeinst/pod-specs touch $HF_TOP/conf/providers/gcpgkeinst/pod-specs/pod-spec.yaml
אחרי שיוצרים את הקבצים האלה, מוודאים שספריית המופע של הספק נראית כך:
├── gcpgkeinstprov_config.json ├── gcpgkeinstprov_templates.json ├── kubeconfig └── pod-specs └── pod-spec.yaml
הפעלת מופע הספק
כדי להפעיל את מופע הספק, צריך להפעיל אותו בקובץ התצורה של מפעל המארחים:
פותחים את הקובץ
$HF_TOP/conf/providers/hostProviders.json.מוסיפים קטע של מופע ספק
gcpgkeinst:{ "name": "gcpgkeinst", "enabled": 1, "plugin": "gcpgke", "confPath": "${HF_CONFDIR}/providers/gcpgkeinst/", "workPath": "${HF_WORKDIR}/providers/gcpgkeinst/", "logPath": "${HF_LOGDIR}/" }אין צורך להחליף את המשתנים
${HF_CONFDIR},${HF_WORKDIR}ו-${HF_LOGDIR}בהגדרה הזו, כי הם משתני סביבה רגילים שמוגדרים אוטומטית על ידי סביבת המארח של IBM Spectrum Symphony.כשמגדירים את סשן ה-Shell על ידי הפעלת
source command, הסקריפט הזה מגדיר את המשתנים האלה כך שיצביעו על תיקיות המשנה הנכונות בהתקנה של Symphony. לאחר מכן, שירות הפקטורי (factory) של המארח משתמש במשתנים האלה כדי ליצור את הנתיבים המלאים בזמן הריצה.
הפעלת המופע של מגיש הבקשה
כדי לאפשר לרכיב ספציפי של Symphony להשתמש בספק GKE כדי להקצות משאבים, צריך להפעיל אותו עבור מבקש ההרשאות הזה.
פותחים את הקובץ
$HF_TOP/conf/requestors/hostRequestors.json.במופע המתאים של השולח, מוסיפים
gcpgkeinstלפרמטרproviders:"providers": ["gcpgkeinst"],ערך הספק צריך להיות זהה לשם הספק שבו אתם משתמשים בקטע הפעלת מופע הספק.
הפעלת שירות המארח
כדי להחיל את שינויי ההגדרות, מפעילים את שירות המארח של המפעל. במכונה הווירטואלית של המארח הראשי של Symphony, נכנסים בתור אדמין האשכול ומפעילים את השירות:
sed -i -e "s|MANUAL|AUTOMATIC|g" $EGO_ESRVDIR/esc/conf/services/hostfactory.xml
egosh user logon -u "SYMPHONY_USERNAME -x "SYMPHONY_PASSWORD
egosh service start HostFactory
מחליפים את מה שכתוב בשדות הבאים:
-
SYMPHONY_USERNAME: שם המשתמש ב-Symphony לאימות. -
SYMPHONY_PASSWORD: הסיסמה של המשתמש ב-Symphony.
בדיקת מחברים
יוצרים בקשת משאבים כדי לבדוק את הספק ב-GKE.
כדי לעשות זאת, משתמשים באחת מהשיטות הבאות:
ממשק משתמש גרפי של Symphony: הוראות ליצירת בקשה למשאב מופיעות במאמר Manually scheduling cloud host requests and returns (תזמון ידני של בקשות להקצאת מארח בענן והחזרת מארח) במסמכי IBM.
API בארכיטקטורת REST: כדי ליצור בקשת משאב באמצעות API בארכיטקטורת REST, פועלים לפי השלבים הבאים:
מאתרים את המארח והיציאה של ה-API בארכיטקטורת REST של יצירת המארחים:
egosh client view REST_HOST_FACTORY_URLהפלט אמור להיראות כך:
CLIENT NAME: REST_HOST_FACTORY_URL DESCRIPTION: http://sym2.us-central1-c.c.symphonygcp.internal:9080/platform/rest/hostfactory/ TTL : 0 LOCATION : 40531@10.0.0.33 USER : Admin CHANNEL INFORMATION: CHANNEL STATE 9 CONNECTEDכדי ליצור בקשה למשאב באמצעות API בארכיטקטורת REST, משתמשים בפקודה הבאה:
HOST=PRIMARY_HOST PORT=PORT TEMPLATE_NAME=SYMPHONY_TEMPLATE_ID PROVIDER_NAME=gcpgkeinst curl -X POST -u "SYMPHONY_USER:SYMPHONY_PASSWORD" -H "Content-Type: application/json" -d "{ \"demand_hosts\": [ { \"prov_name\": \"$PROVIDER_NAME\", \"template_name\": \"$TEMPLATE_NAME\", \"ninstances\": 1 } ] }" \ http://$HOST:$PORT/platform/rest/hostfactory/requestor/admin/requestמחליפים את מה שכתוב בשדות הבאים:
-
PRIMARY_HOST: שם המארח של המארח הראשי שלכם מהפלט של הפקודה הקודמת. -
PORT: מספר היציאה של המארח הראשי שלכם מתוך הפלט של הפקודה הקודמת, למשל9080. -
SYMPHONY_TEMPLATE_ID:templateIdשמוגדר בקובץgcpgkeinstprov_templates.json, למשלtemplate-gcp-01. -
SYMPHONY_USER: המשתמש ב-Symphony לאימות. -
SYMPHONY_PASSWORD: הסיסמה של משתמש Symphony.
אם הפעולה מצליחה, הפלט יהיה דומה לדוגמה הזו:
{"scheduled_request_id":["SD-641ef442-1f9e-40ae-ae16-90e152ed60d2"]}-