תחזוקה של אשכולות Kubernetes

‫Google Distributed Cloud‏ (GDC) עם בידוד פיזי מאפשר לכם לנהל את אשכולות Kubernetes אחרי היצירה באמצעות GKE ב-GDC. השירות הזה מאפשר לכם להתאים את עצמכם לדרישות המשתנות של עומסי העבודה שלכם ב-containers ולתחזק את צמתי האשכול הקיימים באמצעות תהליכי העבודה הבאים:

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

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

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

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

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

תפקידים משותפים באשכול

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

  • Project Creator (project-creator): יצירה או צפייה במשאבי פרויקט. התפקיד הזה נדרש כדי לצרף אשכול משותף לפרויקט.

  • עריכת פרויקטים (project-editor): מחיקה, עדכון או צפייה במשאבי פרויקט. התפקיד הזה נדרש כדי לנתק אשכול משותף מפרויקט.

  • ‫User Cluster Viewer (user-cluster-viewer): צפייה באשכול המשותף ובמשאבים שלו. התפקיד הזה מספק גישה לממשקי API של מישור הניהול עבור האשכול המשותף שמתארח בשרת Management API.

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

תפקידים סטנדרטיים באשכול

כדי לראות את אשכול Kubernetes הרגיל ואת המשאבים שלו, צריך לבקש מאדמין IAM בפרויקט להקצות לכם את התפקיד צפייה באשכול רגיל (standard-cluster-viewer). התפקיד הזה מספק גישה לממשקי API של מישור הניהול עבור האשכול הרגיל שמתארח בשרת API של הניהול.

התפקיד הזה משויך למרחב השמות של הפרויקט.

הכנת הסביבה

כדי להריץ פקודות מול אשכול Kubernetes באמצעות ה-API, צריך לוודא שיש לכם את המשאבים הבאים:

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

  • משתמשים בשם של אשכול Kubernetes כדי להחליף את CLUSTER_NAME בהוראות האלה.

  • נכנסים לחשבון ויוצרים את קובץ ה-kubeconfig של שרת ה-API לניהול.

  • משתמשים בנתיב kubeconfig של שרת ה-API לניהול כדי להחליף את MANAGEMENT_API_SERVER בהוראות האלה.

העברת אשכולות בהיררכיית פרויקטים

פרויקטים מספקים קיבוץ לוגי של מופעי שירות. אתם יכולים להוסיף ולהסיר אשכולות Kubernetes משותפים מהיררכיית הפרויקטים ב-GDC כדי לקבץ את השירותים בצורה מתאימה. אי אפשר להעביר אשכולות רגילים בהיררכיית הפרויקטים כי הם מוגבלים לפרויקט אחד בלבד.

צירוף פרויקט לאשכול משותף

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

המסוף

  1. בתפריט הניווט, בוחרים באפשרות Kubernetes Engine > Clusters (Kubernetes Engine > אשכולות).
  2. ברשימת האשכולות, לוחצים על שם האשכול כדי לפתוח את הדף פרטי האשכול.
  3. בוחרים באפשרות צירוף פרויקט.
  4. ברשימת הפרויקטים הזמינים, לוחצים על שם הפרויקט כדי לצרף אותו לאשכול.
  5. לוחצים על Save.

API

  • יוצרים משאב חדש בהתאמה אישית ProjectBinding לאשכול:

    kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF
    apiVersion: resourcemanager.gdc.goog/v1
    kind: ProjectBinding
    metadata:
      name: CLUSTER_NAME-PROJECT_NAME
      namespace: platform
      labels:
        resourcemanager.gdc.goog/projectbinding-for-user-project: "true"
    spec:
      clusterRef:
       name: CLUSTER_NAME
      selector:
        nameSelector:
          matchNames:
          - PROJECT_NAME
    EOF
    

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

    • ‫MANAGEMENT_API_SERVER: הנתיב של קובץ ה-kubeconfig של שרת ה-API האזורי.
    • ‫CLUSTER_NAME: שם האשכול.
    • ‫PROJECT_NAME: השם של הפרויקט שאליו רוצים לקשר את האשכול. כל משאב ProjectBinding יכול להיות ממופה רק לאשכול אחד. אם פרויקט דורש גישה לכמה אשכולות, צריך ליצור ProjectBinding ייחודי לכל אשכול.

Terraform

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

    provider "kubernetes" {
      config_path = "MANAGEMENT_API_SERVER"
    }
    
    resource "kubernetes_manifest" "PROJECT_BINDING_RESOURCE_NAME" {
      manifest = {
        "apiVersion" = "resourcemanager.gdc.goog/v1"
        "kind" = "ProjectBinding"
        "metadata" = {
          "name" = "CLUSTER_NAME-PROJECT_NAME"
          "namespace" = "platform"
          "labels" = {
            "resourcemanager.gdc.goog/projectbinding-for-user-project" = "true"
          }
        }
        "spec" = {
          "clusterRef" = {
            "name" = "CLUSTER_NAME"
          }
          "selector" = {
            "nameSelector" = {
              "matchNames" = [
                "PROJECT_NAME",
              ]
            }
          }
        }
      }
    }
    

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

    • ‫MANAGEMENT_API_SERVER: הנתיב של קובץ ה-kubeconfig של שרת ה-API האזורי.
    • ‫PROJECT_BINDING_RESOURCE_NAME: שם משאב Terraform של הקישור לפרויקט, למשל CLUSTER_NAME-PROJECT_NAME-binding. השם הזה משמש את Terraform כדי לזהות את הקישור של הפרויקט, ולא משמש את GDC.
    • ‫CLUSTER_NAME: שם האשכול. כל משאב ProjectBinding יכול להיות ממופה רק לאשכול אחד. אם פרויקט דורש גישה לכמה אשכולות, צריך ליצור ProjectBinding ייחודי לכל אשכול.
    • ‫PROJECT_NAME: שם הפרויקט שאליו רוצים לקשר. כל משאב ProjectBinding יכול להיות ממופה רק לאשכול אחד. אם פרויקט דורש גישה לכמה אשכולות, צריך ליצור ProjectBinding ייחודי לכל אשכול.
  2. מחילים את הקישור החדש לפרויקט:

    terraform apply
    

ניתוק פרויקט מאשכול משותף

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

כדי לנתק פרויקט מאשכול משותף קיים:

המסוף

  1. בתפריט הניווט, בוחרים באפשרות Kubernetes Engine > Clusters (Kubernetes Engine > אשכולות).
  2. לוחצים על האשכול ברשימת האשכולות כדי לפתוח את הדף פרטי האשכול.
  3. לוחצים על Detach (ניתוק) כדי לנתק את הפרויקט מהאשכול.

API

  • מוחקים את המשאב ProjectBinding שמקשר בין הפרויקט לאשכול:

    kubectl --kubeconfig MANAGEMENT_API_SERVER delete projectbinding \
        CLUSTER_NAME-PROJECT_NAME -n platform
    

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

    • ‫MANAGEMENT_API_SERVER: הנתיב של קובץ ה-kubeconfig של שרת ה-API האזורי.
    • ‫CLUSTER_NAME: שם האשכול.
    • ‫PROJECT_NAME: השם של הפרויקט שרוצים לנתק מהאשכול.

Terraform

  • מוחקים את משאב הקישור לפרויקט:

    terraform destroy -target kubernetes_manifest.PROJECT_BINDING_RESOURCE_NAME
    

    מחליפים את PROJECT_BINDING_RESOURCE_NAME בשם משאב Terraform של הקישור לפרויקט שרוצים למחוק, למשל CLUSTER_NAME-PROJECT_NAME-binding. השם הזה משמש את Terraform כדי לזהות את הקישור של הפרויקט, ולא משמש את GDC.

הצגת כל האשכולות בפרויקט או בארגון

אתם יכולים לראות את כל אשכולות Kubernetes שזמינים בפרויקט או בארגון, כולל הסטטוסים שלהם, גרסאות Kubernetes ופרטים נוספים.

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

המסוף

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

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

  2. בתפריט הניווט, בוחרים באפשרות Kubernetes Engine > Clusters (Kubernetes Engine > אשכולות).

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

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

gdcloud

  • מציגים את רשימת אשכולות Kubernetes שזמינים באזור:

    gdcloud clusters list
    

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

    CLUSTERREF.NAME   READINESS.STATE   TYPE   CURRENTVERSION.USERCLUSTERVERSION     CURRENTVERSION.SUPPORT.STATUS
    user-vm-1         Ready             user   1.15.0-gdch.394225-1.28.15-gke.1200   In Support
    user-vm-2         Ready             user   1.15.0-gdch.394225-1.29.12-gke.800    In Support
    

API

  • מציגים את רשימת אשכולות Kubernetes שזמינים באזור:

    kubectl get clusters.cluster.gdc.goog -n KUBERNETES_CLUSTER_NAMESPACE \
        --kubeconfig MANAGEMENT_API_SERVER
    

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

    • ‫MANAGEMENT_API_SERVER: הנתיב של קובץ ה-kubeconfig של שרת ה-API האזורי.
    • ‫KUBERNETES_CLUSTER_NAMESPACE: מרחב השמות של האשכול. במקרה של אשכולות משותפים, צריך להשתמש במרחב השמות platform. באשכולות רגילים, משתמשים במרחב השמות של הפרויקט של האשכול.

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

    NAME        STATE     K8S VERSION
    user-vm-1   Running   1.25.10-gke.2100
    user-test   Running   1.26.5-gke.2100
    

רשימת גרסאות Kubernetes שזמינות לאשכול

אתם יכולים לראות את רשימת הגרסאות הזמינות של Kubernetes באזור GDC כדי לוודא שיש לכם גישה לתכונות Kubernetes באוסף.

  • מציגים את רשימת הגרסאות הזמינות של Kubernetes באזור:

    kubectl get userclustermetadata.upgrade.private.gdc.goog \
        -o=custom-columns=K8S-VERSION:.spec.kubernetesVersion \
        --kubeconfig MANAGEMENT_API_SERVER
    

    מחליפים את MANAGEMENT_API_SERVER בקובץ kubeconfig של שרת ה-API האזורי של האשכול.

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

    K8S-VERSION
    1.25.10-gke.2100
    1.26.5-gke.2100
    1.27.4-gke.500
    

הצגת מאפיינים שאפשר לעדכן

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

המסוף

  1. בתפריט הניווט, בוחרים באפשרות Kubernetes Engine > Clusters (Kubernetes Engine > אשכולות).

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

  3. למאפיינים שאפשר לערוך יש סמל עריכה.

API

  • אפשר לעיין ברשימת המאפיינים של Cluster המפרט ובערכים התקינים שמתאימים לכל מאפיין:

    kubectl explain clusters.cluster.gdc.goog.spec \
        --kubeconfig MANAGEMENT_API_SERVER
    

    מחליפים את הערך MANAGEMENT_API_SERVER בנתיב של קובץ ה-kubeconfig של שרת ה-API האזורי.

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

    KIND:     Cluster
    VERSION:  cluster.gdc.goog/v1
    
    RESOURCE: spec <Object>
    
    DESCRIPTION:
        <empty>
    
    FIELDS:
      clusterNetwork    <Object>
        The cluster network configuration. If unset, the default configurations
        with pod and service CIDR sizes are used. Optional. Mutable.
    
      initialVersion    <Object>
        The GDC air-gapped version information of the user cluster during cluster creation.
        Optional. Default to use the latest applicable version. Immutable.
    
      loadBalancer  <Object>
        The load balancer configuration. If unset, the default configuration with
        the ingress service IP address size is used. Optional. Mutable.
    
      nodePools <[]Object>
        The list of node pools for the cluster worker nodes. Optional. Mutable.
    
      releaseChannel    <Object>
        The release channel a cluster is subscribed to. When a cluster is
        subscribed to a release channel, GDC maintains the cluster versions for
        users. Optional. Mutable.
    

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

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