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 资源价格相对昂贵,最终可能对成本起到关键作用,因此需要用加权平均来评估成本效率,例如:
在判断哪些业务需要优化以及如何优化成本结构,可以先查找 TOP 10 的某种资源浪费,例如资源的 Usage 和 Request 差别较大,可以根据应用监控画像给出推荐的 Request,最后计算出每种资源可节省的成本。
关于节点自动扩容部分,可以衡量一个集群中每个节点,假设 CPU 和 Mem 每增加 1C1G,最终成本达到多少,是否会出现规模效应(规模效应即为资源数量增加,成本并不会爆炸,但是却可以解决装箱问题)。
如有上述需求和问题,您都可以使用 Kubecost 来分析自己的集群成本趋势。
上述图中数字序号标示处相关说明可参考下文对应说明介绍:
上述图中数字序号标示处相关说明可参考下文对应说明介绍:
Kubecost Assets 视图显示了按集群中单个资源细分的 Kubernetes 集群成本(例如,按节点、磁盘和其他资源划分的成本)。
展示月度预估可以节省的金额以及可以节省成本的优化建议数量,即 Overview 页面里面第一个入口。
以 Request 推荐为例,如下面第二张图所示,这里提供了以下三种不同等级的推荐值,并且推荐值与给定的时间窗口也存在关系:
集群基础架构状态评分,建议修复的会标识红色感叹号❗,如下图所示:
Reports 主要保存一些观测数据,观测粒度和 Cost Allocation 里一致,支持按照某种方式聚合/观测数据之后,一键保存。如下图所示:
登录到某个 Node 节点,执行以下命令安装 helm:
curl https:``//raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash
执行以下命令下载 Kubecost helm:
wget https:``//qitian-1251707795.cos.ap-beijing.myqcloud.com/cost-analyzer-1.81.0.tgz
执行以下命令安装 Kubecost:
kubectl create ns kubecost``helm install cost-analyzer cost-analyzer-``1.81``.``0``.tgz -n kubecost
执行以下命令,查看服务 Pod 是否都正常运行。示例如下:
kubectl get pods -n kubecost -o wide
执行结果如下图所示:
http://[服务公网地址]:9090
执行以下命令可卸载 kubecost:
helm uninstall cost-analyzer -n kubecost
本页内容是否解决了您的问题?