יצירת אשכול אזורי

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

אשכולות GKE Autopilot הם תמיד אזוריים.

סקירה כללית

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

באשכולות אזוריים, המשאבים משוכפלים בכמה אזורים וצורכים מיכסות נוספות.

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

בקטעים הבאים מוסבר איך:

אחרי שיוצרים אשכול אזורי, אי אפשר להמיר אותו לאשכול אזורי.

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

סקירה כללית של אפשרויות ההגדרה של אשכולים מופיעה במאמר מידע על אפשרויות ההגדרה של אשכולים, ורשימה מלאה של האפשרויות האפשריות מופיעה במדריכי העזר של gcloud container clusters create ו-Terraform google_container_cluster.

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

לפני שמתחילים, חשוב לוודא שביצעתם את הפעולות הבאות:

  • מפעילים את ממשק ה-API של Google Kubernetes Engine.
  • הפעלת Google Kubernetes Engine API
  • אם רוצים להשתמש ב-CLI של Google Cloud למשימה הזו, צריך להתקין ואז להפעיל את ה-CLI של gcloud. אם התקנתם בעבר את ה-CLI של gcloud, מריצים את הפקודה gcloud components update כדי לקבל את הגרסה העדכנית. יכול להיות שגרסאות קודמות של ה-CLI של gcloud לא יתמכו בהרצת הפקודות שמופיעות במסמך הזה.

הגדרה של חשבונות שירות ב-IAM ל-GKE

‫GKE משתמש בחשבונות שירות של IAM שמצורפים לצמתים כדי להריץ משימות מערכת כמו רישום ביומן ומעקב. לפחות, חשבונות השירות של הצמתים צריכים לקבל את התפקיד Kubernetes Engine Default Node Service Account ‏(roles/container.defaultNodeServiceAccount) בפרויקט. כברירת מחדל, GKE משתמש בחשבון השירות שמוגדר כברירת מחדל ב-Compute Engine, שנוצר באופן אוטומטי בפרויקט, כחשבון השירות של הצומת.

כדי להעניק את התפקיד roles/container.defaultNodeServiceAccount לחשבון השירות שמוגדר כברירת המחדל של Compute Engine, מבצעים את השלבים הבאים:

המסוף

  1. נכנסים לדף Welcome:

    מעבר לדף Welcome

  2. בשדה מספר הפרויקט, לוחצים על העתקה ללוח.
  3. נכנסים לדף IAM:

    כניסה לדף IAM

  4. לוחצים על Grant access.
  5. בשדה New principals, מציינים את הערך הבא:
    PROJECT_NUMBER-compute@developer.gserviceaccount.com
    מחליפים את PROJECT_NUMBER במספר הפרויקט שהעתקתם.
  6. בתפריט Select a role (בחירת תפקיד), בוחרים בתפקיד Kubernetes Engine Default Node Service Account (חשבון השירות שמשמש כברירת מחדל לצומת ב-Kubernetes Engine).
  7. לוחצים על Save.

gcloud

  1. איך מוצאים את Google Cloud מספר הפרויקט:
    gcloud projects describe PROJECT_ID \
        --format="value(projectNumber)"

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

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

    12345678901
    
  2. מקצים לחשבון השירות של Compute Engine שמוגדר כברירת מחדל את התפקיד roles/container.defaultNodeServiceAccount:
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com" \
        --role="roles/container.defaultNodeServiceAccount"

    מחליפים את PROJECT_NUMBER במספר הפרויקט מהשלב הקודם.

יצירת אשכול אזורי עם מאגר צמתים באזור יחיד

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

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

אם אתם מפתחים אפליקציות GKE באמצעות Cloud Code ל-VS Code, כדאי לנסות ליצור אשכולות באמצעות Cloud Code.

gcloud

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

gcloud config set project PROJECT_ID
# gcloud config set billing/quota_project PROJECT_ID

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

  • CLUSTER_NAME: השם של האשכול האזורי החדש.
  • CONTROL_PLANE_LOCATION: האזור של Compute Engine במישור הבקרה של האשכול. מציינים אזור, למשל us-central1.
  • COMPUTE_ZONE: האזור של מאגר הצמתים, למשל us-central1-a. האזור צריך להיות באותו אזור שבו נמצאת מישור הבקרה של האשכול.
  • CHANNEL: סוג ערוץ ההפצה, שיכול להיות אחד מהערכים הבאים: rapid, ‏regular, ‏stable או None. כברירת מחדל, האשכול רשום לערוץ ההפצה regular, אלא אם מציינים לפחות אחד מהדגלים הבאים: --cluster-version,‏ --release-channel, ‏ --no-enable-autoupgrade ו---no-enable-autorepair.
  • VERSION: הגרסה שרוצים לציין עבור האשכול.

מומלץ מאוד לציין חשבון שירות IAM עם הרשאות מינימליות, שהצמתים יוכלו להשתמש בו במקום בחשבון השירות שמוגדר כברירת מחדל של Compute Engine. במאמר שימוש בחשבון שירות עם הרשאות מינימליות מוסבר איך ליצור חשבון שירות עם הרשאות מינימליות.

כדי לציין חשבון שירות מותאם אישית ב-CLI של gcloud, מוסיפים את הדגל הבא לפקודה:

--service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com

מחליפים את SERVICE_ACCOUNT_NAME בשם של חשבון השירות עם ההרשאות המינימליות.

שימוש בערוץ הפצה ספציפי:

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

gcloud container clusters create CLUSTER_NAME \
    --location CONTROL_PLANE_LOCATION \
    --node-locations COMPUTE_ZONE \
    --release-channel CHANNEL

שימוש בגרסה ספציפית:

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

gcloud container clusters create CLUSTER_NAME \
    --location CONTROL_PLANE_LOCATION \
    --node-locations COMPUTE_ZONE \
    --cluster-version VERSION

שימוש בגרסת ברירת המחדל באשכולות שלא רשומים לערוץ הפצה:

כדי ליצור אשכול חדש באמצעות גרסת ברירת המחדל לאשכולות שלא רשומים לערוץ הפצה, לא צריך לציין גרסת אשכול, אבל צריך להגדיר את ערוץ ההפצה ל-None:

gcloud container clusters create CLUSTER_NAME \
    --location CONTROL_PLANE_LOCATION \
    --node-locations COMPUTE_ZONE \
    --release-channel None

דוגמה

הפקודה הבאה יוצרת אשכול אזורי שרשום לערוץ ההפצה regular (ברירת מחדל), עם שלושה צמתים (ברירת מחדל) באזור us-west1-c:

gcloud container clusters create my-regional-cluster \
    --location us-west1 \
    --node-locations us-west1-c

דוגמה

הפקודה הבאה יוצרת אשכול אזורי שרשום לערוץ ההפצה regular (ברירת מחדל), עם שני צמתים שממוקמים באזור us-west1-c:

gcloud container clusters create my-regional-cluster \
    --location us-west1 \
    --node-locations us-west1-c \
    --num-nodes 2

המסוף

  1. נכנסים לדף Create a Kubernetes cluster במסוף Google Cloud .

    מעבר אל יצירת אשכול Kubernetes

  2. בקטע Cluster basics (הגדרות בסיסיות של אשכול), מבצעים את הפעולות הבאות:

    1. מזינים את השם של האשכול.
    2. בשדה Location type, בוחרים באפשרות Regional ואז בוחרים את האזור של האשכול.
    3. אם רוצים לשנות את מיקומי ברירת המחדל של הצמתים (לדוגמה, כדי להפעיל אותם באזור אחד), מסמנים את התיבה Specify default node locations(ציון מיקומי ברירת מחדל של הצמתים) ואז בוחרים את האזורים שבהם רוצים להפעיל את מאגרי הצמתים.

    4. בוחרים ערוץ הפצה. אפשר גם לבחור באפשרות No channel (ללא ערוץ) מהרשימה הנפתחת, אבל מומלץ לעיין בהשוואה בין אשכולות שנרשמו לערוץ הפצה לבין אשכולות שלא נרשמו לפני שבוחרים באפשרות הזו. פלטפורמת GKE משדרגת אוטומטית אשכולות שלא נמצאים בערוץ הפצה עם גרסאות מהערוץ היציב.

    5. אופציונלי: מציינים גרסת מישור בקרה מהרשימה הנפתחת Version.

  3. אופציונלי: מגדירים הגדרות אחרות לאשכול החדש.

  4. אופציונלי: אם רוצים לרשום את האשכול החדש לצי, עוברים לקטע Fleet registration ופועלים לפי ההוראות במסוף בנושא Create and register a new cluster כדי להשלים את רישום האשכול. Google Cloud

  5. בחלונית הניווט, בקטע Node Pools (מאגרי צמתים), לוחצים על default-pool (מאגר ברירת המחדל).

  6. בקטע פרטי מאגר צמתים, ממלאים את הפרטים הבאים:

    1. מזינים שם למאגר הצמתים שמוגדר כברירת מחדל.
    2. אופציונלי: בוחרים את גרסת הצומת.
    3. מזינים את מספר הצמתים שרוצים ליצור באשכול. צריכה להיות לכם מכסת משאבים זמינה לצמתים ולמשאבים שלהם (כמו מסלולי חומת אש).
    4. אופציונלי: אפשר להשבית את השדרוגים האוטומטיים של הצמתים, אבל מומלץ לעיין בשיקולים לפני השבתת השדרוגים האוטומטיים של הצמתים לפני שבוחרים באפשרות הזו.
  7. בחלונית הניווט, בקטע Node Pools (מאגרי צמתים), לוחצים על Nodes (צמתים).

  8. ברשימה הנפתחת סוג התמונה, בוחרים באפשרות תמונת הצומת.

  9. בוחרים את Machine configuration שיוגדר כברירת מחדל לשימוש במופעים. החיוב על כל סוג מכונה מתבצע באופן שונה. סוג המכונה המוגדר כברירת מחדל הוא e2-medium. למידע על תמחור סוגי מכונות, אפשר לעיין בגיליון המחירים של סוגי המכונות.

  10. ברשימה הנפתחת סוג דיסק האתחול, בוחרים את סוג הדיסק.

  11. מזינים את גודל דיסק האתחול.

  12. אופציונלי: בחלונית הניווט, בקטע Node Pools, לוחצים על Security.

  13. אופציונלי, אפשר לציין חשבון שירות מותאם אישית ב-IAM עבור הצמתים:
    1. בדף הגדרות מתקדמות, מרחיבים את הקטע אבטחה.
    2. בתפריט Service account בוחרים את חשבון השירות המועדף.

    מומלץ מאוד לציין חשבון שירות IAM עם הרשאות מינימליות, שהצמתים יוכלו להשתמש בו במקום בחשבון השירות שמוגדר כברירת מחדל של Compute Engine. במאמר שימוש בחשבון שירות עם הרשאות מינימליות מוסבר איך ליצור חשבון שירות עם הרשאות מינימליות.

  14. לוחצים על יצירה.

Terraform

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

resource "google_container_cluster" "default" {
  name               = "gke-standard-regional-single-zone"
  location           = "us-west1"
  node_locations     = ["us-west1-c"]
  initial_node_count = 2
}

מידע נוסף על שימוש ב-Terraform זמין במאמר תמיכה ב-Terraform ל-GKE.

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

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

יצירת אשכול אזורי עם מאגר צמתים מרובה אזורים

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

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

אם אתם מפתחים אפליקציות GKE באמצעות Visual Studio Code, כדאי לנסות ליצור אשכולות באמצעות Cloud Code.

gcloud

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

gcloud config set project PROJECT_ID
# The project set above is used for quota and billing by default.
# To use a different project for quota and billing, run the following command:
# gcloud config set billing/quota_project PROJECT_ID

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

  • CLUSTER_NAME: השם של האשכול האזורי החדש.
  • CONTROL_PLANE_LOCATION: האזור של Compute Engine במישור הבקרה של האשכול. מציינים אזור, למשל us-central1.
  • CHANNEL: סוג ערוץ ההפצה, שיכול להיות אחד מהערכים הבאים: rapid, ‏regular, ‏stable או None. כברירת מחדל, האשכול רשום לערוץ ההפצה regular אם לא מציינים את הדגלים הבאים: --cluster-version,‏ --release-channel,‏ --no-enable-autoupgrade ו---no-enable-autorepair.
  • VERSION: הגרסה שרוצים לציין עבור האשכול.
  • באזורים עם יותר משלושה אזורים או במקרים שבהם עדיף להשתמש בפחות אזורים, אפשר להשתמש בדגל האופציונלי --node-locations כדי לשנות את אזורי ברירת המחדל שבהם הצמתים משוכפלים.

מומלץ מאוד לציין חשבון שירות IAM עם הרשאות מינימליות, שהצמתים יוכלו להשתמש בו במקום בחשבון השירות שמוגדר כברירת מחדל של Compute Engine. במאמר שימוש בחשבון שירות עם הרשאות מינימליות מוסבר איך ליצור חשבון שירות עם הרשאות מינימליות.

כדי לציין חשבון שירות מותאם אישית ב-CLI של gcloud, מוסיפים את הדגל הבא לפקודה:

--service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com

מחליפים את SERVICE_ACCOUNT_NAME בשם של חשבון השירות עם ההרשאות המינימליות.

שימוש בערוץ הפצה ספציפי:

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

gcloud container clusters create CLUSTER_NAME \
    --location CONTROL_PLANE_LOCATION \
    --release-channel CHANNEL

שימוש בגרסה ספציפית:

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

gcloud container clusters create CLUSTER_NAME \
    --location CONTROL_PLANE_LOCATION \
    --cluster-version VERSION

שימוש בגרסת ברירת המחדל באשכולות שלא רשומים לערוץ הפצה:

כדי ליצור אשכול חדש באמצעות גרסת ברירת המחדל לאשכולות שלא רשומים לערוץ הפצה, לא צריך לציין גרסת אשכול, אבל צריך להגדיר את ערוץ ההפצה ל-None:

gcloud container clusters create CLUSTER_NAME \
    --location CONTROL_PLANE_LOCATION \
    --release-channel None

דוגמה

הפקודה הבאה יוצרת אשכול אזורי שרשום לערוץ ההפצה regular עם תשעה צמתים ב-us-west1 (שלושה אזורים עם שלושה צמתים בכל אחד, שזו ברירת המחדל):

gcloud container clusters create my-regional-cluster --location us-west1

דוגמה

הפקודה הבאה יוצרת אשכול אזורי שרשום לערוץ ההפצה regular, עם שישה צמתים (שלושה אזורים עם שני צמתים בכל אחד, שצוינו על ידי --num-nodes):

gcloud container clusters create my-regional-cluster \
    --location us-west1 \
    --num-nodes 2

דוגמה

הפקודה הבאה יוצרת אשכול אזורי שרשום לערוץ ההפצה regular, עם שישה צמתים בשני אזורים (שני אזורים, שצוינו על ידי --node-locations, עם שלושה צמתים בכל אחד):

gcloud container clusters create my-regional-cluster \
    --location us-central1 \
    --node-locations us-central1-b,us-central1-c

המסוף

  1. נכנסים לדף Create a Kubernetes cluster במסוף Google Cloud .

    מעבר אל יצירת אשכול Kubernetes

  2. בקטע Cluster basics (הגדרות בסיסיות של אשכול), מבצעים את הפעולות הבאות:

    1. מזינים את השם של האשכול.
    2. בשדה Location type, בוחרים באפשרות Regional ואז בוחרים את האזור של האשכול.
    3. אם רוצים לשנות את מיקומי ברירת המחדל של הצמתים (לדוגמה, כדי להפעיל אותם באזור אחד), מסמנים את התיבה Specify default node locations(ציון מיקומי ברירת מחדל של הצמתים) ואז בוחרים את האזורים שבהם רוצים להפעיל את מאגרי הצמתים.

    4. בוחרים ערוץ הפצה. אפשר גם לבחור באפשרות No channel (ללא ערוץ) מהרשימה הנפתחת, אבל מומלץ לעיין בהשוואה בין אשכולות שנרשמו לערוץ הפצה לבין אשכולות שלא נרשמו לפני שבוחרים באפשרות הזו. פלטפורמת GKE משדרגת אוטומטית אשכולות שלא נמצאים בערוץ הפצה עם גרסאות מהערוץ היציב.

    5. אופציונלי: מציינים גרסת מישור בקרה מהרשימה הנפתחת Version.

  3. אופציונלי: מגדירים הגדרות אחרות לאשכול החדש.

  4. אופציונלי: אם רוצים לרשום את האשכול החדש לצי, עוברים לקטע Fleet registration ופועלים לפי ההוראות במסוף בנושא Create and register a new cluster כדי להשלים את רישום האשכול. Google Cloud

  5. בחלונית הניווט, בקטע Node Pools (מאגרי צמתים), לוחצים על default-pool (מאגר ברירת המחדל).

  6. בקטע פרטי מאגר צמתים, ממלאים את הפרטים הבאים:

    1. מזינים שם למאגר הצמתים שמוגדר כברירת מחדל.
    2. אופציונלי: בוחרים את גרסת הצומת.
    3. מזינים את מספר הצמתים שרוצים ליצור באשכול. צריכה להיות לכם מכסת משאבים זמינה לצמתים ולמשאבים שלהם (כמו מסלולי חומת אש).
    4. אופציונלי: אפשר להשבית את השדרוגים האוטומטיים של הצמתים, אבל מומלץ לעיין בשיקולים לפני השבתת השדרוגים האוטומטיים של הצמתים לפני שבוחרים באפשרות הזו.
  7. בחלונית הניווט, בקטע Node Pools (מאגרי צמתים), לוחצים על Nodes (צמתים).

  8. ברשימה הנפתחת סוג התמונה, בוחרים באפשרות תמונת הצומת.

  9. בוחרים את Machine configuration שיוגדר כברירת מחדל לשימוש במופעים. החיוב על כל סוג מכונה מתבצע באופן שונה. סוג המכונה המוגדר כברירת מחדל הוא e2-medium. למידע על תמחור סוגי מכונות, אפשר לעיין בגיליון המחירים של סוגי המכונות.

  10. ברשימה הנפתחת סוג דיסק האתחול, בוחרים את סוג הדיסק.

  11. מזינים את גודל דיסק האתחול.

  12. אופציונלי: בחלונית הניווט, בקטע Node Pools, לוחצים על Security.

  13. אופציונלי, אפשר לציין חשבון שירות מותאם אישית ב-IAM עבור הצמתים:
    1. בדף הגדרות מתקדמות, מרחיבים את הקטע אבטחה.
    2. בתפריט Service account בוחרים את חשבון השירות המועדף.

    מומלץ מאוד לציין חשבון שירות IAM עם הרשאות מינימליות, שהצמתים יוכלו להשתמש בו במקום בחשבון השירות שמוגדר כברירת מחדל של Compute Engine. במאמר שימוש בחשבון שירות עם הרשאות מינימליות מוסבר איך ליצור חשבון שירות עם הרשאות מינימליות.

  14. לוחצים על יצירה.

Terraform

כדי ליצור אשכול אזורי עם מאגר צמתים מרובה אזורים באמצעות Terraform, אפשר להיעזר בדוגמה הבאה:

resource "google_container_cluster" "default" {
  name               = "gke-standard-regional-multi-zone"
  location           = "us-central1"
  node_locations     = ["us-central1-b", "us-central1-c"]
  initial_node_count = 2
}

מידע נוסף על שימוש ב-Terraform זמין במאמר תמיכה ב-Terraform ל-GKE.

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

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

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