自定义成本核算的策略

除默认的成本分摊策略外,成本套件功能还支持自定义成本核算策略。如果您对云上资源成本分摊的要求较高,需要定制分账业务逻辑,您可以编写配置文件自定义资源价格,从而更贴合您的分账业务逻辑。

说明

本功能目前处于灰度中。如需使用,请提交工单申请。

使用场景

自定义成本核算能够帮助您更精细化地进行企业IT成本治理。其典型使用场景如下。

  • 企业内部运维团队批量购买了底层计算资源,然后以转售的形式分发给不同的业务团队。

  • 对于部分企业来说,同规格Pod调度到不同规格节点时将产生费用偏差,希望在业务维度屏蔽资源动态性带来的成本差异。

  • 对于企业的不同业务部门,将相同资源请求量的Pod按不同超卖比例部署于同一台计算节点,要实现部门间差异化的成本核算,需要在计算Pod单价时考虑资源Limit的因素。

为解决上述场景下企业成本核算时的数据定制需求,成本套件提供自定义价格模板功能,您可以通过编辑模板配置Pod的各资源单价,即可聚合出Pod的定价成本。

说明

目前Pod定价成本仅支持以API的形式透出,开启并完成定价配置后,您可以通过API响应的customCost字段获取Pod的定价成本。API的使用方式,请参见通过API获取成本数据概述

前提条件

步骤一:开启cost-exporter自定义价格开关

  1. 登录容器服务管理控制台,在左侧导航栏选择集群

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择工作负载 > 无状态

  3. 在页面上方,切换命名空间为kube-system,在Deployment列表的操作列,单击ack-cost-exporter对应的更多>查看Yaml,在command中增加'--enable-custom-price=true',开启自定义价格功能,然后单击更新image

步骤二:配置定价模板

操作步骤

  1. 使用以下示例代码,创建名为price-template.yaml的文件。

    重要
    • 模板中spec字段下的字段均为可选。如果spec下已配置的所有字段都符合Pod元信息,则判定Pod与该模板匹配。spec为空的模板可以匹配所有Pod。

    • 匹配定价模板时为顺序匹配,即当多个模板和Pod同时匹配时,系统会根据模板YAML自上而下地选定第一个匹配到的模板,用于给Pod定价。

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: price-template
      namespace: kube-system
    data:
      template.yaml: |
        - name: template-nginx
          spec:
            labelSelector:
              app: nginx
            namespaceSelector:
              - default
              - kube-system
            resource:
              cpu: 500m
              memory: 512Mi
              cpu-overcommit-ratio: 2
              memory-overcommit-ratio: 2
          price:
            cpu: 0.2
            memory: 0.03
        - name: template-default
          price:
            cpu: 0.1
            memory: 0.02

    此定价模板表示:

    • 对于集群中同时符合以下条件的Pod,使用名为template-nginx的模板进行定价:

      • 标签包含app:nginx

      • 命名空间为default或kube-system

      • CPU申请量为500 MB,限制量为1 Core

      • 内存申请量为512 MiB,限制量为1 GiB

    • 对于集群中其他Pod,使用名为template-default的模板进行定价。

    相关参数解释如下表所示:

    参数

    说明

    name

    定价模板的名称。

    spec.labelSelector

    待匹配的Pod标签集合,Pod任一标签存在该集合中即认为匹配。

    spec.namespaceSelector

    待匹配的Pod命名空间列表。

    spec.resource.cpu

    Pod的CPU申请量。

    spec.resource.memory

    Pod的内存申请量。

    spec.resource.cpu-overcommit-ratio

    Pod的CPU超卖比,即CPU限制量/CPU申请量。

    spec.resource.memory-overcommit-ratio

    Pod的内存超卖比,即内存限制量/内存申请量。

    spec.price.cpu

    Pod的CPU单价,单位为Core * Hour。

    spec.price.memory

    Pod的内存单价,单位为GiB * Hour。

  2. 执行以下命令,在kube-system命名空间下创建名为price-template的ConfigMap,以应用自定义的定价配置。

    kubectl apply -f price-template.yaml -n kube-system

相关文档

  • 您可以基于集群调度水位估算Pod成本,包括单资源(CPU、内存)估算和权重混合(CPU-内存混合)的资源估算,请参见成本估算策略介绍

  • 您可以通过HTTP API命令查看上报数据,便于您基于成本数据进行二次开发,请参见通过API获取成本数据概述