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

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

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

דרישות מוקדמות

  • הגרסה האחרונה של bmctl (gs://anthos-baremetal-release/bmctl/1.36.200-gke.118/linux-amd64/bmctl) יורדת מ-Cloud Storage.
  • לתחנת העבודה שבה פועל bmctl יש קישוריות רשת לכל הצמתים באשכולות המשתמשים המטורגטים.
  • לתחנת העבודה שבה פועל bmctl יש קישוריות רשת לשרת ה-API של האשכול (VIP של מישור הבקרה).
  • מפתח ה-SSH ששימש ליצירת אשכול האדמין זמין ל-root או למשתמש שאינו משתמש Root עם הרשאות sudo ללא סיסמה בכל הצמתים באשכול האדמין המטורגט.
  • חשבון השירות Connect-register מוגדר לשימוש עם Connect.

במדריך למתחילים של Google Distributed Cloud יש הוראות מפורטות ליצירת אשכול היברידי. יצירת אשכול אדמין דומה ליצירת אשכול היברידי, אבל לא מריצים עומסי עבודה באשכול האדמין.

הפעלת SELinux

אם רוצים להפעיל את SELinux כדי לאבטח את הקונטיינרים, צריך לוודא ש-SELinux מופעל במצב Enforced בכל המכונות המארחות. החל מגרסה 1.9.0 של Google Distributed Cloud, אפשר להפעיל או להשבית את SELinux לפני או אחרי שיוצרים או משדרגים את האשכול. ‫SELinux מופעל כברירת מחדל ב-Red Hat Enterprise Linux ‏ (RHEL). אם SELinux מושבת במכונות המארחות או שאתם לא בטוחים, תוכלו לקרוא את המאמר אבטחת קונטיינרים באמצעות SELinux כדי להבין איך להפעיל אותו.

‫Google Distributed Cloud תומך ב-SELinux רק במערכות RHEL.

כניסה ל-CLI של gcloud ויצירת קובץ תצורה של אשכול אדמין

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

    gcloud auth application-default login
    
  2. כדי להשתמש בתכונות של הפעלת API אוטומטית ויצירת חשבון שירות בדף הזה, צריך להקצות לחשבון המשתמש את התפקיד "בעלי הפרויקט". אם אי אפשר להקצות לחשבון המשתמש את התפקיד "בעלי הפרויקט", צריך לבצע את השלב הבא.

  3. כדי לוודא שאפשר ליצור את האשכול בלי להקצות את התפקיד "בעלי הפרויקט", מוסיפים לחשבון המשתמש את תפקידי ה-IAM הבאים:

    • אדמין של חשבון שירות
    • אדמין של מפתח לחשבון שירות
    • אדמין IAM של פרויקט
    • צפייה ב-Compute
    • אדמין של Service Usage

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

    export GOOGLE_APPLICATION_CREDENTIALS=JSON_KEY_FILE
    

    מחליפים את JSON_KEY_FILE בנתיב לקובץ המפתח בפורמט JSON של חשבון השירות.

  4. משיגים את המזהה של הפרויקט ב- Google Cloud ושומרים אותו במשתנה סביבה כדי להשתמש בו ליצירת אשכול:

    export CLOUD_PROJECT_ID=$(gcloud config get-value project)
    

יצירת קובץ תצורה של אשכול אדמין באמצעות bmctl

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

בדוגמה הבאה, כל חשבונות השירות נוצרים באופן אוטומטי על ידי הפקודה bmctl create config:

bmctl create config -c ADMIN_CLUSTER_NAME --enable-apis \
    --create-service-accounts --project-id=CLOUD_PROJECT_ID

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

  • ‫ADMIN_CLUSTER_NAME: השם של האשכול החדש.
  • ‫CLOUD_PROJECT_ID: מזהה הפרויקט ב- Google Cloud או משתנה הסביבה $CLOUD_PROJECT_ID.

דוגמה ליצירת קובץ תצורה לאשכול אדמין בשם admin1 שמשויך למזהה הפרויקט my-gcp-project:

bmctl create config -c admin1 --create-service-accounts --enable-apis --project-id=my-gcp-project

הקובץ נכתב ב-bmctl-workspace/admin1/admin1.yaml.

במקום להפעיל ממשקי API וליצור חשבונות שירות באופן אוטומטי, אתם יכולים גם לתת לחשבונות השירות הקיימים שלכם הרשאות IAM מתאימות. כלומר, אתם יכולים לדלג על היצירה האוטומטית של חשבון השירות בדוגמה הקודמת בפקודה bmctl:

bmctl create config -c admin1 --project-id=my-gcp-project

עריכת קובץ התצורה של האשכול

עכשיו, כשיש לכם קובץ תצורה של אשכול, אתם יכולים לערוך אותו כדי לבצע את השינויים הבאים:

  1. מזינים את המפתח הפרטי של SSH כדי לגשת לצומתי האשכול של האדמין:

    # bmctl configuration variables. Because this section is valid YAML but not a valid Kubernetes
    # resource, this section can only be included when using bmctl to
    # create the initial admin/admin cluster. Afterwards, when creating user clusters by directly
    # applying the cluster and node pool resources to the existing cluster, you must remove this
    # section.
    gcrKeyPath: bmctl-workspace/.sa-keys/my-gcp-project-anthos-baremetal-gcr.json
    sshPrivateKeyPath: /path/to/your/ssh_private_key
    gkeConnectAgentServiceAccountKeyPath: bmctl-workspace/.sa-keys/my-gcp-project-anthos-baremetal-connect.json
    gkeConnectRegisterServiceAccountKeyPath: bmctl-workspace/.sa-keys/my-gcp-project-anthos-baremetal-register.json
    cloudOperationsServiceAccountKeyPath: bmctl-workspace/.sa-keys/my-gcp-project-anthos-baremetal-cloud-ops.json
    
  2. רושמים את האשכולות ל-fleet. מזהה הפרויקט שציינתם בפקודה bmctl create config נוסף באופן אוטומטי לשדה gkeConnect.projectID בקובץ התצורה של האשכול. הפרויקט הזה נקרא פרויקט המארח של ה-Fleet.

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

    • אם יצרתם את קובץ התצורה בלי להשתמש בתכונות האוטומטיות להפעלת ה-API וליצירת חשבון שירות, צריך להפנות למפתחות ה-JSON של חשבון השירות שהורדתם בשדות gkeConnectAgentServiceAccountKeyPath ו-gkeConnectRegisterServiceAccountKeyPath המתאימים בקובץ התצורה של האשכול.

    • אפשר גם להוסיף את gkeConnect.location למפרט האשכול כדי לציין את האזור ( Google Cloud ) שבו פועלים שירותי Fleet ו-Connect. המינוי האזורי הזה מגביל את תנועת הנתונים של שירות Fleet לאזור שלכם. אם כוללים את gkeConnect.location במפרט האשכול, האזור שמציינים חייב להיות זהה לאזור שהוגדר ב-clusterOperations.location. אם האזורים לא זהים, יצירת האשכול תיכשל.

  3. מוודאים שבהגדרות האישיות מצוין סוג האשכול admin (ערך ברירת המחדל):

    spec:
      # Cluster type. This can be:
      #   1) admin:  to create an admin cluster. This can later be used to create user clusters.
      #   2) user:   to create a user cluster. Requires an existing admin cluster.
      #   3) hybrid: to create a hybrid cluster that runs admin cluster components and user workloads.
      #   4) standalone: to create a cluster that manages itself, runs user workloads, but does not manage other clusters.
      type: admin
    
  4. אם GKE On-Prem API מופעל בפרויקט ב-Google Cloud , כל האשכולות בפרויקט רשומים ל-GKE On-Prem API באופן אוטומטי באזור שהוגדר ב-clusterOperations.location.

    • אם רוצים לרשום את כל האשכולות בפרויקט ב-GKE On-Prem API, צריך לבצע את השלבים שמפורטים בקטע לפני שמתחילים כדי להפעיל את GKE On-Prem API בפרויקט ולהשתמש בו.

    • אם אתם לא רוצים לרשום את האשכול ב-GKE On-Prem API, צריך לכלול את הקטע הזה ולהגדיר את gkeOnPremAPI.enabled כ-false. אם אתם לא רוצים לרשום אשכולות בפרויקט, השביתו את gkeonprem.googleapis.com (שם השירות של GKE On-Prem API) בפרויקט. הוראות מפורטות זמינות במאמר השבתת שירותים.

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

      # Control plane configuration
      controlPlane:
        nodePoolSpec:
          nodes:
          # Control plane node pools. Typically, this is either a single machine
          # or 3 machines if using a high availability deployment.
          - address: 10.200.0.4
          - address: 10.200.0.5
          - address: 10.200.0.6
    
  6. מציינים את צפיפות ה-Pod של צומתי האשכול:

    ....
    # NodeConfig specifies the configuration that applies to all nodes in the cluster.
    nodeConfig:
      # podDensity specifies the pod density configuration.
      podDensity:
        # maxPodsPerNode specifies at most how many pods can be run on a single node.
        maxPodsPerNode: 250
    ....
    

    באשכולות אדמין, הערכים המותרים של maxPodsPerNode הם 32-250 לאשכולות HA ו-64-250 לאשכולות שאינם HA. ערך ברירת המחדל אם לא צוין ערך הוא 110. אחרי שיוצרים את האשכול, אי אפשר לעדכן את הערך הזה.

    צפיפות הפודים מוגבלת גם על ידי משאבי ה-IP הזמינים של האשכול. פרטים נוספים זמינים במאמר רשתות Pod.

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

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

bmctl create cluster -c ADMIN_CLUSTER_NAME

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

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

bmctl create cluster -c admin1

הגדרות לדוגמה של אשכולות אדמין

דוגמאות להגדרות של אשכולות אדמין מופיעות בקטע אשכולות אדמין במאמר "דוגמאות להגדרות של אשכולות".