创建和关联结算账号

本文档介绍了创建 Google Distributed Cloud (GDC) 气隙结算账号以跟踪资源使用情况的步骤。

Distributed Cloud 环境需要一个结算账号来跟踪项目和组织的使用费用。组织内的所有结算账号都使用一份价目表向客户收取服务使用费。如果您未将结算账号与组织或项目相关联,则会丢失与资源关联的费用数据,从而导致费用差异。

本文档适用于平台管理员或应用运维人员群组中在 GDC 中创建和管理结算账号的开发者。 如需了解详情,请参阅 GDC 网闸隔离配置 文档的受众。

准备工作

请求 IAM 角色

请与您的组织 IAM 管理员联系,以请求对您的项目使用以下角色:

  • 全局组织结算账号管理员 (organization-billing-account-admin):创建、管理和绑定 BillingAccount 资源。

  • 全局组织结算账号用户 (organization-billing-account-user):读取、列出和绑定 BillingAccount 资源。

  • 全局组织结算账号管理员 (organization-billing-manager):读取、列出、创建和更新 BillingAccountBinding 资源。

这些角色绑定到项目命名空间(用于项目级结算)或平台命名空间(用于组织级结算)。

获取 kubeconfig 文件

如需针对组织全局集群运行命令,请确保您拥有以下资源:

  1. 登录并生成组织全局集群的 kubeconfig 文件(如果您没有)。

  2. 使用组织全局集群的 kubeconfig 文件的路径替换这些说明中的 ORG_GLOBAL_CLUSTER_KUBECONFIG

创建新结算账号

kubectl

结算账号由其 namenamespace 唯一标识。如需创建 结算账号,请使用自定义资源来建立 namenamespace

  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 Billing 帐号 ID。

    • customConfig:合作伙伴存储其支付配置以向组织收费的自定义配置。customConfig 支持键值对字符串字典,其中包含一个强制性键 payment-config-type

    以下示例展示了针对不同支付配置的 BillingAccount YAML 文件代码段:

    cloudBillingConfig 示例:

    spec:
      paymentSystemConfig:
        cloudBillingConfig:
          accountID: CLOUD_BILLING_ACCOUNT_ID
    

    CLOUD_BILLING_ACCOUNT_ID 替换为您的 Google Cloud 结算账号 ID。

    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 文件。运行 kubectl CLI 以在组织全局集群中应用该资源:

    kubectl --kubeconfig ORG_GLOBAL_CLUSTER_KUBECONFIG apply -f billingaccount.yaml
    

    ORG_GLOBAL_CLUSTER_KUBECONFIG 替换为组织全局集群 kubeconfig 文件。

CLI

如需创建结算账号,请使用 gdcloud billing accounts create 命令。

如需了解详情,请参阅 gdcloud billing accounts create

您必须先将结算账号与组织相关联,然后才能创建任何项目。 这样可确保在组织内创建的所有项目默认继承有效的结算账号。

您还可以将项目明确关联到特定结算账号,以使其与组织的结算账号不同。

如需将组织与 BillingAccount 相关联,请执行以下操作:

  1. 将以下内容添加到 YAML 文件 billingaccountbinding.yaml

    • billingAccountRef 部分中,使用您要关联的 BillingAccount 中的 name 字段的内容填充 name 字段。
    • metadata 部分中,使用 BillingAccount 资源中相同字段的值填充 namespace 字段。在此示例中,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 部分中,使用您要关联的 BillingAccount 中的 name 字段的内容填充 name 字段。
    • metadata 部分中,使用 BillingAccount 资源中相同字段的内容填充 namespace 字段。
    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'

此命令会输出每个 BillingAccountBindingNAMENAMESPACEBillingAccountNameSTATUSSTATUS 字段表示绑定是否处于活跃状态,或者是否存在任何错误。

结算账号层次结构和行为

将结算账号与组织和项目相关联时,适用以下层次结构和行为:

  • 项目级关联优先 :如果特定项目(例如 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. 在项目命名空间中找到 BillingAccountBinding 资源 YAML 文件,以查看关联的结算账号:

    kubectl --kubeconfig ORG_GLOBAL_CLUSTER_KUBECONFIG describe billingaccountbinding billing -n PROJECT_NAME
    
  3. 修改 BillingAccountBinding 以关联到新的结算账号。在 billingAccountRef 部分中,使用在本部分第 1 步中创建的新 BillingAccount 名称填充 name 字段。

    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
    

以下示例展示了一个 BillingAccountBinding YAML 文件,其中账号 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

以下示例展示了经过修改的先前示例中的 BillingAccountBinding YAML 文件,用于关联名为 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. platform 命名空间中找到 BillingAccountBinding 资源 YAML 文件,以查看关联的结算账号:

    kubectl --kubeconfig ORG_GLOBAL_CLUSTER_KUBECONFIG describe billingaccountbinding billing -n platform
    
  3. 修改 BillingAccountBinding 以关联到新的结算账号。在 billingAccountRef 部分中,使用在第 1 步中创建的新 BillingAccount 名称填充 name 字段。

    kubectl --kubeconfig ORG_GLOBAL_CLUSTER_KUBECONFIG edit billingaccountbinding billing -n platform
    
  4. 进行更改后,请确保结算账号已正确更新:

    kubectl --kubeconfig ORG_GLOBAL_CLUSTER_KUBECONFIG describe billingaccountbinding billing -n platform