יצירה וקישור של חשבונות לחיוב

במאמר הזה מוסבר איך יוצרים חשבון לחיוב ב-Google Distributed Cloud (GDC)‎ עם air gap כדי לעקוב אחרי השימוש במשאבים.

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

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

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

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

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

  • אדמין של חשבון לחיוב ברמת הארגון (organization-billing-account-admin): יצירה, ניהול וקישור של המשאב BillingAccount.

  • משתמש בחשבון לחיוב ברמת הארגון (organization-billing-account-user): קריאה, הצגה ברשימה וקישור של המשאב BillingAccount.

  • ניהול חשבונות לחיוב ברמת הארגון (organization-billing-manager): קריאה, הצגה, יצירה ועדכון של המשאב BillingAccountBinding.

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

קבלת הקובץ kubeconfig

כדי להריץ פקודות באשכול Org Global, צריך לוודא שיש לכם את המשאבים הבאים:

  1. אם אין לכם קובץ kubeconfig לאשכול Org Global, נכנסים לחשבון ויוצרים אותו.

  2. בהוראות האלה, מחליפים את ORG_GLOBAL_CLUSTER_KUBECONFIG בנתיב לקובץ kubeconfig של האשכול Org Global.

יצירת חשבון חדש לחיוב

kubectl

חשבון לחיוב מזוהה באופן ייחודי באמצעות name ו-namespace. כדי ליצור חשבון לחיוב, משתמשים במשאב בהתאמה אישית כדי להגדיר את name ו-namespace:

  1. יוצרים קובץ YAML ומוסיפים את המשאב בהתאמה אישית BillingAccount ואת התוכן הבא:

    apiVersion: billing.global.gdc.goog/v1
    kind: BillingAccount
    metadata:
      namespace: platform
      name: BIL_ACCOUNT_NAME
    spec:
      displayName: BIL_DISPLAY_NAME
      paymentSystemConfig:
        cloudBillingConfig:
          accountID: "012345-6789AB-CDEF01"
    

    מחליפים את המשתנים הבאים:

    • ‫BIL_ACCOUNT_NAME: שם החשבון לחיוב, לדוגמה test-billing-account.
    • ‫BIL_DISPLAY_NAME: השם המוצג של החשבון לחיוב, לדוגמה "Test Billing Account".
  2. בודקים את סוג הגדרת התשלומים. בחשבונות לחיוב ב-Distributed Cloud צריכה להיות אחת מהגדרות התשלום הבאות:

    • ‫cloudBillingConfig: הגדרת ברירת המחדל לתשלום. בהגדרה הזו מאוחסן מזהה החשבון לחיוב ב-Cloud.

    • ‫customConfig: הגדרה מותאמת אישית לשותפים, שמאפשרת להם לשמור את הגדרות התשלום שלהם כדי לחייב את הארגון. השדה customConfig תומך במילון של מחרוזות מפתח/ערך, עם מפתח חובה payment-config-type.

    הדוגמאות הבאות מציגות קטעי קוד של קובץ YAML ב-BillingAccount להגדרות תשלום שונות:

    דוגמה ל-cloudBillingConfig:

    spec:
      paymentSystemConfig:
        cloudBillingConfig:
          accountID: CLOUD_BILLING_ACCOUNT_ID
    

    מחליפים את CLOUD_BILLING_ACCOUNT_ID במזהה החשבון לחיוב ב-Google Cloud .

    דוגמה ל-customConfig:

    spec:
     paymentSystemConfig:
       customConfig:
          "payment-config-type": PAYMENT_CONFIG_TYPE
    

    מחליפים את PAYMENT_CONFIG_TYPE בסוג הגדרת התשלום שבחרתם להגדרת החיוב בהתאמה אישית.

    אם אין לכם את פרטי ההגדרות האישיות של customConfig בארגון, הזינו את הפרטים הבאים:

    spec:
     paymentSystemConfig:
       customConfig:
          "payment-config-type": "N/A"
    

    קובץ ה-YAML הבא מציג משאב BillingAccount מלא עם ההגדרה cloudBillingConfig:

    apiVersion: billing.global.gdc.goog/v1
    kind: BillingAccount
    metadata:
      namespace: platform
      name: test-billing-account
    spec:
      displayName: "Test Billing Account"
      paymentSystemConfig:
        cloudBillingConfig:
          accountID: "012345-6789AB-CDEF01"
    
  3. שומרים את קובץ ה-YAML. מריצים את ה-CLI של kubectl כדי להחיל את המשאב באשכול Org Global:

    kubectl --kubeconfig ORG_GLOBAL_CLUSTER_KUBECONFIG apply -f billingaccount.yaml
    

    מחליפים את ORG_GLOBAL_CLUSTER_KUBECONFIG בקובץ kubeconfig של האשכול Org Global.

CLI

כדי ליצור חשבון לחיוב, משתמשים בפקודה gdcloud billing accounts create.

מידע נוסף זמין במאמר gdcloud billing accounts create.

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

אם רוצים שהפרויקט לא ישויך לחשבון לחיוב של הארגון, אפשר לקשר אותו באופן מפורש לחשבון אחר לחיוב.

כדי לקשר ארגון אל BillingAccount:

  1. מוסיפים את התוכן הבא לקובץ ה-YAML‏ billingaccountbinding.yaml:

    • בקטע billingAccountRef, ממלאים את השדה name בתוכן מהשדה name בBillingAccount שרוצים לקשר.
    • בקטע metadata, ממלאים את השדה namespace בערך מהשדה הזהה במשאב BillingAccount. בדוגמה הזו, מרחב השמות של הארגון מהמשאב BillingAccount הוא platform:
    apiVersion: billing.global.gdc.goog/v1
    kind: BillingAccountBinding
    metadata:
      name: billing
      namespace: platform
    spec:
      billingAccountRef:
        name: BIL_ACCOUNT_NAME
        namespace: platform
    
  2. מריצים את הפקודה הבאה של kubectl כדי להחיל את הקובץ billingaccountbinding.yaml:

    kubectl --kubeconfig ORG_GLOBAL_CLUSTER_KUBECONFIG apply -f billingaccountbinding.yaml
    
  3. בודקים את הסטטוס של BillingAccountBinding ומוודאים שאין שגיאות:

    kubectl --kubeconfig ORG_GLOBAL_CLUSTER_KUBECONFIG describe billingaccountbinding billing -n platform
    

כדי לקשר פרויקט לBillingAccount:

  1. מוסיפים את התוכן הבא לקובץ: billingaccountbinding.yaml:

    • בקטע billingAccountRef, ממלאים את השדה name בתוכן מהשדה name בBillingAccount שרוצים לקשר.
    • בקטע metadata, מאכלסים את השדה namespace בתוכן מהשדה הזהה במשאב BillingAccount.
    apiVersion: billing.global.gdc.goog/v1
    kind: BillingAccountBinding
    metadata:
      name: billing
      namespace: PROJECT_NAME
    spec:
      billingAccountRef:
        name: BIL_ACCOUNT_NAME
        namespace: platform
    

    מחליפים את המשתנים הבאים:

    • ‫PROJECT_NAME בשם של הפרויקט שמקושר לחשבון לחיוב.
    • ‫BIL_ACCOUNT_NAME: שם החשבון לחיוב, לדוגמה test-billing-account.
  2. מריצים את הפקודה הבאה של kubectl כדי להחיל את הקובץ billingaccountbinding.yaml:

    kubectl --kubeconfig ORG_GLOBAL_CLUSTER_KUBECONFIG apply -f billingaccountbinding.yaml
    
  3. בודקים את הסטטוס של BillingAccountBinding ומוודאים שאין שגיאות:

    kubectl --kubeconfig ORG_GLOBAL_CLUSTER_KUBECONFIG describe billingaccountbinding billing -n PROJECT_NAME
    

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

הצגת רשימה של קישורי החשבון לחיוב

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

  kubectl --kubeconfig ORG_GLOBAL_CLUSTER_KUBECONFIG get billingaccountbinding -A -o 'custom-columns=NAME:metadata.name,NAMESPACE:metadata.namespace,BillingAccountName:spec.billingAccountRef.name,STATUS:status.conditions[0].status'

הפקודה הזו מפיקה את NAME,‏ NAMESPACE,‏ BillingAccountName ו-STATUS של כל BillingAccountBinding. השדה STATUS מציין אם הקישור פעיל או אם יש שגיאות.

ההיררכיה וההתנהגות של החשבון לחיוב

כשמקשרים חשבונות לחיוב לארגונים ולפרויקטים, חלים ההיררכיה וההתנהגויות הבאות:

  • שיוך ברמת הפרויקט מקבל עדיפות: אם פרויקט ספציפי, כמו project-A, מקושר באופן מפורש ל-BillingAccount, לדוגמה billing-account-1, כל העלויות של project-A מחויבות באופן בלעדי ב-billing-account-1. הקישור הזה ברמת הפרויקט נשאר בתוקף, בלי קשר להגדרות של החשבון לחיוב ברמת הארגון.

  • שיוך ברמת הארגון של פרויקטים לא מקושרים: אם הארגון שלכם מקושר לBillingAccount, לדוגמה billing-account-0, כל הפרויקטים בארגון שאין להם BillingAccountBinding מפורש משלהם משויכים באופן אוטומטי ל-billing-account-0 ומחויבים דרכו. השיוך הזה נכנס לתוקף בדרך כלל אחרי כ-15 דקות.

  • שינוי החשבונות לחיוב של הארגון: אם החשבון לחיוב שמקושר לארגון משתנה, למשל billing-account-0 משתנה ל-billing-account-new, הפרויקטים של billing-account-0 לא עוברים אוטומטית ל-billing-account-new. הפרויקטים האלה נשארים מקושרים ל-billing-account-0, ואתם צריכים לעדכן באופן ידני את החשבון לחיוב כדי שהפרויקטים ישתמשו ב-billing-account-new.

שינוי החשבון לחיוב שמקושר

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

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

לפרויקט

כדי לשנות את החשבון לחיוב שמקושר לפרויקט:

  1. יוצרים BillingAccount חדש כדי לקשר לפרויקט. החשבון הזה מחליף את החשבון הישן.

  2. מאתרים את קובץ ה-YAML של המשאב BillingAccountBinding במרחב השמות של הפרויקט כדי לראות איזה חשבון לחיוב מקושר:

    kubectl --kubeconfig ORG_GLOBAL_CLUSTER_KUBECONFIG describe billingaccountbinding billing -n PROJECT_NAME
    
  3. משנים את BillingAccountBinding כדי לקשר לחשבון החדש לחיוב. בקטע billingAccountRef, ממלאים את השדה name בשם החדש של BillingAccount שנוצר בשלב 1 של הקטע הזה.

    kubectl --kubeconfig ORG_GLOBAL_CLUSTER_KUBECONFIG edit billingaccountbinding billing -n PROJECT_NAME
    
  4. אחרי שמבצעים את השינויים, צריך לוודא שחשבון החיוב עודכן בצורה נכונה:

    kubectl --kubeconfig ORG_GLOBAL_CLUSTER_KUBECONFIG describe billingaccountbinding billing -n PROJECT_NAME
    

בדוגמה הבאה מוצג קובץ YAML של BillingAccountBinding עם החשבון expired-billing-account שמקושר לפרויקט project-one:

  apiVersion: billing.global.gdc.goog/v1
  kind: BillingAccountBinding
  metadata:
    # The name of a BillingAccountBinding will typically always be `billing`.
    name: billing
    # This is the project.
    namespace: project-one
  spec:
    billingAccountRef:
      # This is an example of a BillingAccount that has expired.
      name: expired-billing-account
      namespace: platform

בדוגמה הבאה מוצג קובץ ה-YAML של BillingAccountBinding מהדוגמה הקודמת, ששונה כדי לקשר חשבון חדש בשם new-billing-account:

  apiVersion: billing.global.gdc.goog/v1
  kind: BillingAccountBinding
  metadata:
    name: billing
    # This is the project.
    namespace: project-one
  spec:
    billingAccountRef:
      # This is the example of the new BillingAccount.
      name: new-billing-account
      namespace: platform

לארגון

כדי לשנות את החשבון לחיוב שמקושר לארגון:

  1. יוצרים BillingAccount חדש כדי לקשר לארגון. החשבון הזה מחליף את החשבון הישן.

  2. מאתרים את קובץ ה-YAML של המשאב BillingAccountBinding במרחב השמות platform כדי לראות איזה חשבון לחיוב מקושר:

    kubectl --kubeconfig ORG_GLOBAL_CLUSTER_KUBECONFIG describe billingaccountbinding billing -n platform
    
  3. משנים את BillingAccountBinding כדי לקשר לחשבון החדש לחיוב. בקטע billingAccountRef, מאכלסים את השדה name בשם החדש של BillingAccount שנוצר בשלב 1.

    kubectl --kubeconfig ORG_GLOBAL_CLUSTER_KUBECONFIG edit billingaccountbinding billing -n platform
    
  4. אחרי שמבצעים את השינויים, צריך לוודא שחשבון החיוב עודכן בצורה נכונה:

    kubectl --kubeconfig ORG_GLOBAL_CLUSTER_KUBECONFIG describe billingaccountbinding billing -n platform