tencent cloud

文档反馈

在 TKE 上使用 Kubecost 进行成本管理

最后更新时间:2022-04-21 18:38:43
该文档目前已无效,请参考该产品文档总览页。

    概述

    Kubernetes 作为 IaaS 和 PaaS 的中间层,当前对于资源的计费依托于 IaaS 层的资源计费。一个 Kubernetes 的集群,按照其购买的节点实例 CVM 计费。而用户则使用的是 Pod,在实际场景中,通常需要面临这些问题,一个 Pod 如何承担成本、如何评估集群的成本、如何进行成本预测和优化建议。针对上述问题,我们推荐用户使用 Kubecost 进行解决。

    Kubecost 是一款成本分析工具,可以为集群成本提供洞察、分析、推荐和建议。作为您优化集群成本的财务分析师,Kubecost 可以为您提供全面的成本分析报告。本文将介绍 Kubecost 使用场景、优化建议、详细的功能说明以及如何安装使用。

    使用场景

    评估每种资源消耗的成本

    成本支出,即为计算 Pod 资源请求(Request)或者使用量(Usage)消耗的成本。根据不同类型的资源,按照 Pod 所在 Node 的 IaaS 计价方式作为基本参考,来计算 Pod 所使用的成本费用。

    目前云厂商的 Node 计费模式一般是包年包月(Month)按量计费(Hour)竞价实例。当 Kubecost 计算 Pod 成本时,即使是相同请求量的 Container,在不同类型的 Node 上成本消耗也不一致。

    上述三种计费模式中,由于用户购买的是一个整体实例,因此按照实例计费,不针对单独一个资源计费。而通过使用 Kubecost,可以参照模型分析资源类型分摊成本、每种资源分摊成本。

    例如,一个云厂商提供的某种 Node(虚拟机、物理机),CPU 为1核(C),内存 Mem 为1G,价格为20元/月。

    通过使用 Kubecost,需要添加云厂商说明的每种资源的基础价格,例如 CPU、Mem 价格。或者按照业务需要配置对应的比例,例如1C:1G 的价格比是3:1,CPU/Mem=3:1等。可以得知分摊到每种资源(CPU/GPU/Mem/PV/Network)的计费。

    具体计算公式如下:
    sum (normalized_resource_price[i] × resource_quantity[i]) = node_price

    因此得到,整个 Node 的价格为20元/月,按照 CPU 15元/月、Mem 5元/月进行分摊成本。

    评估成本效率

    成本加权平均评估效率,由于每一种资源的成本权重不同(成本权重即为不同类型的资源,售卖的价格不同。例如 CPU 和 GPU 等计算资源价格相对较高,Mem 价格相对较低,而 Disk 价格则更低),相同的资源利用效率,不同资源对成本的贡献度也不一样。

    例如,100%的 Disk 利用率,但是由于磁盘相对便宜,对最终的成本控制的贡献就较低。但如果是 CPU 资源,即使资源利用率为30%,由于 CPU 资源价格相对昂贵,最终可能对成本起到关键作用,因此需要用加权平均来评估成本效率,例如:

    • Mem 的效率:MemEfficiency = MemUsage / MemRequest
    • CPU 的效率:CPUEfficiency = cpuUsage / cpuRequest
    • Mem 的成本效率:MemCostEff = a.MemEfficiency() × a.MemTotalCost()
    • CPU 的成本效率:cpuCostEff = a.CPUEfficiency() × a.CPUTotalCost()
    • 总成本效率:totalEff=(MemCostEff + cpuCostEff) / (a.CPUTotalCost() + a.MemTotalCost())

    优化建议

    在判断哪些业务需要优化以及如何优化成本结构,可以先查找 TOP 10 的某种资源浪费,例如资源的 Usage 和 Request 差别较大,可以根据应用监控画像给出推荐的 Request,最后计算出每种资源可节省的成本。

    评估经济学边际成本

    关于节点自动扩容部分,可以衡量一个集群中每个节点,假设 CPU 和 Mem 每增加 1C1G,最终成本达到多少,是否会出现规模效应(规模效应即为资源数量增加,成本并不会爆炸,但是却可以解决装箱问题)。

    如有上述需求和问题,您都可以使用 Kubecost 来分析自己的集群成本趋势。

    前提条件

    • 已创建容器服务 TKE 集群。如果您还未创建集群,请参见 快速创建一个标准集群
    • 已使用命令行工具 Kubectl 连接集群。如果您还未连接集群,请参见 连接集群

    功能说明

    • Kubecost 主要给出 cost 分析,包括 Service、Application、Pod、Workload 等各种标签类型维度分析。
    • 资源分配和使用。
    • 包含一个集群健康检查的功能,类似集群巡检和健康检查。

    Overview


    上述图中数字序号标示处相关说明可参考下文对应说明介绍

    1. 月度预估可以节省的金额以及可以节省成本的优化建议数量
    2. 月度账单和成本效率
    • 月度账单:基于过去7天资源消耗的预测值
    • 成本效率:基于过去2天的成本效率。
      计算方法:(每种资源利用率 × 各自的价格之和)/ 总价格
    1. 月度集群账单。账单维度包括 Total cost、Compute、Memory、Storage。
    2. 资源效率
      • 基于当前的资源提供量和过去7天的资源使用量计算。
      • 资源分成三个维度: Compute、Memory、Storage。
      • 成本构成四个维度:空闲、系统、应用、其他。
    3. Controller Allocation:按 Controller 分类,通过过去两天计算每个 Controller 的成本。
    4. Service Allocation:按 Service 分类,通过过去两天计算每个 Service 的成本。
    5. Namespace Allocation:按 Namespace 分类,通过过去两天计算每个 NS 的成本以及成本效率。
      计算方法:每种资源利用率 × 各自的价格之和 / 总价格
    6. Infrastructure health:集群基础架构状态评分,比较像我们的集群巡检,给出一些优化建议,例如:
      • Worker nodes 跨可用区部署。
      • Master 多副本。
      • 检测 CPU 被 throttling 的 Pod。

    Cost Allocation

    img
    上述图中数字序号标示处相关说明可参考下文对应说明介绍

    1. 显示的指标
      • 累积成本:在选定时间窗口的实际/历史支出。
      • 费率指标:每小时、每天或每月的成本,基于所选时间窗口中的样本,也用于预计成本。
    2. 聚合
      Cost Allocation 可以查看所有原生 Kubernetes 概念的分配支出,例如 NS、Label、Service。 Cost Allocation 还允许将成本分配给 team、product/project、department、or environment 等组织概念。
    3. 时间窗口
      用于衡量成本的指定时间窗口。默认情况下会缓存 1d、2d、7d 和 30d 查询的结果。
    4. 过滤
      按 NS、clusterId 、lable、Pod prefix 过滤资源,以更密切地查询成本支出的关键位置。
    5. Allocate idle costs(分配空闲成本)
      Allocate idle costs 按比例将空闲或空闲集群成本分配给租户。具体来说,这适用于已配置但未被租户完全使用或请求的资源。例如,如果您的集群的利用率仅为25%,以资源的最大使用量和 Request 来衡量,则 Allocate idle costs 会按比例增加每个 pod/NS/Deployment 的成本到原来的4倍。
    6. 图表选择
      切换到条形图视图以查看所选窗口的汇总成本,或切换到时间序列视图以查看成本随时间的变化。
    7. 附加选项
      查看其他选项以将成本数据导出为 CSV 或查看帮助文档。

    Assets

    img

    Kubecost Assets 视图显示了按集群中单个资源细分的 Kubernetes 集群成本(例如,按节点、磁盘和其他资源划分的成本)。

    Savings

    展示月度预估可以节省的金额以及可以节省成本的优化建议数量,即 Overview 页面里面第一个入口。

    以 Request 推荐为例,如下面第二张图所示,这里提供了以下三种不同等级的推荐值,并且推荐值与给定的时间窗口也存在关系:

    • Development:the aim is 80% resource utilization at 85th-percentile resource usage over the given window。
    • Production:the aim is 65% resource utilization at 98th-percentile resource usage over the given window。
    • High-availability:the aim is 50% resource utilization at 99.9th-percentile resource usage over the given window。

    img
    img

    Health

    集群基础架构状态评分,建议修复的会标识红色感叹号❗,如下图所示:
    img

    Reports

    Reports 主要保存一些观测数据,观测粒度和 Cost Allocation 里一致,支持按照某种方式聚合/观测数据之后,一键保存。如下图所示:

    操作步骤

    安装 helm

    登录到某个 Node 节点,执行以下命令安装 helm:

    curl https:``//raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash
    

    下载 Kubecost helm

    执行以下命令下载 Kubecost helm:

    wget https:``//qitian-1251707795.cos.ap-beijing.myqcloud.com/cost-analyzer-1.81.0.tgz
    

    安装 Kubecost

    1. 执行以下命令安装 Kubecost:

      kubectl create ns kubecost``helm install cost-analyzer cost-analyzer-``1.81``.``0``.tgz -n kubecost
      
    2. 执行以下命令,查看服务 Pod 是否都正常运行。示例如下:

      kubectl get pods -n kubecost -o wide
      

      执行结果如下图所示:
      img

    更改服务访问方式

    1. 登录 容器服务控制台
    2. 单击对应的集群 ID/名称,进入集群管理页面。
    3. 单机服务和路由>Service进入 Service 页面。
    4. 找到您想要更改的 Service,在其右侧操作栏下单击更新访问方式进入更新访问方式页面。
    5. service cost-analyzer-cost-analyzer 的访问方式为负载均衡方式,更新服务访问方式之后会得到一个公网 IPv4 地址,便可在公网进行访问。
    • 访问地址: http://[服务公网地址]:9090
    • 初始用户名和密码:admin、admin。

    卸载

    执行以下命令可卸载 kubecost:

    helm uninstall cost-analyzer -n kubecost
    
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持