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

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

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

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

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

כדי ליצור אשכול רגיל, צריך לבקש את ההרשאות הנדרשות ולהכין את הסביבה.

שליחת בקשה לתפקידי IAM

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

  • אדמין IAM בפרויקט (project-iam-admin): מתן הרשאות למשתמשים אחרים לתפקידים הנדרשים לניהול גישה באשכולות רגילים.
  • אדמין של אשכול רגיל (standard-cluster-admin): יצירת אשכולות רגילים בפרויקט.

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

הכנת הסביבה

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

תכנון של בלוק ה-CIDR של ה-Pod

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

אשכול Kubernetes פועל לפי הלוגיקה הבאה כשמקצים כתובות IP:

  • ‫Kubernetes מקצה לכל אחד מהצמתים בלוק CIDR של /24 שמורכב מ-256 כתובות. הכמות הזו תואמת למספר המקסימלי שמוגדר כברירת מחדל של 110 פודים לכל צומת באשכולות Kubernetes.
  • הגודל של בלוק ה-CIDR שמוקצה לצומת תלוי בערך המקסימלי של Pods לכל צומת.
  • הבלוק תמיד מכיל לפחות פי שניים כתובות ממספר הפודים המקסימלי לכל צומת.

בדוגמה הבאה מוסבר איך ערך ברירת המחדל של Per node mask size= /24 חושב כדי להתאים ל-110 פודים:

Maximum pods per node = 110
Total number of IP addresses required = 2 * 110 = 220

Per node mask size = /24
Number of IP addresses in a /24 = 2(32 - 24) = 256

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

  Total number of nodes supported = 2(Per node mask size - pod CIDR mask)

‫Per node mask size= /24 הוא ערך ברירת המחדל. בטבלה הבאה מפורט המיפוי של מסכת ה-CIDR של הפוד למספר הצמתים הנתמכים.

מסיכת CIDR של Pod חישוב: 2(גודל מסכה לכל צומת – מסכת CIDR) המספר המקסימלי של צמתים נתמכים, כולל צמתים של מישור הבקרה
/21 ‫(24 - 21)2 8
/20 ‫2(24-20) 16
/19 ‫2(24 - 19) 32
/18 ‫2(24 - 18) 64

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

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

כדי ליצור אשכול רגיל:

המסוף

  1. בכלי לבחירת פרויקטים, בוחרים את הפרויקט.

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

  2. בתפריט הניווט, לוחצים על Kubernetes Engine > Clusters.

  3. לוחצים על Create Cluster.

  4. בשדה Name, נותנים שם לאשכול.

  5. בוחרים את האזור שבו רוצים ליצור את האשכול.

  6. בוחרים את גרסת Kubernetes לאשכול.

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

  8. קובעים את הגדרות הרשת של האשכול. אי אפשר לשנות את הגדרות הרשת האלה אחרי שיוצרים את האשכול. פרוטוקול האינטרנט שמוגדר כברירת מחדל ונתמך באשכולות Kubernetes הוא גרסה 4 של פרוטוקול האינטרנט (IPv4).

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

    2. בוחרים את ה-Service CIDR (Classless Inter-Domain Routing) שבו רוצים להשתמש. כתובות ה-IP של השירותים שפרסתם, כמו מאזני עומסים, מוקצות מתוך הטווח הזה.

    3. בוחרים את Pod CIDR שרוצים להשתמש בו. האשכול מקצה כתובות IP מהטווח הזה ל-Pod ולמכונות הווירטואליות שלכם.

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

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

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

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

      • סוג המכונה
      • CPU
      • זיכרון
    4. לוחצים על Save.

  11. לוחצים על Create כדי ליצור את האשכול.

יצירת אשכול רגיל יכולה להימשך עד 60 דקות.

API

  1. יוצרים משאב בהתאמה אישית של Cluster ושומרים אותו כקובץ YAML, למשל cluster.yaml:

    apiVersion: cluster.gdc.goog/v1
    kind: Cluster
    metadata:
      name: CLUSTER_NAME
      namespace: PROJECT_NAME
    spec:
      clusterNetwork:
        podCIDRSize: POD_CIDR
        serviceCIDRSize: SERVICE_CIDR
      initialVersion:
        kubernetesVersion: KUBERNETES_VERSION
      nodePools:
      - machineTypeName: MACHINE_TYPE
        name: NODE_POOL_NAME
        nodeCount: NUMBER_OF_WORKER_NODES
        taints: TAINTS
        labels: LABELS
        acceleratorOptions:
          gpuPartitionScheme: GPU_PARTITION_SCHEME
      releaseChannel:
        channel: UNSPECIFIED
    

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

    • ‫CLUSTER_NAME: שם האשכול. שם האשכול לא יכול להסתיים ב--system. הסיומת -system שמורה לאשכולות שנוצרו על ידי GDC.
    • ‫PROJECT_NAME: השם של הפרויקט שבו רוצים ליצור את האשכול.
    • ‫POD_CIDR: גודל טווחי הרשת שמהם מוקצות כתובות ה-IP הווירטואליות של הפודים. אם המדיניות לא מוגדרת, המערכת משתמשת בערך ברירת המחדל 21.
    • ‫SERVICE_CIDR: גודל טווחי הרשת שמהם מוקצות כתובות ה-IP הווירטואליות של השירות. אם המדיניות לא מוגדרת, המערכת משתמשת בערך ברירת המחדל 23.
    • ‫KUBERNETES_VERSION: גרסת Kubernetes של האשכול, למשל 1.26.5-gke.2100. כדי להציג את גרסאות Kubernetes הזמינות להגדרה, קראו את המאמר הצגת גרסאות Kubernetes הזמינות לאשכול.
    • ‫MACHINE_TYPE: סוג המכונה של צומתי העובדים במאגר הצמתים. במאמר סוגי המכונות הזמינים מפורטות האפשרויות שאפשר להגדיר.
    • ‫NODE_POOL_NAME: שם מאגר הצמתים.
    • ‫NUMBER_OF_WORKER_NODES: מספר צמתי העובדים שיוקצו במאגר הצמתים.
    • ‫TAINTS: ה-taints שיוחלו על הצמתים במאגר הצמתים הזה. זהו שדה אופציונלי.
    • ‫LABELS: התוויות שיוחלו על הצמתים במאגר הצמתים הזה. הוא מכיל רשימה של צמדי מפתח/ערך. השדה הזה אופציונלי.
    • ‫GPU_PARTITION_SCHEME: סכימת החלוקה למחיצות של ה-GPU, אם אתם מריצים עומסי עבודה ב-GPU. זהו שדה אופציונלי. לדוגמה, mixed-2. אם השדה הזה לא מוגדר, ה-GPU לא מחולק למחיצות. מידע נוסף על פרופילים זמינים של GPU עם כמה מופעים במקביל (MIG) זמין במאמר פרופילים נתמכים של MIG.
  2. מחילים את המשאב המותאם אישית על מופע GDC:

    kubectl apply -f cluster.yaml --kubeconfig MANAGEMENT_API_SERVER
    

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

יצירת אשכול רגיל יכולה להימשך עד 60 דקות.

Terraform

  1. בקובץ התצורה של Terraform, מוסיפים את קטע הקוד הבא:

    provider "kubernetes" {
      config_path = "MANAGEMENT_API_SERVER"
    }
    
    resource "kubernetes_manifest" "cluster-create" {
      manifest = {
        "apiVersion" = "cluster.gdc.goog/v1"
        "kind" = "Cluster"
        "metadata" = {
          "name" = "CLUSTER_NAME"
          "namespace" = "PROJECT_NAME"
        }
        "spec" = {
          "clusterNetwork" = {
            "podCIDRSize" = "POD_CIDR"
            "serviceCIDRSize" = "SERVICE_CIDR"
          }
          "initialVersion" = {
            "kubernetesVersion" = "KUBERNETES_VERSION"
          }
          "nodePools" = [{
            "machineTypeName" = "MACHINE_TYPE"
            "name" = "NODE_POOL_NAME"
            "nodeCount" = "NUMBER_OF_WORKER_NODES"
            "taints" = "TAINTS"
            "labels" = "LABELS"
            "acceleratorOptions" = {
              "gpuPartitionScheme" = "GPU_PARTITION_SCHEME"
            }
          }]
          "releaseChannel" = {
            "channel" = "UNSPECIFIED"
          }
        }
      }
    }
    

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

    • ‫MANAGEMENT_API_SERVER: הנתיב של kubeconfig לשרת ה-API האזורי. אם עדיין לא יצרתם קובץ kubeconfig לשרת ה-API באזור היעד, קראו את המאמר כניסה.
    • ‫CLUSTER_NAME: שם האשכול. שם האשכול לא יכול להסתיים ב--system. הסיומת -system שמורה לאשכולות שנוצרו על ידי GDC.
    • ‫PROJECT_NAME: השם של הפרויקט שבו רוצים ליצור את האשכול.
    • ‫POD_CIDR: גודל טווחי הרשת שמהם מוקצות כתובות ה-IP הווירטואליות של הפודים. אם לא מגדירים את המדיניות, המערכת משתמשת בערך ברירת המחדל 21.
    • ‫SERVICE_CIDR: גודל טווחי הרשת שמהם מוקצות כתובות ה-IP הווירטואליות של השירות. אם המדיניות לא מוגדרת, המערכת משתמשת בערך ברירת המחדל 23.
    • ‫KUBERNETES_VERSION: גרסת Kubernetes של האשכול, למשל 1.26.5-gke.2100. כדי לראות את רשימת הגרסאות הזמינות של Kubernetes שאפשר להגדיר, אפשר לעיין במאמר רשימת הגרסאות הזמינות של Kubernetes לאשכול.
    • ‫MACHINE_TYPE: סוג המכונה של צמתי העובדים במאגר הצמתים. במאמר סוגי המכונות הזמינים מפורטות האפשרויות שאפשר להגדיר.
    • ‫NODE_POOL_NAME: שם מאגר הצמתים.
    • ‫NUMBER_OF_WORKER_NODES: מספר צמתי העובדים שיוקצו במאגר הצמתים.
    • ‫TAINTS: ה-taints שיוחלו על הצמתים במאגר הצמתים הזה. זהו שדה אופציונלי.
    • ‫LABELS: התוויות שיוחלו על הצמתים במאגר הצמתים הזה. הוא מכיל רשימה של צמדי מפתח/ערך. השדה הזה אופציונלי.
    • ‫GPU_PARTITION_SCHEME: סכימת החלוקה למחיצות של ה-GPU, אם אתם מריצים עומסי עבודה ב-GPU. זהו שדה אופציונלי. לדוגמה, mixed-2. אם השדה הזה לא מוגדר, ה-GPU לא מחולק למחיצות. למידע נוסף על הפרופילים הזמינים של GPU עם כמה מופעים במקביל (MIG), קראו את המאמר פרופילים נתמכים של MIG.
  2. מחילים את האשכול הרגיל החדש באמצעות Terraform:

    terraform apply
    

יצירת אשכול רגיל יכולה להימשך עד 60 דקות.

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