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

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

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

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

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

בקשת תפקידים ב-IAM

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

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

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

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

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

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

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

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

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

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

הכנת הסביבה

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

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

  • בהוראות הבאות, החליפו את CLUSTER_NAME בשם של אשכול Kubernetes.

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

  • בהוראות הבאות, מחליפים את MANAGEMENT_API_SERVER בנתיב kubeconfig של שרת ה-API לניהול.

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

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

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

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

המסוף

  1. בתפריט הניווט, לוחצים על Kubernetes Engine > Clusters.
  2. ברשימת האשכולות, לוחצים על שם האשכול כדי לפתוח את הדף Cluster details.
  3. לוחצים על Attach Project (צירוף פרויקט).
  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.
  2. לוחצים על האשכול ברשימת האשכולות כדי לפתוח את הדף Cluster details.
  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.

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

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

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.

  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. לדוגמה, אפשר לשנות את הגודל של מאגר צמתים.

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