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

בדף הזה מוסבר איך ליצור אשכול משתמש באמצעות מסוף Google Cloud , ה-CLI של gcloud או Terraform.

מה זה GKE On-Prem API?

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

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

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

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

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

לפני שמתחילים

בקטע הזה מוסבר איך יוצרים אשכול משתמש באמצעות לקוחות API של GKE On-Prem.

מתן הרשאות IAM

אם אתם לא הבעלים של הפרויקט, צריך להקצות לכם את התפקיד roles/gkeonprem.admin.

כדי לגשת לדפים של Google Kubernetes Engine במסוף, צריך גם את התפקידים הבאים:

אחרי שיוצרים את האשכול, אם אתם לא Project Owner ואתם רוצים להשתמש בשער הקישור כדי להתחבר לאשכול המשתמש באמצעות שורת הפקודה, אתם צריכים את התפקידים הבאים:

  • ‫roles/gkehub.gatewayAdmin: התפקיד הזה מאפשר לגשת ל-Connect Gateway API. אם אתם צריכים רק גישת קריאה לאשכול, מספיק להשתמש ב-roles/gkehub.gatewayReader.

  • ‫roles/gkehub.viewer: התפקיד הזה מאפשר לאחזר את פרטי הכניסה לאשכול.

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

ממשקי ה-API הנדרשים של Google

חשוב לוודא שכל ממשקי ה-API הנדרשים של Google מופעלים בפרויקט המארח של ה-fleet.

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

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

דרישות מוקדמות לאשכול אדמין

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

  • גישה לשרת ה-API של Kubernetes באשכול המשתמש אחרי שהוא נוצר.

  • חיבור לרשת לכל הצמתים באשכול המשתמש אחרי שהוא נוצר.

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

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

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

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

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

  • הגרסה העדכנית של ה-CLI של gcloud.
  • ‫kubectl להרצת פקודות באשכולות של Kubernetes. אם צריך להתקין את kubectl, פועלים לפי ההוראות האלה.

יצירת אשכול משתמשים

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

אחרי שתכירו את המידע שצריך לספק כדי ליצור אשכולות, יכול להיות שיהיה לכם נוח יותר להשתמש ב-Terraform או ב-CLI של gcloud, במיוחד אם אתם מתכננים ליצור יותר מאשכול אחד. ‫Terraform הוא כלי מקובל בתחום של תשתית כקוד. אם הארגון שלכם כבר משתמש ב-Terraform, סביר להניח שתרצו להשתמש בו כדי ליצור אשכולות ולנהל את מחזור החיים של האשכולות.

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

המסוף

רוב ההגדרות במסוף תואמות לשדות בקובץ התצורה של האשכול.

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

    מעבר לדף Create a bare metal cluster

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

  3. לוחצים על Next כדי להתחיל להגדיר את האשכול.

בקטעים הבאים מוסבר איך להגדיר את אשכול המשתמשים.

מידע בסיסי על אשכולות

מזינים מידע בסיסי על האשכול.

  1. מזינים שם לאשכול המשתמשים.
  2. בקטע Admin cluster, בוחרים את אשכול האדמין מהרשימה.

  3. בשדה Google Cloud API Location, בוחרים את האזור של 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. בוחרים את הגרסה של אשכול המשתמשים. אשכולות המשתמשים חייבים להיות באותה גרסת משנה כמו אשכול האדמין, או בגרסת משנה אחת נמוכה יותר מאשכול האדמין.

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

    כשיוצרים את האשכול, ה-API של GKE On-Prem מחיל על האשכול את כללי המדיניות של בקרת גישה מבוססת-תפקידים (RBAC) של Kubernetes, כדי להקצות לכם ולמשתמשים אחרים עם הרשאת אדמין את התפקיד clusterrole/cluster-admin של Kubernetes, שנותן גישה מלאה לכל משאב באשכול בכל מרחבי השמות.

  6. בקטע Node configuration, מציינים את הפרטים הבאים:

    • Maximum Pods per node: מזינים את המספר המקסימלי של Pods שאפשר להריץ בצומת אחד. הערכים המותרים הם בין 32 ל-250, כולל. ‫Kubernetes מקצה בלוק Classless Inter-Domain Routing‏ (CIDR) לכל צומת, כדי שלכל pod תהיה כתובת IP ייחודית. הגודל של בלוק ה-CIDR תואם למספר המקסימלי של Pods לכל צומת. למידע נוסף על הגדרת המספר המקסימלי של Pods לכל צומת, קראו את המאמר רשתות של Pods ושירותים.

    • סביבת זמן ריצה של קונטיינר: containerd היא סביבת זמן הריצה היחידה של קונטיינר שזמינה לאשכול.

  7. לוחצים על Next כדי לעבור לקטע Networking.

Networking

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

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

    לוחצים על + הוספת כתובת IP לפי הצורך כדי להזין עוד כתובות IP.

  2. בקטע Load balancer, בוחרים את מאזן העומסים מהרשימה Mode כדי להגדיר אותו לאשכול. מידע נוסף זמין במאמר סקירה כללית של מאזני עומסים.

    כלול ב-MetalLB

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

    1. בקטע מאגרי צמתים של מאזן עומסים, בוחרים אחת מהאפשרויות הבאות:

      • Use control plane nodes: בוחרים באפשרות הזו כדי להריץ את מאזני העומסים באותם צמתים של מישור הבקרה.

      • Create load balancer node pool: בוחרים באפשרות המתקדמת הזו אם צריך להריץ את מאזני העומסים במאגר ייעודי של צמתים עובדים. כל הצמתים במאגר הצמתים של מאזן העומסים חייבים להיות באותה רשת משנה של שכבה 2 כמו כתובות ה-IP הווירטואליות (VIP) של מאזן העומסים, שאותן מגדירים בקטע מאגרי כתובות של מאזן העומסים.

        1. בשדה Load balancer node pool IP 1, מזינים כתובת IPv4 של צומת במאגר הצמתים של מאזן העומסים.

        2. לוחצים על ‎+ Add IP address כדי להוסיף עוד כתובות IP.

    2. בקטע Load balancer address pools, מוסיפים מאגר כתובות אחד או יותר לבקר MetalLB כדי לבחור מתוכו ולהקצות לשירותים מסוג LoadBalancer. כתובת ה-VIP של תעבורת הנתונים הנכנסת, שמציינים בקטע Virtual IPs, חייבת להיות באחד מהמאגרים האלה.

      1. מזינים שם למאגר הכתובות.

      2. מזינים טווח של כתובות IP בסימון CIDR (לדוגמה: 192.0.2.0/26) או בסימון טווח (לדוגמה: 192.0.2.64-192.0.2.72). כדי לציין כתובת IP אחת במאגר, משתמשים ב-‎/32 בסימון CIDR (לדוגמה: ‎192.0.2.1/32).

      3. אם כתובת ה-VIP של ה-Ingress לא נמצאת בטווח הכתובות, לוחצים על ‎+ Add IP Address Range ומזינים טווח כתובות אחר שכולל את כתובת ה-VIP של ה-Ingress.

        כתובות ה-IP בכל מאגר לא יכולות לחפוף, והן חייבות להיות באותה רשת משנה כמו הצמתים באשכול.

      4. בקטע Assignment of IP addresses, בוחרים אחת מהאפשרויות הבאות:

        • אוטומטי: בוחרים באפשרות הזו אם רוצים שבקר MetalLB יקצה באופן אוטומטי כתובות IP ממאגר הכתובות לשירותים מסוג LoadBalancer.
        • ידני: בוחרים באפשרות הזו אם רוצים להשתמש בכתובות מהמאגר כדי לציין באופן ידני כתובות לשירותים מסוג LoadBalancer.
      5. לוחצים על Avoid buggy IP addresses אם רוצים שבבקר MetalLB לא ייעשה שימוש בכתובות IP מהמאגר שמסתיימות ב-‎ .0 או ב-‎ .255. כך נמנעת הבעיה של מכשירים צרכניים עם באגים, שעלולים להפיל בטעות תעבורת נתונים שנשלחת לכתובות ה-IP המיוחדות האלה.

      6. כשמסיימים, לוחצים על סיום.

      7. אם צריך, לוחצים על Add Address Pool.

    מאזן עומסים ידני

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

  3. בקטע Virtual IPs, מזינים את הפרטים הבאים:

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

    • ‫Port: יציאת היעד שמשמשת לתעבורת הנתונים שנשלחת לשרת ה-API של Kubernetes. ברירת המחדל היא 443.

    • ‫Ingress VIP: כתובת ה-IP שצריך להגדיר במאזן העומסים בשביל שרת ה-proxy של Ingress. מזינים כתובת מאחד ממאגרי הכתובות של מאזן העומסים.

  4. בקטע Service and Pod CIDRs, מציינים את טווחי כתובות ה-IP של שירות Kubernetes ו-Pod בסימון CIDR. הם לא יכולים לחפוף אחד לשני, או לכל כתובת מחוץ לאשכול שרוצים להגיע אליה מתוך האשכול. מומלץ להשתמש בטווחי כתובות ה-IP הפרטיות שמוגדרים ב-RFC 1918. במסוף מופיעים טווחי הכתובות הבאים כברירת מחדל, אבל אפשר לשנות אותם:

    • ‫Service CIDR: 10.96.0.0/20 אם אתם לא מקבלים את ברירת המחדל, הזינו טווח CIDR בין ‎/24 ל-‎/12, כאשר ‎/12 מספק את המספר הגדול ביותר של כתובות IP.

    • ‫Pod CIDR: 192.168.0.0/16 אם אתם לא מקבלים את ברירת המחדל, הזינו טווח CIDR בין ‎/18 ל-‎/8, כאשר ‎/8 מספק את מספר כתובות ה-IP הגדול ביותר.

  5. בקטע Advanced attributes, אפשר לציין את הפרטים הבאים:

    • כתובת ה-URL של שרת ה-Proxy: כתובת ה-HTTP של שרת ה-Proxy. צריך לכלול את מספר היציאה גם אם הוא זהה ליציאת ברירת המחדל של הסכימה, לדוגמה: http://my-proxy.example.local:80

    • כתובות URL: רשימה מופרדת בפסיקים של כתובות IP, טווחי כתובות IP, שמות מארחים ושמות דומיינים שלא צריכים לעבור דרך שרת ה-Proxy. כש-Google Distributed Cloud שולח בקשה לאחת מהכתובות, המארחים או הדומיינים האלה, הבקשה נשלחת ישירות.

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

אחסון

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

  1. אפשר גם להגדיר את הפרטים הבאים:

    • ‫Local volume provisioner node mounts: מציין את ההגדרה של PersistentVolumes (PVs) מקומיים שמגובים בדיסקים שנטענו. צריך לפרמט ולטעון את הדיסקים האלה, ואפשר לעשות את זה לפני או אחרי שיוצרים את האשכול.

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

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

תכונות

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

יצירת מאגר צמתים במסוף

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

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

  1. בסרגל הניווט הימני, לוחצים על default pool.

  2. בקטע Node pool defaults, מזינים את השם של מאגר הצמתים בשדה Node pool name או משאירים את השם default-pool.

  3. בקטע צומתי עובד, מזינים את כתובות ה-IP של המכונות שבהן האשכול יפעל.

  4. בקטע Node pool metadata (optional), אם רוצים להוסיף תוויות וטיינטים של Kubernetes:

    1. לוחצים על ‎+ Add Kubernetes Labels. מזינים את Key ו-Value של התווית. חוזרים לפי הצורך.
    2. לוחצים על ‎+ Add Taint. מזינים את הערכים של Key,‏ Value ו-Effect של ה-taint. חוזרים לפי הצורך.
  5. לוחצים על Verify and Complete כדי ליצור את אשכול המשתמשים. יצירת אשכול המשתמשים נמשכת 15 דקות או יותר. במסוף מוצגות הודעות סטטוס בזמן שההגדרות מאומתות והאשכול נוצר במרכז הנתונים.

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

‫CLI של gcloud

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

gcloud container bare-metal clusters create

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

gcloud container bare-metal node-pools create

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

לפני שמתחילים

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

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

    gcloud components update
    
  2. מאתרים את השם ואת מיקום החברות ב-Fleet של אשכול האדמין:

    gcloud container fleet memberships list \
      --project=FLEET_HOST_PROJECT_ID
    

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

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

    NAME             EXTERNAL_ID                           LOCATION
    admin-cluster-1  bb7803b4-8438-4b22-859f-4559b4b29072  global
    admin-cluster-2  ee16ee2b-6ec0-49fc-9413-3c89cbc70854  global
    admin-cluster-3  fc2b7ef5-39ff-4b63-b919-04c5adc67be4  us-west1
    

    המיקום מציין איפה פועלים שירותי Fleet ו-Connect. אשכולות אדמין שנוצרו לפני גרסה 1.28 מנוהלים על ידי שירותי Fleet ו-Connect הגלובליים. בגרסה 1.28 ואילך, אפשר לציין את global או אזור של Google Cloud כשיוצרים את אשכול האדמין. בדוגמאות לפקודות שבהמשך, מציינים את האזור בדגל --admin-cluster-membership-location.

  3. מציגים רשימה של הגרסאות שאפשר להתקין באשכול המשתמש:

    gcloud container bare-metal clusters query-version-config \
      --admin-cluster-membership=ADMIN_CLUSTER_NAME \
      --admin-cluster-membership-project=FLEET_HOST_PROJECT_ID \
      --admin-cluster-membership-location=ADMIN_CLUSTER_REGION \
      --location=REGION
    

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

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

    • ‫FLEET_HOST_PROJECT_ID: מזהה הפרויקט שאליו רשום אשכול האדמין.

    • ‫ADMIN_CLUSTER_REGION: האזור של אשכול הניהול ב-fleet. השדה הזה יכול להיות גלובלי או אזור ב- Google Cloud. משתמשים במיקום של אשכול האדמין מהפלט של gcloud container fleet memberships list.

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

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

    versions:
    - version: 1.16.2
    - version: 1.16.1
    - version: 1.16.0
    - version: 1.15.7
    - version: 1.15.6
    - version: 1.15.5
    

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

דוגמאות

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

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

MetalLB

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

gcloud container bare-metal clusters create USER_CLUSTER_NAME \
  --project=FLEET_HOST_PROJECT_ID \
  --admin-cluster-membership=ADMIN_CLUSTER_NAME \
  --admin-cluster-membership-project=FLEET_HOST_PROJECT_ID \
  --admin-cluster-membership-location=ADMIN_CLUSTER_REGION \
  --location=REGION \
  --version=VERSION \
  --admin-users=YOUR_EMAIL_ADDRESS \
  --admin-users=ANOTHER_EMAIL_ADDRESS \
  --metal-lb-address-pools='pool=NAME,avoid-buggy-ips=True|False,manual-assign=True|False,addresses=IP_ADDRESS_RANGE_1;IP_ADDRESS_RANGE_2;...' \
  --control-plane-node-configs='node-ip=CP_IP_ADDRESS_1,labels=CP_KEY_1.1=CP_VALUE_1.1;CP_KEY_1.2=CP_VALUE_1.2;...' \
  --control-plane-vip=CONTROL_PLANE_VIP \
  --control-plane-load-balancer-port=CONTROL_PLANE_LB_PORT \
  --ingress-vip=INGRESS_VIP \
  --island-mode-service-address-cidr-blocks=SERVICE_CIDR_BLOCK \
  --island-mode-pod-address-cidr-blocks=POD_CIDR_BLOCK \
  --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

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

  • ‫USER_CLUSTER_NAME: שם לבחירתכם לאשכול המשתמש. אי אפשר לשנות את השם אחרי שיוצרים את האשכול. השם צריך:
    • לכלול עד 40 תווים
    • להכיל רק תווים אלפאנומריים באותיות קטנות או מקף (-)
    • להתחיל באות
    • להסתיים בתו אלפאנומרי
  • ‫FLEET_HOST_PROJECT_ID: מזהה הפרויקט שבו רוצים ליצור את האשכול. הפרויקט שצוין משמש גם כפרויקט המארח של הצי. זה צריך להיות אותו פרויקט שאליו רשום אשכול האדמין. אחרי שיוצרים את אשכול המשתמש, הוא נרשם באופן אוטומטי ל-fleet של הפרויקט שנבחר. אי אפשר לשנות את הפרויקט המארח של ה-fleet אחרי שיוצרים את האשכול.
  • ‫ADMIN_CLUSTER_NAME: השם של אשכול האדמין שמנהל את אשכול המשתמש. בדגל --admin-cluster-membership, אפשר להשתמש בשם המלא של האשכול, בפורמט הבא:
        projects/FLEET_HOST_PROJECT_ID/locations/ADMIN_CLUSTER_REGION/memberships/ADMIN_CLUSTER_NAME

    לחלופין, אפשר להגדיר את --admin-cluster-membership לשם של אשכול האדמין, כמו בפקודה לדוגמה. כשמשתמשים רק בשם של אשכול האדמין, צריך להגדיר את מזהה הפרויקט של אשכול האדמין באמצעות --admin-cluster-membership-project ואת המיקום באמצעות --admin-cluster-membership-location. המיקום של אשכול האדמין הוא global או אזור Google Cloud . אם אתם צריכים למצוא את האזור, הריצו את הפקודה gcloud container fleet memberships list.

  • ‫REGION: האזור ב- Google Cloud שבו פועלים GKE On-Prem API‏ (gkeonprem.googleapis.com), שירות Fleet‏ (gkehub.googleapis.com) ושירות Connect‏ (gkeconnect.googleapis.com). מציינים את us-west1 או אזור נתמך אחר. אי אפשר לשנות את האזור אחרי שיוצרים את האשכול. ההגדרה הזו מציינת את האזור שבו מאוחסנים הפריטים הבאים:
    • המטא-נתונים של אשכול המשתמשים שנדרשים ל-GKE On-Prem API כדי לנהל את מחזור החיים של האשכול.
    • נתוני Cloud Logging ו-Cloud Monitoring של רכיבי המערכת
    • יומן הביקורת של האדמין שנוצר על ידי יומני הביקורת של Cloud

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

  • ‫VERSION: הגרסה של Google Distributed Cloud באשכול המשתמש.
  • ‫YOUR_EMAIL_ADDRESS ו-ANOTHER_EMAIL_ADDRESS: אם לא תכללו את הדגל --admin-users, כיוצרי האשכול תקבלו כברירת מחדל הרשאות אדמין באשכול. אבל אם אתם כוללים את --admin-users כדי להגדיר משתמש אחר כאדמין, אתם מבטלים את ברירת המחדל וצריכים לכלול גם את כתובת האימייל שלכם וגם את כתובת האימייל של האדמין האחר. לדוגמה, כדי להוסיף שני אדמינים:
        --admin-users=sara@example.com \
        --admin-users=amal@example.com

    אחרי שהאשכול נוצר, GKE On-Prem API מחיל על האשכול את כללי המדיניות של בקרת גישה מבוססת-תפקידים (RBAC) ב-Kubernetes, כדי להקצות לכם ולמשתמשים אחרים עם הרשאת אדמין את התפקיד clusterrole/cluster-admin ב-Kubernetes, שנותן גישה מלאה לכל משאב באשכול בכל מרחבי השמות.

מאגרי כתובות של MetalLB

  • ‫--metal-lb-address-pools: הגדרת מאגרי הכתובות שבהם ישתמש מאזן העומסים MetalLB. הערך של הדגל הוא בפורמט הבא:
'pool=NAME,avoid-buggy-ips=True|False,manual-assign=True|False,addresses=IP_ADDRESS_RANGE_1;IP_ADDRESS_RANGE_2;...' \

הערך כולל פלחים שמתחילים במילות המפתח pool,‏ avoid-buggy-ip,‏ manual-assign ו-addresses. מפרידים בין הפלחים באמצעות פסיקים.

  • ‫pool: שם המאגר שבחרתם.

  • ‫avoid-buggy-ips: אם מגדירים את הערך True, בקר MetalLB לא מקצה לשירותים כתובות IP שמסתיימות ב-‎ .0 או ב-‎ .255. כך נמנעת הבעיה של מכשירים צרכניים עם באגים, שעלולים להפיל בטעות תנועה שנשלחת לכתובות ה-IP המיוחדות האלה. אם לא מציינים ערך, ברירת המחדל היא False.

  • ‫manual-assign: אם אתם לא רוצים שבקר MetalLB יקצה באופן אוטומטי כתובות IP מהמאגר הזה לשירותים, הגדירו את הערך True. לאחר מכן, מפתח יכול ליצור שירות מסוג LoadBalancer ולציין באופן ידני את אחת מהכתובות במאגר. אם לא מציינים ערך, manual-assign מוגדר כ-False.

  • ברשימה של addresses: כל כתובת צריכה להיות טווח בפורמט CIDR או בפורמט של טווח עם מקפים. כדי לציין כתובת IP אחת במאגר (למשל, ל-VIP של תעבורת הנתונים הנכנסת), משתמשים ב-‎/32 בסימון CIDR (למשל, ‫192.0.2.1/32).

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

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

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

--metal-lb-address-pools='pool=pool1,avoid-buggy-ips=False,manual-assign=True,addresses=192.0.2.0/26;192.0.2.64-192.0.2.72'
--metal-lb-address-pools='pool=pool2,avoid-buggy-ips=True,manual-assign=True,addresses=10.251.133.0/24;10.251.134.80/32'

צומתי MetalLB

  • אופציונלי: --metal-lb-load-balancer-node-configs: כברירת מחדל, מאזן העומסים פועל באותם צמתים כמו מישור הבקרה. אם אתם צריכים להריץ את מאזן העומסים במאגר ייעודי של צומתי עובדים, ציינו את הדגל הזה לכל צומת. כל הצמתים במאגר הצמתים של מאזן העומסים צריכים להיות באותו רשת משנה של שכבה 2 כמו כתובות ה-VIP של מאזן העומסים.

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

    'node-ip=LB_IP_ADDRESS_1,labels=LB_KEY_1.1=LB_VALUE_1.1;LB_KEY_1.2=LB_VALUE_1.2;...' \
    

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

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

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

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

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

    אם מציינים את --metal-lb-load-balancer-node-configs, אפשר לכלול את הדגלים הבאים:

    • ‫--metal-lb-load-balancer-node-labels: משתמשים בדגל הזה כדי להוסיף תוויות לכל הצמתים במאגר הצמתים של מאזן העומסים. מפרידים בין צמדי המפתח=ערך באמצעות פסיק.

      --metal-lb-load-balancer-node-labels=KEY_1=VALUE_1,KEY_2=VALUE_2
      
    • ‫--metal-lb-load-balancer-node-taints: משתמשים בדגל הזה כדי להוסיף taints לכל הצמתים במאגר הצמתים של מאזן העומסים. כל taint הוא צמד של key=value שמשויך להשפעה, שיכולה להיות אחת מהאפשרויות הבאות: PreferNoSchedule,‏ NoSchedule או NoExecute.

      --metal-lb-load-balancer-node-taints=KEY_1=VALUE_1:EFFECT_1,KEY_2=VALUE_2:EFFECT_2
      

    בדוגמה הבאה מוסיפים שלושה צמתים למאגר הצמתים של מאזן העומסים. כל הצמתים מסומנים בתווית lb-pool-key=lb-pool-value ויש להם את הטיינט dedicated=experimental:PreferNoSchedule,

    --metal-lb-load-balancer-node-configs='node-ip=192.0.2.1' \
    --metal-lb-load-balancer-node-configs='node-ip=192.0.2.2,labels=key2.1=value2.1' \
    --metal-lb-load-balancer-node-configs='node-ip=192.0.2.3,labels=key3.1=value3.1;key3.2=value3.2' \
    --metal-lb-load-balancer-node-labels=lb-pool-key=lb-pool-value \
    --metal-lb-load-balancer-node-taints=dedicated=experimental:PreferNoSchedule \
    

צמתים של מישור הבקרה

  • ‫--control-plane-node-configs: כתובת ה-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-labels: משתמשים בדגל הזה כדי להוסיף תוויות לכל הצמתים של מישור הבקרה. צריך להפריד בין צמדי מפתח=ערך באמצעות פסיק.
      --control-plane-node-labels=KEY_1=VALUE_1,KEY_2=VALUE_2
  • ‫--control-plane-node-taints: משתמשים בדגל הזה כדי להוסיף taints לכל הצמתים של מישור הבקרה. כל taint הוא צמד של key=value שמשויך להשפעה, שיכולה להיות אחת מהאפשרויות הבאות: PreferNoSchedule,‏ NoSchedule או NoExecute.

    בדוגמה הבאה מוסיפים שלושה צמתים לצומתי מישור הבקרה. כל הצמתים מסומנים בתווית cp-node-pool-key=cp-node-pool-value ויש להם את הטיינט dedicated=experimental:PreferNoSchedule.

      --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-planer-node-configs='node-ip=192.0.2.3,labels=key3.1=value3.1;key3.2=value3.2' \
      --control-plane-node-labels=cp-node-pool-key=cp-node-pool-value \
      --control-plane-node-taints=dedicated=experimental:PreferNoSchedule \

כתובות IP וירטואליות

  • ‫CONTROL_PLANE_VIP: כתובת ה-IP שבחרתם להגדיר במאזן העומסים לשרת ה-API של Kubernetes באשכול המשתמש.

    לדוגמה: --control-plane-vip=203.0.113.3

  • ‫CONTROL_PLANE_LB_PORT: היציאה שבה מאזן העומסים משרת את שרת ה-API של Kubernetes.

    לדוגמה: -control-plane-load-balancer-port=443

  • ‫INGRESS_VIP: כתובת ה-IP שבחרתם להגדיר במאזן העומסים בשביל שרת ה-proxy של תעבורת הנתונים הנכנסת.

    לדוגמה: --ingress-vip=10.251.134.80

    כתובת ה-IP של ה-VIP של הכניסה חייבת להיות באחד ממאגרי הכתובות של MetalLB.

CIDR של שירות ו-Pod

  • ‫SERVICE_CIDR_BLOCK: טווח של כתובות IP בפורמט CIDR, שישמשו לשירותים באשכול. טווח ה-CIDR חייב להיות בין ‎/24 ל-‎/12, כאשר ‎/12 מספק את מספר כתובות ה-IP הגדול ביותר.

    לדוגמה: --island-mode-service-address-cidr-blocks=10.96.0.0/20

  • ‫POD_CIDR_BLOCK: טווח של כתובות IP בפורמט CIDR, שישמשו לפודים באשכול. טווח ה-CIDR חייב להיות בין ‎/18 ל-‎/8, כאשר ‎/8 מספק את מספר כתובות ה-IP הגדול ביותר.

    לדוגמה: --island-mode-pod-address-cidr-blocks=192.168.0.0/16

אחסון

  1. ‫--lvp-share-path: הנתיב של המכונה המארחת שבו אפשר ליצור ספריות משנה. נוצר PersistentVolume‏ (PV) מקומי לכל ספריית משנה.
  2. ‫--lvp-share-storage-class: זהו ה-StorageClass שמשמש ליצירת אמצעי אחסון קבועים. ה-StorageClass נוצר במהלך יצירת האשכול.
  3. ‫--lvp-node-mounts-config-path: הנתיב של המכונה המארחת שבו אפשר למצוא דיסקים שנטענו. לכל טעינה נוצר PersistentVolume‏ (PV) מקומי.
  4. ‫--lvp-node-mounts-config-storage: סוג האחסון שבו נוצרים אמצעי האחסון הקבועים במהלך יצירת האשכול.

מידע נוסף על אחסון זמין במאמר הגדרת אחסון מקומי.

גלילה ידנית

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

אם צריך, גוללים כדי למלא את הפלייסהולדר ADMIN_CLUSTER_NAME של הדגל --admin-cluster-membership.

gcloud container bare-metal clusters create USER_CLUSTER_NAME \
  --project=FLEET_HOST_PROJECT_ID \
  --admin-cluster-membership=ADMIN_CLUSTER_NAME \
  --admin-cluster-membership-project=FLEET_HOST_PROJECT_ID \
  --admin-cluster-membership-location=ADMIN_CLUSTER_REGION \
  --location=REGION \
  --version=VERSION \
  --admin-users=YOUR_EMAIL_ADDRESS \
  --admin-users=ANOTHER_EMAIL_ADDRESS \
  --enable-manual-lb \
  --control-plane-node-configs='node-ip=CP_IP_ADDRESS_1,labels=CP_KEY_1.1=CP_VALUE_1.1;CP_KEY_1.2=CP_VALUE_1.2;...' \
  --control-plane-vip=CONTROL_PLANE_VIP \
  --control-plane-load-balancer-port=CONTROL_PLANE_LB_PORT \
  --ingress-vip=INGRESS_VIP \
  --island-mode-service-address-cidr-blocks=SERVICE_CIDR_BLOCK \
  --island-mode-pod-address-cidr-blocks=POD_CIDR_BLOCK \
  --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

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

  • ‫USER_CLUSTER_NAME: שם לבחירתכם לאשכול המשתמש. אי אפשר לשנות את השם אחרי שיוצרים את האשכול. השם צריך:
    • לכלול עד 40 תווים
    • להכיל רק תווים אלפאנומריים באותיות קטנות או מקף (-)
    • להתחיל באות
    • להסתיים בתו אלפאנומרי
  • ‫FLEET_HOST_PROJECT_ID: מזהה הפרויקט שבו רוצים ליצור את האשכול. הפרויקט שצוין משמש גם כפרויקט המארח של הצי. זה צריך להיות אותו פרויקט שאליו רשום אשכול האדמין. אחרי שיוצרים את אשכול המשתמש, הוא נרשם באופן אוטומטי ל-fleet של הפרויקט שנבחר. אי אפשר לשנות את הפרויקט המארח של ה-fleet אחרי שיוצרים את האשכול.
  • ‫ADMIN_CLUSTER_NAME: השם של אשכול האדמין שמנהל את אשכול המשתמש. בדגל --admin-cluster-membership, אפשר להשתמש בשם המלא של האשכול, בפורמט הבא:
        projects/FLEET_HOST_PROJECT_ID/locations/ADMIN_CLUSTER_REGION/memberships/ADMIN_CLUSTER_NAME

    לחלופין, אפשר להגדיר את --admin-cluster-membership לשם של אשכול האדמין, כמו בפקודה לדוגמה. כשמשתמשים רק בשם של אשכול האדמין, צריך להגדיר את מזהה הפרויקט של אשכול האדמין באמצעות --admin-cluster-membership-project ואת המיקום באמצעות --admin-cluster-membership-location. המיקום של אשכול האדמין הוא global או אזור Google Cloud . אם אתם צריכים למצוא את האזור, הריצו את הפקודה gcloud container fleet memberships list.

  • ‫REGION: האזור ב- Google Cloud שבו פועלים GKE On-Prem API‏ (gkeonprem.googleapis.com), שירות Fleet‏ (gkehub.googleapis.com) ושירות Connect‏ (gkeconnect.googleapis.com). מציינים את us-west1 או אזור נתמך אחר. אי אפשר לשנות את האזור אחרי שיוצרים את האשכול. ההגדרה הזו מציינת את האזור שבו מאוחסנים הפריטים הבאים:
    • המטא-נתונים של אשכול המשתמשים שנדרשים ל-GKE On-Prem API כדי לנהל את מחזור החיים של האשכול.
    • נתוני Cloud Logging ו-Cloud Monitoring של רכיבי המערכת
    • יומן הביקורת של האדמין שנוצר על ידי יומני הביקורת של Cloud

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

  • ‫VERSION: הגרסה של Google Distributed Cloud באשכול המשתמש.
  • ‫YOUR_EMAIL_ADDRESS ו-ANOTHER_EMAIL_ADDRESS: אם לא תכללו את הדגל --admin-users, כיוצרי האשכול תקבלו כברירת מחדל הרשאות אדמין באשכול. אבל אם אתם כוללים את --admin-users כדי להגדיר משתמש אחר כאדמין, אתם מבטלים את ברירת המחדל וצריכים לכלול גם את כתובת האימייל שלכם וגם את כתובת האימייל של האדמין האחר. לדוגמה, כדי להוסיף שני אדמינים:
        --admin-users=sara@example.com \
        --admin-users=amal@example.com

    אחרי שהאשכול נוצר, GKE On-Prem API מחיל על האשכול את כללי המדיניות של בקרת גישה מבוססת-תפקידים (RBAC) ב-Kubernetes, כדי להקצות לכם ולמשתמשים אחרים עם הרשאת אדמין את התפקיד clusterrole/cluster-admin ב-Kubernetes, שנותן גישה מלאה לכל משאב באשכול בכל מרחבי השמות.

צמתים של מישור הבקרה

  • ‫--control-plane-node-configs: כתובת ה-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-labels: משתמשים בדגל הזה כדי להוסיף תוויות לכל הצמתים של מישור הבקרה. צריך להפריד בין צמדי מפתח=ערך באמצעות פסיק.
      --control-plane-node-labels=KEY_1=VALUE_1,KEY_2=VALUE_2
  • ‫--control-plane-node-taints: משתמשים בדגל הזה כדי להוסיף taints לכל הצמתים של מישור הבקרה. כל taint הוא צמד של key=value שמשויך להשפעה, שיכולה להיות אחת מהאפשרויות הבאות: PreferNoSchedule,‏ NoSchedule או NoExecute.

    בדוגמה הבאה מוסיפים שלושה צמתים לצומתי מישור הבקרה. כל הצמתים מסומנים בתווית cp-node-pool-key=cp-node-pool-value ויש להם את הטיינט dedicated=experimental:PreferNoSchedule.

      --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-planer-node-configs='node-ip=192.0.2.3,labels=key3.1=value3.1;key3.2=value3.2' \
      --control-plane-node-labels=cp-node-pool-key=cp-node-pool-value \
      --control-plane-node-taints=dedicated=experimental:PreferNoSchedule \

כתובות IP וירטואליות

  • ‫CONTROL_PLANE_VIP: כתובת ה-IP שבחרתם להגדיר במאזן העומסים לשרת ה-API של Kubernetes באשכול המשתמש.

    לדוגמה: --control-plane-vip=203.0.113.3

  • ‫CONTROL_PLANE_LB_PORT: היציאה שבה מאזן העומסים משרת את שרת ה-API של Kubernetes.

    לדוגמה: -control-plane-load-balancer-port=443

  • ‫INGRESS_VIP: כתובת ה-IP שבחרתם להגדיר במאזן העומסים בשביל שרת ה-proxy של תעבורת הנתונים הנכנסת.

    לדוגמה: --ingress-vip=10.251.134.80

    כתובת ה-IP של ה-VIP של הכניסה חייבת להיות באחד ממאגרי הכתובות של MetalLB.

CIDR של שירות ו-Pod

  • ‫SERVICE_CIDR_BLOCK: טווח של כתובות IP בפורמט CIDR, שישמשו לשירותים באשכול. טווח ה-CIDR חייב להיות בין ‎/24 ל-‎/12, כאשר ‎/12 מספק את מספר כתובות ה-IP הגדול ביותר.

    לדוגמה: --island-mode-service-address-cidr-blocks=10.96.0.0/20

  • ‫POD_CIDR_BLOCK: טווח של כתובות IP בפורמט CIDR, שישמשו לפודים באשכול. טווח ה-CIDR חייב להיות בין ‎/18 ל-‎/8, כאשר ‎/8 מספק את מספר כתובות ה-IP הגדול ביותר.

    לדוגמה: --island-mode-pod-address-cidr-blocks=192.168.0.0/16

אחסון

  1. ‫--lvp-share-path: הנתיב של המכונה המארחת שבו אפשר ליצור ספריות משנה. נוצר PersistentVolume‏ (PV) מקומי לכל ספריית משנה.
  2. ‫--lvp-share-storage-class: זהו ה-StorageClass שמשמש ליצירת אמצעי אחסון קבועים. ה-StorageClass נוצר במהלך יצירת האשכול.
  3. ‫--lvp-node-mounts-config-path: הנתיב של המכונה המארחת שבו אפשר למצוא דיסקים שנטענו. לכל טעינה נוצר PersistentVolume‏ (PV) מקומי.
  4. ‫--lvp-node-mounts-config-storage: סוג האחסון שבו נוצרים אמצעי האחסון הקבועים במהלך יצירת האשכול.

מידע נוסף על אחסון זמין במאמר הגדרת אחסון מקומי.

לפני שמריצים את הפקודה gcloud כדי ליצור את האשכול, כדאי לכלול את --validate-only כדי לאמת את ההגדרות שציינתם בדגלים של הפקודה 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

יצירת אשכול המשתמשים נמשכת 15 דקות או יותר. אפשר לראות את אשכול ה-GKE במסוף Google Cloud בדף GKE clusters.

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

יצירת מאגר צמתים

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

gcloud container bare-metal node-pools create NODE_POOL_NAME \
  --cluster=USER_CLUSTER_NAME \
  --project=FLEET_HOST_PROJECT_ID \
  --location=REGION \
  --node-configs='node-ip=NP_IP_ADDRESS_1,labels=NP_KEY_1.1=NP_VALUE_1.1;NP_KEY_1.2=NP_VALUE_1.2;...'

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

  • ‫NODE_POOL_NAME: שם לבחירתכם למאגר הצמתים. השם צריך:

    • לכלול עד 40 תווים
    • להכיל רק תווים אלפאנומריים באותיות קטנות או מקף (-)
    • להתחיל באות
    • להסתיים בתו אלפאנומרי
  • ‫USER_CLUSTER_NAME: השם של אשכול המשתמש החדש שנוצר.

  • ‫FLEET_HOST_PROJECT_ID: מזהה הפרויקט שהאשכול רשום בו.

  • ‫REGION: האזור ( Google Cloud ) שציינתם כשיצרתם את האשכול.

  • ‫--node-configs: כתובת ה-IPv4 של מכונת צומת עובד. צריך לציין את הדגל הזה לכל צומת. הערך של הדגל הוא בפורמט הבא:

    'node-ip=NP_IP_ADDRESS_1,labels=NP_KEY_1.1=NP_VALUE_1.1;NP_KEY_1.2=NP_VALUE_1.2;...' \
    

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

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

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

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

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

    אפשר גם לציין את הפרטים הבאים:

    • ‫--node-labels=KEY=VALUE,...: רשימה מופרדת בפסיקים של תוויות Kubernetes (צמדי מפתח=ערך) שחלות על כל צומת במאגר.

    • --node-taints=KEY=VALUE:EFFECT,... רשימה מופרדת בפסיקים של Kubernetes taints שחלים על כל צומת במאגר. Taints הם צמדי מפתח=ערך שמשויכים לאפקט. הכתמות משמשות עם סבילות לתזמון Pod. צריך לציין אחת מהאפשרויות הבאות בשביל EFFECT: NoSchedule, PreferNoSchedule, NoExecute.

בדוגמה הבאה נוצר מאגר צמתים בשם default-pool ב-user-cluster-, ונוספים שני צמתים למאגר הצמתים. כל שני הצמתים מסומנים בתווית node-pool-key=node-pool-value ויש להם את הכתם dedicated=experimental:PreferNoSchedule,

gcloud container bare-metal node-pools create default-pool \
  --cluster=user-cluster-1  \
  --project=example-project-12345 \
  --location=us-west1 \
  --node-configs='node-ip=10.200.0.10' \
  --node-configs='node-ip=10.200.0.11,labels=key2.1=value2.1' \
  --node-labels=node-pool-key=node-pool-value \
  --node-taints=dedicated=experimental:PreferNoSchedule

למידע נוסף, קראו את מדריך העזר ל-CLI של gcloud.

Terraform

לפני שמתחילים

הגרסה של תוכנת Google Distributed Cloud ל-bare metal בלבד שבוחרים כשיוצרים אשכול משתמשים, צריכה להיות גרסה שנתמכת באשכול האדמין. בנוסף, גרסאות התיקון או הגרסאות המשניות האחרונות לא זמינות ב-GKE On-Prem API עד 7 עד 14 ימים אחרי ההשקה. אפשר להריץ פקודת gcloud כדי לקבל רשימה של גרסאות נתמכות שבהן אפשר להשתמש כדי להתקין את אשכול המשתמשים.

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

    gcloud components update
    
  2. מאתרים את השם ואת מיקום החברות ב-Fleet של אשכול האדמין:

    gcloud container fleet memberships list \
      --project=FLEET_HOST_PROJECT_ID
    

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

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

    NAME             EXTERNAL_ID                           LOCATION
    admin-cluster-1  bb7803b4-8438-4b22-859f-4559b4b29072  global
    admin-cluster-2  ee16ee2b-6ec0-49fc-9413-3c89cbc70854  global
    admin-cluster-3  fc2b7ef5-39ff-4b63-b919-04c5adc67be4  us-west1
    

    המיקום מציין איפה פועלים שירותי Fleet ו-Connect. אשכולות אדמין שנוצרו לפני גרסה 1.28 מנוהלים על ידי שירותי Fleet ו-Connect הגלובליים. בגרסה 1.28 ואילך, אפשר לציין את global או אזור של Google Cloud כשיוצרים את אשכול האדמין. בפקודות לדוגמה שבהמשך, מציינים את האזור בדגל --admin-cluster-membership-location.

  3. מציגים רשימה של הגרסאות שאפשר להתקין באשכול המשתמש:

    gcloud container bare-metal clusters query-version-config \
      --admin-cluster-membership=ADMIN_CLUSTER_NAME \
      --admin-cluster-membership-project=FLEET_HOST_PROJECT_ID \
      --admin-cluster-membership-location=ADMIN_CLUSTER_REGION \
      --location=REGION
    

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

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

    • ‫FLEET_HOST_PROJECT_ID: מזהה הפרויקט שאליו רשום אשכול האדמין.

    • ‫ADMIN_CLUSTER_REGION: האזור של אשכול הניהול ב-fleet. השדה הזה יכול להיות גלובלי או אזור ב- Google Cloud. משתמשים במיקום של אשכול האדמין מהפלט של gcloud container fleet memberships list.

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

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

    versions:
    - version: 1.16.2
    - version: 1.16.1
    - version: 1.16.0
    - version: 1.15.7
    - version: 1.15.6
    - version: 1.15.5
    

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

דוגמה

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

הגדרת משתנים ב-terraform.tfvars

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

  1. משכפלים את המאגר anthos-samples ועוברים לספרייה שבה נמצאת הדוגמה של Terraform:

    git clone https://github.com/GoogleCloudPlatform/anthos-samples
    cd anthos-samples/anthos-onprem-terraform/abm_user_cluster_metallb
    

    הדוגמה מספקת קובץ משתנים לדוגמה שאפשר להעביר אל main.tf.

  2. יוצרים עותק של הקובץ terraform.tfvars.sample:

    cp terraform.tfvars.sample terraform.tfvars
    
  3. משנים את ערכי הפרמטרים בקובץ terraform.tfvars ושומרים את הקובץ.

    
    project_id          = "PROJECT_ID"
    region              = "ON_PREM_API_REGION"
    admin_cluster_name  = "ADMIN_CLUSTER_NAME"
    bare_metal_version  = "VERSION"
    admin_user_emails   = ["YOUR_EMAIL_ADDRESS", "ADMIN_2_EMAIL_ADDRESS"]
    cluster_name        = "abm-user-cluster-metallb"
    control_plane_ips   = ["10.200.0.4"]
    worker_node_ips     = ["10.200.0.5", "10.200.0.6"]
    control_plane_vip   = "10.200.0.50"
    ingress_vip         = "10.200.0.51"
    lb_address_pools    = [
        { name = "lbpool_1", addresses = ["10.200.0.51-10.200.0.70"] }
    ]
    

    ברשימה הבאה מתוארים המשתנים:

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

    • ‫region: האזור ב- Google Cloud שבו פועלים GKE On-Prem API‏ (gkeonprem.googleapis.com), שירות Fleet‏ (gkehub.googleapis.com) ושירות Connect‏ (gkeconnect.googleapis.com). צריך לציין את us-west1 או אזור נתמך אחר.

    • ‫admin_cluster_name: השם של אשכול האדמין שמנהל את אשכול המשתמש. בדוגמה הזו, האזור של אשכול האדמין הוא global. אם יש לכם אשכול אדמין אזורי:

      1. פותחים את main.tf בכלי לעריכת טקסט.

      2. מחפשים את admin_cluster_membership, שנראה כך:

        admin_cluster_membership = "projects/${var.project_id}/locations/global/memberships/${var.admin_cluster_name}"
      3. משנים את global לאזור שבו משתמש אשכול האדמין ושומרים את הקובץ.

    • ‫bare_metal_version: הגרסה של Google Distributed Cloud לאשכול המשתמש. ציינו את אותה גרסה כמו של אשכול האדמין, או גרסה שאינה נמוכה יותר מגרסה משנית אחת מתחת לאשכול האדמין.

    • ‫admin_user_emails: רשימה של כתובות האימייל של המשתמשים שיקבלו הרשאות אדמין באשכול. אם אתם מתכוונים לנהל את האשכול, הקפידו להוסיף את כתובת האימייל שלכם.

      כשיוצרים את האשכול, ה-API של GKE On-Prem מחיל על האשכול את כללי המדיניות של בקרת הגישה מבוססת-התפקידים (RBAC) של Kubernetes, כדי להקצות למשתמשים עם הרשאת אדמין את התפקיד clusterrole/cluster-admin ב-Kubernetes, שנותן גישה מלאה לכל המשאבים באשכול בכל מרחבי השמות. כך המשתמשים יכולים גם להתחבר למסוף באמצעות Google Identity שלהם.

    • ‫cluster_name: שם לבחירתכם לאשכול המשתמש. אי אפשר לשנות את השם אחרי שיוצרים את האשכול. השם צריך:

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

    • ‫worker_node_ips: רשימה של כתובת IPv4 אחת או יותר למכונות של צומתי העובדים.

    • ‫control_plane_vip: כתובת ה-IP הווירטואלית (VIP) שבחרתם להגדיר במאזן העומסים לשרת ה-API של Kubernetes באשכול המשתמש.

    • ‫ingress_vip: כתובת ה-IP שבחרתם להגדיר במאזן העומסים בשביל שרת ה-proxy של Ingress.

    • ‫lb_address_pools: רשימה של מפות שמגדירות את מאגרי הכתובות שבהם ישתמש מאזן העומסים של MetalLB. כתובת ה-VIP של הכניסה חייבת להיות באחד מהמאגרים האלה.

  4. שומרים את השינויים ב-terraform.tfvars.

  5. מאתחלים ויוצרים את התוכנית ב-Terraform:

    terraform init
    

    ‫Terraform מתקין את כל הספריות הנדרשות, כמו הספק Google Cloud .

  6. בודקים את ההגדרות ומשנים אותן לפי הצורך:

    terraform plan
    
  7. מפעילים את התוכנית של Terraform כדי ליצור את אשכול המשתמש:

    terraform apply
    

    יצירת אשכול המשתמשים נמשכת 15 דקות או יותר. אפשר לראות את אשכול ה-GKE במסוף Google Cloud בדף GKE clusters.

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

כשיוצרים אשכול משתמשים במסוף, האשכול מוגדר עם כללי המדיניות של בקרת גישה מבוססת-תפקידים (RBAC) ב-Kubernetes, כדי שתוכלו להתחבר לאשכול באמצעות הזהות שלכם ב- Google Cloud . כשיוצרים אשכול משתמש באמצעות ה-CLI של gcloud, כברירת מחדל מקבלים את כללי המדיניות האלה של RBAC אם לא כוללים את הדגל --admin-users. אם אתם כוללים את --admin-users כדי להגדיר משתמש אחר כאדמין, אתם מבטלים את ברירת המחדל וצריכים לכלול גם את כתובת האימייל שלכם וגם את כתובת האימייל של האדמין האחר. למידע נוסף על כללי המדיניות הנדרשים של IAM ו-RBAC, קראו את המאמר הגדרת אימות Google Identity.

לכל האשכולות יש נקודת קצה קנונית. נקודת הקצה חושפת את שרת ה-API של Kubernetes, שמשמש את kubectl ושירותים אחרים כדי לתקשר עם מישור הבקרה של האשכול דרך יציאת TCP‏ 443. אי אפשר לגשת לנקודת הקצה הזו דרך האינטרנט הציבורי. אם יש לכם גישה לנקודת הקצה הפרטית של האשכול דרך ה-VPC, אתם יכולים להתחבר ישירות לנקודת הקצה הפרטית וליצור קובץ kubeconfig ישירות. אחרת, אתם יכולים להשתמש בשער Connect.

כדי לגשת לאשכול המשתמש משורת הפקודה, צריך קובץ kubeconfig. יש שתי דרכים לקבל קובץ kubeconfig:

  • משתמשים בשער הקישוריות כדי לגשת לאשכול ממחשב שמותקן בו Google Cloud CLI. במקרה כזה, kubectl משתמש ב-kubeconfig של שער Connect, שמעביר באופן מאובטח את התנועה לנקודת הקצה הפרטית בשמכם.

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

חשוב להמתין עד שבמסוף Google Cloud יצוין שהסטטוס של אשכול המשתמש תקין.

חיבור השער

  1. מאתחלים את ה-CLI של gcloud לשימוש עם הפרויקט המארח של ה-Fleet, או מריצים את הפקודות הבאות כדי להתחבר באמצעות חשבון Google, להגדיר את הפרויקט המארח של ה-Fleet כברירת המחדל ולעדכן רכיבים:

    gcloud auth login
    gcloud config set project PROJECT_ID
    gcloud components update
    
  2. אחזור פרטי הכניסה של האשכול שמשמשים לאינטראקציה עם Connect gateway. בפקודה הבאה, מחליפים את MEMBERSHIP_NAME בשם האשכול. בתוכנת Google Distributed Cloud לשרת פיזי בלבד, שם המינוי זהה לשם האשכול.

    gcloud container fleet memberships get-credentials MEMBERSHIP_NAME
    

    הפקודה הזו מחזירה שער ספציפי ל-Connectkubeconfig שמאפשר להתחבר לאשכול דרך השער.

אחרי שקיבלתם את פרטי הכניסה הנדרשים, אתם יכולים להריץ פקודות באמצעות kubectl כמו שאתם עושים בדרך כלל בכל אשכול Kubernetes, ולא צריך לציין את השם של הקובץ kubeconfig, לדוגמה:

kubectl get namespaces

תחנת עבודה של אדמין

משתמשים בפקודה bmctl get credentials כדי לאחזר קובץ kubeconfig לאשכול המשתמשים החדש שנוצר.

bmctl get credentials --cluster CLUSTER_NAME --admin-kubeconfig ADMIN_KUBECONFIG_PATH

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

  • ‫CLUSTER_NAME: השם של אשכול המשתמשים הרצוי.

  • ‫ADMIN_KUBECONFIG_PATH: הנתיב לקובץ kubeconfig של אשכול האדמין.

kubeconfig עם פרטי הכניסה של אשכול המשתמש נכתב בקובץ bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-TIMESTAMP-kubeconfig. הערך TIMESTAMP בשם הקובץ מציין את התאריך והשעה שבהם הקובץ נוצר.

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

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