יצירת אשכול אדמין באמצעות לקוחות GKE On-Prem API

בדף הזה מוסבר איך ליצור אשכול אדמין באמצעות מסוף Google Cloud או ה-CLI של Google Cloud ‏ (gcloud CLI). שני לקוחותGoogle Cloud סטנדרטיים אלה משתמשים ב-GKE On-Prem API כדי ליצור את האשכול.

מה זה GKE On-Prem API?

‫GKE On-Prem API הוא API שמתארח ב- Google Cloud, ומאפשר לכם לנהל את מחזור החיים של האשכולות המקומיים באמצעות Terraform ויישומים סטנדרטיים שלGoogle Cloud . ממשק ה-API של GKE On-Prem פועל בתשתית של Google Cloud. ‫Terraform, המסוף וה-CLI של gcloud הם לקוחות של ה-API, והם משתמשים ב-API כדי ליצור אשכולות במרכז הנתונים שלכם.

כדי לנהל את מחזור החיים של האשכולות, GKE On-Prem API צריך לאחסן מטא-נתונים לגבי מצב האשכול ב- Google Cloud, באמצעותGoogle Cloud האזור שציינתם כשאתם יוצרים את האשכול. הנתונים האלה מאפשרים לממשק ה-API לנהל את מחזור החיים של האשכול, והם לא כוללים נתונים ספציפיים לעומס העבודה.

כשיוצרים אשכול באמצעות לקוח GKE On-Prem API, מצייניםGoogle Cloud פרויקט. אחרי שיוצרים את האשכול, הוא נרשם אוטומטית ל-Fleet של הפרויקט שצוין. הפרויקט הזה נקרא פרויקט המארח של ה-Fleet. אי אפשר לשנות את פרויקט המארח של הצי אחרי שיוצרים את האשכול.

אם אתם מעדיפים, אתם יכולים ליצור אשכול אדמין על ידי יצירת קובץ תצורה של אשכול אדמין ושימוש ב-bmctl, כמו שמתואר במאמר יצירת אשכול אדמין.

אם רוצים להשתמש במסוף או ב-CLI של gcloud כדי לנהל את מחזור החיים של אשכולות שנוצרו באמצעות bmctl, אפשר לעיין במאמר בנושא הגדרת אשכולות לניהול באמצעות GKE On-Prem API.

הרשאות IAM

אם אתם לא בעלי הפרויקט, אתם צריכים לבקש מבעלי הפרויקט להקצות לכם את התפקידים הבאים: Google Cloud

כדי לגשת לדפים של Google Kubernetes Engine במסוף, צריך גם את ההרשאה roles/container.viewer.

מידע על הקצאת התפקידים מופיע במאמר ניהול הגישה לפרויקטים, לתיקיות ולארגונים.

גישה לשורת פקודה

אחרי שיוצרים את האשכול, אם רוצים להשתמש בשער החיבור כדי להריץ פקודות kubectl באשכול במחשבים אחרים ולא בתחנת העבודה של האדמין, צריך להתקין את כלי שורת הפקודה הבאים במחשב שבו רוצים להשתמש.

  • הגרסה העדכנית של ה-CLI של gcloud.

  • kubectl להרצת פקודות באשכולות Kubernetes. אם אתם צריכים להתקין את kubectl, אתם יכולים לפעול לפי ההוראות האלה.

בחירת הלקוח ליצירת אשכול האדמין

אפשר להשתמש במסוף או ב-CLI של gcloud כדי ליצור אשכול אדמין שמנוהל על ידי GKE On-Prem API. אם זו הפעם הראשונה שאתם מתקינים את Google Distributed Cloud (תוכנה בלבד) על שרת Bare Metal, יכול להיות שיהיה לכם קל יותר להשתמש במסוף מאשר ב-CLI של gcloud.

אחרי שתכירו טוב יותר את המידע שצריך לספק כדי ליצור אשכולות, יכול להיות שתגלו שה-CLI של gcloud נוח יותר לשימוש כי אפשר לשמור את הפקודה עם הארגומנטים שלה בקובץ טקסט. אם אתם משתמשים בכלי CI/CD, כמו Cloud Build, אתם יכולים להשתמש בפקודות gcloud כדי ליצור אשכול ולציין את הדגל --impersonate-service-account כדי לבצע את היצירה באופן אוטומטי.

דרישות מוקדמות

המסוף

  1. במסוף, נכנסים לדף Create a bare metal cluster.

    כניסה לדף Create a bare metal cluster

  2. בוחרים את Google Cloud הפרויקט שבו רוצים ליצור את האשכול. הפרויקט שנבחר משמש גם כפרויקט המארח של צי המכונות.

בדף דרישות מוקדמות מוצגות הדרישות לגבי תחנת העבודה של האדמין ומכונות הצמתים של האשכול. בעזרת הכלי לתכנון כתובות IP שבקטע דרישות רשת תוכלו לתכנן את כתובות ה-IP שנדרשות להתקנה מינימלית של אשכול אדמין אחד ואשכול משתמשים אחד.

דרישות מוקדמות ל-Admin workstation

כדי להציג את דרישות החומרה, מערכת ההפעלה והקישוריות של תחנת העבודה של האדמין, מרחיבים את הקטע הזה.

דרישות מוקדמות למכונות של צמתים באשכול

כדי להציג את דרישות החומרה, מערכת ההפעלה והקישוריות של מכונות צומת האשכול, אפשר להרחיב את הקטע הזה.

דרישות הרשת

בקטע הזה מוסבר איך לתכנן את כתובות ה-IP שנדרשות לסביבה מינימלית. אופציונלית, בקטע Node IP and Virtual IP addresses, אפשר לספק כתובת IP של צומת התחלה וכתובת IP וירטואלית (VIP), והמסוף יציג טבלה של כתובות ה-IP שאתם צריכים. כתובות ה-IP האלה לא חלות על ההגדרה של אשכול האדמין. הם נועדו לשמש כמדריך שיעזור לכם לתכנן את כתובות ה-IP שאתם צריכים להתקנה. אפשר להוריד את הטבלה לקובץ CSV ולייבא אותה לגיליון אלקטרוני או לכלי לתכנון כתובות IP, כדי להשתמש בה כנקודת התחלה למעקב אחרי כתובות ה-IP שדרושות לאשכולות.

בדיקת המשאבים ב-Google Cloud:

מוודאים שכל ממשקי Google API הנדרשים מופעלים בפרויקט המארח של צי המכונות. בנוסף, צריך להפעיל את GKE On-Prem API:

gcloud services enable --project FLEET_HOST_PROJECT_ID \
  gkeonprem.googleapis.com

מחליפים את FLEET_HOST_PROJECT_ID במזהה הפרויקט המארח של הצי.

לפני שיוצרים את האשכול, מריצים את הפקודה bmctl register bootstrap בתחנת העבודה של האדמין, כמו שמתואר במאמר הכנת סביבת האתחול. הפקודה הזו יכולה ליצור את חשבונות השירות הנדרשים עם הרשאות ה-IAM המינימליות שנדרשות ליצירת אשכול האדמין. אם אתם מעדיפים, אתם יכולים להגדיר חשבונות שירות באופן ידני.

כשמוכנים להתחיל, לוחצים על Install bootstrap environment (התקנת סביבת bootstrap) בסרגל הניווט הימני.

‫CLI של gcloud

דרישות מוקדמות שקשורות לחומרה, לרשת ולמערכת ההפעלה

כדי ליצור אשכול אדמין באמצעות לקוח GKE On-Prem API, צריך לעמוד באותם תנאים מוקדמים של חומרה, רשת ומערכת הפעלה כמו כשיוצרים את האשכול באמצעות bmctl. פרטים נוספים מופיעים במאמר בנושא דרישות מוקדמות להתקנה.

ממשקי Google APIs שנדרשים

מוודאים שכל ממשקי Google API הנדרשים מופעלים בפרויקט המארח של צי המכונות. בנוסף, צריך להפעיל את GKE On-Prem API:

gcloud services enable --project FLEET_HOST_PROJECT_ID \
  gkeonprem.googleapis.com

מחליפים את FLEET_HOST_PROJECT_ID במזהה הפרויקט המארח של הצי.

חשבונות שירות והרשאות נדרשים

לפני שיוצרים את האשכול, מריצים את הפקודה bmctl register bootstrap בתחנת העבודה של האדמין, כמו שמתואר במאמר הכנת סביבת האתחול. הפקודה הזו יכולה ליצור את חשבונות השירות הנדרשים עם הרשאות ה-IAM המינימליות שנדרשות ליצירת אשכול האדמין. אם אתם מעדיפים, אתם יכולים להגדיר חשבונות שירות באופן ידני.

תכנון כתובות IP

לפני שיוצרים את אשכול האדמין, צריך לתכנן את כתובות ה-IP של האשכולות. במאמר תכנון כתובות ה-IP יש דוגמה להקצאת כתובות IP לאשכול אדמין עם זמינות גבוהה (HA) ולשני אשכולות משתמשים עם זמינות גבוהה. גם אם אתם מתכוונים להשתמש ב-CLI של gcloud כדי ליצור את אשכול האדמין, כדאי לפעול לפי השלבים במסוף שמופיעים בקטע הזה כדי להשתמש בכלי לתכנון כתובות IP.

הכנת סביבת האתחול

לפני שיוצרים את אשכול האדמין, צריך להריץ את הפקודה bmctl register bootstrap בתחנת העבודה של האדמין. הפקודה הזו פורסת אשכול Kubernetes in Docker (kind) בתחנת העבודה של האדמין. באשכול האתחול הזה מתארחים בקרי Kubernetes שנדרשים ליצירת אשכול האדמין. כשיוצרים את אשכול האדמין, הבקרים באשכול ה-bootstrap יקצו צמתים, יריצו בדיקות קדם-הפעלה וירשמו את אשכול האדמין ב-Fleet. אחרי שהאשכול נוצר בהצלחה, אשכול האתחול נמחק אוטומטית.

המסוף

  1. מזינים שם לאשכול הניהול. שימו לב ששם אשכול ה-bootstrap נגזר משם אשכול הניהול על ידי הוספת הקידומת bootstrap-.

  2. בוחרים את הגרסה של אשכול האדמין.

  3. בשדה Google Cloud API Location (מיקום Google Cloud API), בוחרים את Google Cloud האזור מהרשימה. בהגדרה הזו מצוין האזור שבו פועלים ממשקי ה-API והשירותים הבאים:

    • ‫GKE On-Prem API ‏ (gkeonprem.googleapis.com)
    • שירות לצי רכב (gkehub.googleapis.com)
    • חיבור שירות (gkeconnect.googleapis.com)

    ההגדרה הזו קובעת גם את האזור שבו מאוחסנים:

    • מטא-נתונים של האשכול שנדרשים ל-GKE On-Prem API כדי לנהל את מחזור החיים של האשכול
    • הנתונים של רכיבי המערכת ב-Cloud Logging וב-Cloud Monitoring
    • יומן הביקורת של האדמין שנוצר על ידי יומני הביקורת של Cloud

    השם, הפרויקט והמיקום של האשכול מזהים אותו באופן ייחודי ב- Google Cloud.

  4. במסוף מוצגות הפקודות שצריך להריץ בתחנת העבודה של האדמין. כלי שורת הפקודה bmctl חייב להתאים לגרסת האשכול שאתם יוצרים. אם כבר הורדתם את הגרסה הרלוונטית של bmctl לתחנת העבודה של האדמין, לא צריך להוריד אותה שוב.

‫CLI של gcloud

  1. חשוב לעדכן את הרכיבים:

    gcloud components update
    
  2. מריצים את הפקודה הבאה כדי להיכנס באמצעות חשבון Google:

    gcloud auth login
    
  3. כדי לראות את הגרסאות הזמינות של אשכולות Bare Metal שאפשר להתקין:

    גרסת bmctl שאתם מורידים כדי ליצור את סביבת ה-bootstrap צריכה להיות זהה לגרסה שתתקינו באשכול האדמין.

    gcloud container bare-metal admin-clusters query-version-config \
      --location=REGION
    

    מחליפים את REGION ב Google Cloud אזור שבו תשתמשו כשתיצרו את האשכול. זה האזור שבו פועלים GKE On-Prem API ושירותי Fleet ו-Connect. מציינים us-west1 או אזור נתמך אחר.

יצירת אשכול האתחול

מבצעים את השלבים הבאים בתחנת העבודה של האדמין. הפקודות האלה מוצגות במסוף.

  1. מגדירים את פרטי הכניסה של המשתמש כ-Application Default Credentials‏ (ADC):

    gcloud auth application-default login
    

    פועלים לפי ההנחיות כדי לבחור את חשבון Google ל-ADC.

  2. במידת הצורך, מורידים את כלי שורת הפקודה bmctl לספריית העבודה הנוכחית.

    gcloud storage cp gs://anthos-baremetal-release/bmctl/VERSION/linux-amd64/bmctl .
    chmod a+x ./bmctl
    

    מחליפים את VERSION בגרסה של אשכול Bare Metal שרוצים להתקין. אם העתקתם את הפקודה מהמסוף, הגרסה כבר מופיעה בפקודה.

  3. יוצרים את אשכול האתחול. אתם יכולים לאפשר ל-bmctl ליצור את חשבונות השירות (SA) הנדרשים, או ליצור בעצמכם את חשבונות השירות ואת קובצי המפתחות ולהעביר אותם לפקודה bmctl register bootstrap.

bmctl יוצרת קהלים למודעות לרכישה

אם רוצים ש-bmctl ייצור את חשבונות השירות הנדרשים עם ההרשאות המינימליות שצריך כדי ליצור את אשכול האדמין, משתמשים בפקודה הבאה: הפקודה הזו מניחה ש-bmctl נמצא בספריית העבודה הנוכחית.

./bmctl register bootstrap \
  --ssh-key=YOUR_PRIVATE_KEY \
  --target-cluster-name=ADMIN_CLUSTER_NAME \
  --project-id=FLEET_HOST_PROJECT_ID

מחליפים את מה שכתוב בשדות הבאים:

אם העתקתם את הפקודה שמוצגת במסוף, השדות הבאים כבר ימולאו בשבילכם.

  • ADMIN_CLUSTER_NAME: השם של אשכול האדמין.

  • FLEET_HOST_PROJECT_ID: הפרויקט שאליו אשכול האדמין יירשם אוטומטית אחרי יצירת האשכול.

הפקודה bmctl register bootstrap יוצרת את חשבונות השירות הבאים. המפתחות של חשבון השירות מאוחסנים בספרייה bmctl-workspace/.sa-keys.

חשבון שירות מטרה תפקידי IAM
anthos-baremetal-gcr חשבון השירות הזה משמש את Google Distributed Cloud להורדת קובצי אימג' של קונטיינרים מ-Artifact Registry. ללא
anthos-baremetal-connect הסוכן Connect משתמש בחשבון השירות הזה כדי לשמור על חיבור בין האשכול שלך לבין Google Cloud. roles/gkehub.connect
anthos-baremetal-register הסוכן Connect משתמש בחשבון השירות הזה כדי לרשום את האשכולות שלכם ב-Google Cloud fleet. roles/gkehub.admin
anthos-baremetal-cloud-ops סוכן Stackdriver משתמש בחשבון השירות הזה כדי לייצא יומנים ומדדים מאשכולות אל Cloud Logging ו-Cloud Monitoring. roles/logging.logWriter
roles/monitoring.metricWriter
roles/stackdriver.resourceMetadata.writer
roles/opsconfigmonitoring.resourceMetadata.writer
roles/monitoring.dashboardEditor
roles/monitoring.viewer
roles/serviceusage.serviceUsageViewer
roles/kubernetesmetadata.publisher

ציון קובצי מפתח של חשבון שירות

אם אתם מעדיפים, אתם יכולים להעביר את קובצי המפתח של חשבון השירות bmctl שיצרתם. הפקודה הבאה משתמשת בשמות של קובצי המפתחות שמופיעים במאמר הגדרה ידנית של חשבונות שירות, ומניחה ש-bmctl וקובצי המפתחות נמצאים בספריית העבודה הנוכחית.

./bmctl register bootstrap \
  --ssh-key=YOUR_PRIVATE_KEY \
  --target-cluster-name=ADMIN_CLUSTER_NAME \
  --project-id=FLEET_HOST_PROJECT_ID \
  --gcr-service-account-key=anthos-baremetal-gcr.json \
  --gke-agent-service-account-key=connect-agent.json \
  --gke-register-service-account-key=connect-register.json \
  --cloud-operation-service-account-key=anthos-baremetal-cloud-ops.json

מחליפים את מה שכתוב בשדות הבאים:

  • YOUR_PRIVATE_KEY: הנתיב למפתח ה-SSH הפרטי. יצרתם את מפתח ה-SSH כשהגדרתם גישת SSH לרמת הבסיס (root) לצמתים.

  • ADMIN_CLUSTER_NAME: השם של אשכול האדמין.

  • FLEET_HOST_PROJECT_ID: הפרויקט שאליו אשכול האדמין יירשם אוטומטית אחרי יצירת האשכול.

הדגלים הבאים מציינים את הנתיב לקובצי המפתחות:

  • -gcr-service-account-key: הנתיב לקובץ המפתח של חשבון השירות שמושך תמונות של קונטיינרים (anthos-baremetal-gcr).

  • --gke-agent-service-account-key: הנתיב לקובץ המפתח של חשבון השירות של Connect Agent ‏ (anthos-baremetal-connect).

  • --gke-register-service-account-key: הנתיב לקובץ המפתח של חשבון השירות של Connect Agent שרושם את האשכול ב-Fleet ‏ (anthos-baremetal-register).

  • --cloud-operation-service-account-key: הנתיב לקובץ המפתח של חשבון השירות לביקורת של יומני ביקורת ולמעקב אחרי פרויקטים (anthos-baremetal-cloud-ops).

אחרי ש-bmctl יוצר בהצלחה את אשכול האתחול, מוצגת פלט שדומה לזה:

[2023-03-22 17:35:24+0000] Waiting for the temporary cluster to be registered... OK
[2023-03-22 17:35:37+0000] Please go to https://console.cloud.google.com/home/dashboard?project=example-project-12345 to create the cluster
[2023-03-22 17:35:37+0000] Waiting for preflight checks and cluster to run..

יצירת אשכול האדמין

המסוף

  1. בדף Install bootstrap environment (התקנת סביבת bootstrap), לוחצים על Check Connection (בדיקת החיבור).

    אם הפעולה מצליחה, במסוף מוצגת ההודעה Connection established.

    צריך ליצור את החיבור לאשכול bootstrap לפני שממשיכים. אם החיבור לא נוצר, צריך לבדוק את הארגומנטים שצוינו בפקודה bmctl register bootstrap:

    • מוודאים שהערך של --target-cluster-name זהה לשם אשכול האדמין שמוצג בקטע Bootstrap environment basics (היסודות של סביבת האתחול).

    • מוודאים שהערך של --project-id תואם למזהה של הפרויקט שבחרתם במסוף.

    אם אתם צריכים לשנות את שם אשכול ה-bootstrap או את מזהה הפרויקט, מזינים Ctrl-C כדי לצאת מ-bmctl register bootstrap ומריצים מחדש את הפקודה.

  2. לוחצים על הבא כדי להתחיל להגדיר את אשכול הניהול. רוב ההגדרות במסוף תואמות לשדות בקובץ התצורה של האשכול.

  3. בקטע Node configuration (הגדרת צומת), מזינים ערך בין 64 ל-250 בשדה Maximum Pods per node (מספר הפודים המקסימלי לכל צומת), או מאשרים את ברירת המחדל, 110. אחרי שיוצרים את האשכול, אי אפשר לעדכן את הערך הזה.

    גם מספר ה-Pods המקסימלי לכל צומת (שנקרא צפיפות Pods) מוגבל על ידי משאבי ה-IP הזמינים של האשכול. פרטים נוספים זמינים במאמר רשתות של Pod.

  4. לוחצים על הבא.

  5. בדף Networking (רשת), מגדירים איך הצמתים והרכיבים באשכול מתקשרים ביניהם ועם רמת הבקרה של Kubernetes.

    כדי לקבל מידע מפורט, מעבירים את הסמן מעל הסמל שליד כל שדה.

  6. לוחצים על אימות ויצירה.

    במסוף מוצגות הודעות סטטוס בזמן שההגדרות מאומתות והאשכול נוצר במרכז הנתונים.

    אם יש בעיה בהגדרה, במסוף מוצגת הודעת שגיאה שאמורה להיות ברורה מספיק כדי שתוכלו לתקן את בעיית ההגדרה ולנסות שוב ליצור את האשכול.

‫CLI של gcloud

לפני שיוצרים את אשכול האדמין, מוודאים שאשכול ה-bootstrap רשום כחבר ב-Fleet:

gcloud container fleet memberships list \
  --project=FLEET_HOST_PROJECT_ID

אם אשכול האתחול לא מופיע ברשימה, בודקים את השם של אשכול האתחול ואת מזהה הפרויקט שצוינו ב-bmctl register bootstrap. אם צריך לשנות את השם של אשכול ה-bootstrap או את מזהה הפרויקט, מזינים Ctrl-C כדי לצאת מ-bmctl register bootstrap ומריצים מחדש את הפקודה.

כדי ליצור אשכול אדמין, משתמשים בפקודה הבאה:

gcloud container bare-metal admin-clusters create

רוב הדגלים שמציינים בפקודה תואמים לשדות בקובץ ההגדרות של אשכול המשתמשים.

כדי ליצור אשכול אדמין עם מאזן העומסים בחבילה:

gcloud container bare-metal admin-clusters create ADMIN_CLUSTER_NAME \
  --project=FLEET_HOST_PROJECT_ID \
  --location=REGION \
  --version=VERSION \
  --max-pods-per-node=MAX_PODS_PER_NODE \
  --control-plane-vip=CONTROL_PLANE_VIP \
  --control-plane-load-balancer-port=CONTROL_PLANE_LOAD_BALANCER_PORT \
  --control-plane-node-configs 'CONTROL_PLANE_NODE_CONFIG' \
  --island-mode-service-address-cidr-blocks=SERVICE_ADDR_CIDR \
  --island-mode-pod-address-cidr-blocks=POD_ADDR_CIDR \
  --lvp-share-path=/mnt/localpv-share \
  --lvp-share-storage-class=local-shared \
  --lvp-node-mounts-config-path=/mnt/localpv-disk \
  --lvp-node-mounts-config-storage-class=local-disks

אם רוצים להשתמש באיזון עומסים ידני, מוסיפים --enable-manual-lb לפקודה.

מחליפים את מה שכתוב בשדות הבאים:

  • ADMIN_CLUSTER_NAME: השם של אשכול האדמין. אי אפשר לשנות את השם אחרי שיוצרים את האשכול.

  • FLEET_HOST_PROJECT_ID: הפרויקט שאליו אשכול האדמין יירשם אוטומטית אחרי יצירת האשכול. אי אפשר לשנות את פרויקט המארח של הצי אחרי שיוצרים את האשכול.

  • REGION: האזור Google Cloud שבו פועל GKE On-Prem API. מציינים us-west1 או אזור נתמך אחר. אי אפשר לשנות את האזור אחרי שיוצרים את האשכול. ההגדרה הזו מציינת את האזור שבו מאוחסנים הרכיבים הבאים:

    • המטא-נתונים של האשכול שנדרשים ל-GKE On-Prem API כדי לנהל את מחזור החיים של האשכול
    • הנתונים של רכיבי המערכת ב-Cloud Logging וב-Cloud Monitoring
    • יומן הביקורת של האדמין שנוצר על ידי יומני הביקורת של Cloud

    השם, הפרויקט והמיקום של האשכול מזהים אותו באופן ייחודי ב- Google Cloud.

  • VERSION: הגרסה של אשכול ה-Bare Metal. הגרסה צריכה להיות זהה לגרסת bmctl שבה השתמשתם כדי להריץ את bmctl register bootstrap. אפשר לבדוק את הגרסה של bmctl על ידי הפעלת bmctl version בתחנת העבודה של האדמין.

  • MAX_PODS_PER_NODE : ב клаסטרים של אדמינים, הערכים המותרים הם 32-250 ו-64-250 עבור клаסטרים שאינם HA. ערך ברירת המחדל אם הפרמטר --max-pods-per-node לא נכלל בפקודה הוא 110. אחרי שיוצרים את האשכול, אי אפשר לעדכן את הערך הזה.

    גם מספר ה-Pods המקסימלי לכל צומת (שנקרא צפיפות Pods) מוגבל על ידי משאבי ה-IP הזמינים של האשכול. פרטים נוספים זמינים במאמר רשתות של Pod.

  • CONTROL_PLANE_VIP: כתובת ה-IP הווירטואלית (VIP) במאזן העומסים של שרת Kubernetes API של האשכול. כוללים את ה-VIP של מישור הבקרה באותה רשת משנה כמו הצמתים של מאזן העומסים. אל תכללו את כתובת ה-VIP של מישור הבקרה במאגרי הכתובות של מאזן העומסים.

  • CONTROL_PLANE_LOAD_BALANCER_PORT: היציאה שבה מאזן העומסים משרת את מישור הבקרה. אפשר להגדיר ערך אחר, אבל יציאה 443 היא היציאה הסטנדרטית שמשמשת לחיבורי HTTPS.

  • CONTROL_PLANE_NODE_CONFIG: כתובת ה-IPv4 של צומת מישור הבקרה. צמתים של מישור הבקרה מריצים את עומס העבודה של המערכת. מציינים את הדגל הזה לכל צומת של מישור הבקרה. בדרך כלל, יש לכם מכונה אחת אם אתם משתמשים בפריסה מינימלית, או שלוש מכונות אם אתם משתמשים בפריסה של זמינות גבוהה (HA). כדי להשיג רוב קוורום לזמינות גבוהה, צריך לציין מספר אי-זוגי של צמתים. אפשר לשנות את הכתובות האלה בכל פעם שמעדכנים או משדרגים את האשכול.

    הערך של הדגל הוא בפורמט הבא:

    'node-ip=CP_IP_ADDRESS_1,labels=CP_KEY_1.1=CP_VALUE_1.1;CP_KEY_1.2=CP_VALUE_1.2;...' \
    

    הערך כולל פלחים שמתחילים במילות המפתח node-ip ו-labels. מפרידים בין הפלחים באמצעות פסיקים.

    • node-ip: כתובת ה-IP של צומת מישור הבקרה. אפשר לציין רק node-ip אחד לכל דגל. אם צריך לציין יותר מצומת אחד, צריך לכלול את הדגל שוב לכל צומת.

    • labels: צמד אחד או יותר של מפתח=ערך שמצורפים לצומת.

    שימו לב לכללי התחביר הבאים:

    • מקיפים את כל הערך במירכאות בודדות.
    • אסור להשתמש ברווחים.
    • מפרידים בין כל זוג מפתח=ערך בקטע labels באמצעות נקודה-פסיק.

    לדוגמה:

    --control-plane-node-configs 'node-ip=192.0.2.1' \
    --control-plane-node-configs 'node-ip=192.0.2.2,labels=key2.1=value2.1' \
    --control-plane-node-configs 'node-ip=192.0.2.3,labels=key3.1=value3.1;key3.2=value3.2' \
    
  • SERVICE_ADDR_CIDR: טווח של כתובות IPv4 בפורמט CIDR לשירותים באשכול. טווח ה-CIDR צריך להיות בין ‎/24 ל-‎ /12, כאשר ‎ /12 מספק את מספר כתובות ה-IP הגדול ביותר. מומלץ להשתמש בטווח במרחב כתובות ה-IP לאינטרנטים פרטיים, שמוגדר ב-RFC 1918, לדוגמה, 10.96.0.0/20.

  • POD_ADDR_CIDR: טווח של כתובות IPv4, בפורמט CIDR, לשימוש ב-Pods באשכול המשתמשים. טווח ה-CIDR צריך להיות בין ‎ /18 ל-‎ /8, כאשר ‎ /8 מספק את מספר כתובות ה-IP הגדול ביותר. מומלץ להשתמש בטווח במרחב כתובות ה-IP לאינטרנטים פרטיים, שמוגדר ב-RFC 1918, לדוגמה, 192.168.0.0/16.

צריך לציין את דגלי האחסון הבאים. הפקודה לדוגמה כוללת ערכים אופייניים. מידע נוסף זמין במאמר בנושא הגדרת אחסון מקומי.

  • --lvp-share-path: זהו הנתיב במכונת המארח שבו אפשר ליצור ספריות משנה. נוצר PersistentVolume (PV) מקומי לכל ספריית משנה.

  • --lvp-share-storage-class: זהו StorageClass שמשמש ליצירת נפחים מתמשכים. ה-StorageClass נוצר במהלך יצירת האשכול.

  • --lvp-node-mounts-config-path: הנתיב במכונת המארח שבו אפשר לגלות דיסקים שמוצמדים. לכל נקודת הרכבה נוצר PersistentVolume (PV) מקומי.

  • --lvp-node-mounts-config-storage: סוג האחסון שבו נוצרים כרכי PV במהלך יצירת האשכול.

לרשימה מלאה של הדגלים והתיאורים שלהם, ראו את המאמר העזר של ה-CLI של gcloud.

הפלט של הפקודה אמור להיראות כך:

Waiting for operation [projects/example-project-12345/locations/us-west1/operations/operation-1679543737105-5f7893fd5bae9-942b3f97-75e59179] to complete.

בפלט לדוגמה, המחרוזת operation-1679543737105-5f7893fd5bae9-942b3f97-75e59179 היא OPERATION_ID של הפעולה שפועלת לאורך זמן. אפשר לבדוק את סטטוס הפעולה באמצעות הפקודה הבאה:

gcloud container bare-metal operations describe OPERATION_ID \
  --project=FLEET_HOST_PROJECT_ID \
  --location=REGION

מידע נוסף זמין במאמר בנושא פעולות gcloud container bare-metal.

פתרון שגיאות בבדיקה המקדימה

לפני יצירת האשכול, bmctl מריץ סדרה של בדיקות קדם-הפעלה כדי לאמת את ההגדרה. אם יש בעיה בהגדרות, הפקודה gcloud ... create תצא עם שגיאה דומה לזו:

ERROR: (gcloud.container.bare-metal.admin-clusters.create) Invalid resource state for "projects/694677185633/locations/us-west1/bareMetalAdminClusters/abm-cluster-1": cluster preflight checks failed

לדוגמה, נניח שבדיקת Preflight נכשלה כי לא הייתה אפשרות להגיע לצומת של מישור הבקרה. בתחנת העבודה של האדמין, יופיעו נתונים שדומים לנתונים הבאים:

[2023-03-27 20:34:38+0000] Waiting for preflight check job to finish... OK
[2023-03-27 20:35:58+0000] - Validation Category: machines and network
[2023-03-27 20:35:58+0000]    - [PASSED] pod-cidr
[2023-03-27 20:35:58+0000]    - [FAILED] node-network (log: bmctl-workspace/log/register-bootstrap-20230327-201548/node-network)
[2023-03-27 20:35:58+0000]        - Failed to connect to the host via ssh: ssh: connect to host 10.100.0.5 port 22: Connection timed out
[2023-03-27 20:35:58+0000] Flushing logs... OK
[2023-03-27 20:35:58+0000] Error polling the preflight check abm-cluster-mar-27 in the cluster-abm-cluster-mar-27: preflight check failed
  1. בתחנת העבודה של האדמין, מוודאים שהתהליך bmctl register bootstrap עדיין פועל. אם לא, מריצים מחדש את הפקודה עם אותם ארגומנטים ומוסיפים את הדגל --reuse-bootstrap-cluster=true.

  2. מריצים את הפקודה gcloud ... update כדי לתקן את כתובת ה-IP הלא תקינה:

    gcloud container bare-metal admin-clusters update ADMIN_CLUSTER_NAME \
      --project=FLEET_HOST_PROJECT_ID \
      --location=REGION \
      --control-plane-node-configs 'node-ip=NEW_NODE_ID_ADDRESS'
    

    למידע נוסף, ראו gcloud container bare-metal admin-clusters update.

פרטים על תהליך יצירת האשכול מוצגים בתחנת העבודה של האדמין. אם בדיקות קדם-הפעלה עוברות בהצלחה, יופיע משהו כזה:

[2023-03-22 23:12:47+0000] Waiting for cluster kubeconfig to become ready OK
[2023-03-22 23:15:47+0000] Writing kubeconfig file
[2023-03-22 23:15:47+0000] kubeconfig of cluster being created is present at bmctl-workspace/abm-cluster-1/abm-cluster-1-kubeconfig
[2023-03-22 23:15:47+0000] Please restrict access to this file as it contains authentication credentials of your cluster.
[2023-03-22 23:15:47+0000] Waiting for cluster to become ready OK
[2023-03-22 23:20:17+0000] Please run
[2023-03-22 23:20:17+0000] kubectl --kubeconfig bmctl-workspace/abm-cluster-1/abm-cluster-1-kubeconfig get nodes
[2023-03-22 23:20:17+0000] to get cluster nodes status.
[2023-03-22 23:20:17+0000] Waiting for node pools to become ready OK
[2023-03-22 23:20:37+0000] Waiting for metrics to become ready in GCP OK
[2023-03-22 23:25:38+0000] Waiting for cluster API provider to install in the created admin cluster OK
[2023-03-22 23:25:48+0000] Moving admin cluster resources to the created admin cluster
[2023-03-22 23:25:51+0000] Waiting for node update jobs to finish OK
[2023-03-22 23:27:41+0000] Flushing logs... OK
[2023-03-22 23:27:41+0000] Deleting membership... OK
[2023-03-22 23:27:42+0000] Deleting bootstrap cluster.

חיבור לאשכול הניהול

הפקודה bmctl register bootstrap יוצרת קובץ kubeconfig עבור אשכול האדמין בתחנת העבודה של האדמין. הספרייה שבה נמצא kubeconfig ושם הקובץ מבוססים על שם אשכול האדמין באופן הבא:

bmctl-workspace/ADMIN_CLUSTER_NAME/ADMIN_CLUSTER_NAME-kubeconfig

צריך להגביל את הגישה אל kubeconfig כי הוא מכיל פרטי אימות של האשכול.

אם רוצים להשתמש בזהות Google כדי להיכנס לאשכול, אפשר להגדיר את שער החיבור באופן הבא:

  1. בתחנת העבודה של האדמין, מגדירים את משתנה הסביבה KUBECONFIG:

    export KUBECONFIG=$HOME/bmctl-workspace/ADMIN_CLUSTER_NAME/ADMIN_CLUSTER_NAME-kubeconfig
    
  2. מגדירים את ההקשר הנוכחי במשתנה סביבה:

    export CONTEXT="$(kubectl config current-context)"
    
  3. מריצים את הפקודה הבאה gcloud. הפקודה הזו מבצעת את הפעולות הבאות:

    • מעניק לחשבון המשתמש שלכם את התפקיד clusterrole/view ב-Kubernetes באשכול.
    • הפקודה מגדירה את האשכול כך שאפשר להריץ פקודות kubectl לקריאה בלבד במחשב המקומי בלי להתחבר באמצעות SSH לתחנת העבודה של האדמין.

    מחליפים את GOOGLE_ACCOUNT_EMAIL בכתובת האימייל שמשויכת לחשבון Google Cloud שלכם. לדוגמה: --users=alex@example.com.

    gcloud container fleet memberships generate-gateway-rbac  \
        --membership=ADMIN_CLUSTER_NAME \
        --role=clusterrole/view \
        --users=GOOGLE_ACCOUNT_EMAIL \
        --project=FLEET_HOST_PROJECT_ID \
        --kubeconfig=$KUBECONFIG \
        --context=$CONTEXT\
        --apply
    

    הפלט של הפקודה הזו אמור להיראות כך, והוא קוצר כדי שיהיה קל לקרוא אותו:

    Validating input arguments.
    Specified Cluster Role is: clusterrole/view
    Generated RBAC policy is:
    --------------------------------------------
    ...
    
    Writing RBAC policy for user: GOOGLE_ACCOUNT_EMAIL to cluster.
    Successfully applied the RBAC policy to cluster.
    

אחרי שמגדירים את מדיניות ה-RBAC, אפשר להיכנס לאשכול מהמסוף באמצעות הזהות שלכם ב-Google. בנוסף, אפשר להריץ פקודות kubectl לקריאה בלבד במחשבים אחרים מלבד תחנת העבודה של האדמין באמצעות kubeconfig מיוחד שמנתב בקשות דרך שער החיבור.

  1. מריצים את הפקודה הבאה במחשב שאינו תחנת העבודה של האדמין כדי לקבל את הרשומה kubeconfig שאפשר לגשת באמצעותה לאשכול דרך שער החיבור.

    gcloud container fleet memberships get-credentials ADMIN_CLUSTER_NAME \
        --project=FLEET_HOST_PROJECT_ID
    

    הפלט אמור להיראות כך:

    Starting to build Gateway kubeconfig...
    Current project_id: FLEET_HOST_PROJECT_ID
    A new kubeconfig entry "connectgateway_FLEET_HOST_PROJECT_ID_global_ADMIN_CLUSTER_NAME" has been generated and set as the current context.
    
  2. עכשיו אפשר להריץ פקודות של kubectl דרך שער החיבור:

    kubectl get pods -A
    

המאמרים הבאים