https://github.com/team-soteria/rback
用来对 kubectl 的输出结果进行可视化展示,可以输出为 .dot 格式,也可以输出为 .png 或任何格式。
linux上安装使用
# 安装
curl -sL https://github.com/team-soteria/rback/releases/download/v0.4.0/linux_rback -o rback
chmod +x rback && sudo mv rback /usr/local/bin
# 运行rback,并将其输出存储在.dot文件
kubectl get sa,roles,rolebindings,clusterroles,clusterrolebindings --all-namespaces -o json | rback > result.dot
Kubecost,它的存在旨在满足不断增长的Kubernetes用户对资源成本可视化和优化的需求。通过提供实时的成本分析、可扩展性建议和财务预测等功能,Kubecost帮助用户在运行Kubernetes工作负载时更加高效地管理资源和降低成本。
成本治理是持续实现策略以控制成本的过程。在 Kubernetes 上下文中,组织可通过多种方式控制和优化成本。其中包括原生 Kubernetes 工具,该工具用于管理和治理资源使用情况和消耗情况,并主动监视和优化底层基础结构。
kubecost 是目前较优秀的开源 Kubernetes 成本分析工具,它提供了丰富的功能和仪表板,帮助用户更好地理解和控制其容器化工作负载的成本。
kubecost 目前支持 阿里云、AWS 等云厂商对接,它能够提供集群中命名空间、应用等各类资源成本分配,可以将成本分配范围限定为部署、服务、标签、Pod 或命名空间,这为向群集用户收费或显示群集用户提供了灵活性。用户还可以基于这些信息在 Kubecost 中设置预算和警报,帮助运维和财务管理人员进一步实现成本管理?
# 安装
helm repo add kubecost https://kubecost.github.io/cost-analyzer/
helm repo update
helm upgrade --install kubecost kubecost/cost-analyzer --namespace kubecost --create-namespace
# 检查pods
kubectl get pods -n kubecost
# 使用 ingress 暴露 kubecost-cost-analyzer 服务
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
name: kubecost-ing
namespace: kubecost
spec:
ingressClassName: nginx
rules:
- host: kubecost.kubernets.cn
http:
paths:
- backend:
service:
name: kubecost-cost-analyzer
port:
number: 9090
path: /
pathType: Prefix
打开浏览器并指向 http://kubecost.kubernets.cn 以打开 Kubecost UI。在 Kubecost UI 中,选择群集以查看成本分配信息
?网络成本核算
networkCosts.enabled=true
想捕获网络成本并根据群集中的名称空间或租户进行隔离,这是一个非常重要的标识。
通常,启用此标识他会部署一个 DaemonSet,将通过节点的流量映射到成本模型,并将其用于成本报告中。网络费率使用云提供商费率进行调整。
有关如何工作的详细信息,请参见此处(https://docs.kubecost.com/using-kubecost/navigating-the-kubecost-ui/cost-allocation/network-allocation)。
收集的网络数据分为不同类别,例如互联网出口,跨区域出口和跨集群出口。也可以覆盖这些网络分类并自行设置。
重用节点导出器和度量服务(prometheus监控)
prometheus.kubeStateMetrics.enabled=false
prometheus.nodeExporter.enabled=false
prometheus.serviceAccounts.nodeExporter.create=false
Prometheus,Grafana 和 Metrics Server 也随附 Kubecost 默认安装。
有多种方法可以重新利用您现有的 Prometheus 和 Grafana 设置,但过程非常繁琐(https://docs.kubecost.com/getting-started#custom-prom)。
它需要对Prometheus scrape配置、重新标记、记录规则等进行一些修改。
Kubecost安装的建议方法是重用集群中现有的节点导出器和度量服务器(如果可用),并设置Kubecost安装附带的单独Prometheus和Grafana。
数据保留
prometheus.server.retention=15d
prometheus.server.persistentVolume.size=32Gi
?默认情况下,只有 15 天的度量标准保留和 32G 永久卷可用于 Prometheus 度量标准保留。大家可以使用以下公式根据保留期限来计算存储需求:
needed_disk_space = retention_time_minutes * ingested_samples_per_minutes * bytes_per_sample
如上这些数据,大家也可以从这边拿到官方数据:https://docs.kubecost.com/install-and-configure/advanced-configuration
?Kubecost 功能
官方数据:https://docs.kubecost.com/using-kubecost/navigating-the-kubecost-ui
主要分为:
Kubecost UI(首页):UI是由几个主要的仪表板提供的可视化费用模块,以及多个统计和治理的工具。
Assets Dashboard(资产大盘):显示了Kubernetes集群成本,这些成本按集群中的单个支持资产细分(例如,按节点、磁盘和其他资产划分的成本)。
Clusters dashboard(集群大盘):提供了所有受监控集群的列表,以及在云账单中检测到的其他集群。
Cloud Cost Explorer(云成本资源管理器):通过从这些提供商的成本和使用情况报告(CUR)或其他云计费报告中提取。
UI界面
官方数据:https://docs.kubecost.com/using-kubecost/navigating-the-kubecost-ui?
Assets Dashboard(资产大盘)
仪表板显示了 Kubernetes 集群成本,这些成本按集群中的单个支持资产细分(例如,按节点、磁盘和其他资产划分的成本)。它用于识别一段时间内的支出驱动因素,并审核分配数据。该视图还可以按服务、标记/标签等选择性地显示集群外资产。?
Cloud Cost Explorer(云成本资源管理器)
官方数据:https://docs.kubecost.com/using-kubecost/navigating-the-kubecost-ui/cloud-costs-explorer
可以为所有 Kubernetes 对象(例如 Deployments,StatefulSets 等)过滤成本。如果大家正在使用多租户的方式来区分namespace,则可以基于名称空间过滤此视图,并使所有租户进行成本分配。
资源/成本健康度
Kubecost 的一个非常有用的功能,因为它提供了一些有价值的建议,可以节省很多钱。这些报告可能并非每次都非常准确,但是它们或多或少地被概括了下来,将帮助您确定集群中某些部分的节省量。?
节省建议实际上主要涵盖以下几个方面:
节点和容器的大小调整
它会生成有关计算节点大小的建议以及带有超额配置请求的 Pod 的报告。这些建议可以帮助大家调整节点和 Pod 的请求,更好地利用集群容量。
未充分利用的节点报告
提供了当前未充分利用的节点报告,并且可以在其他节点中迁移或调整其工作负载。这是一份非常重要的报告。集群自动缩放器缩减了集群的规模,但是它具有某些检查功能,可用于识别并缩减资源浪费的节点。该报告实际上为咱们提供了有关为什么即使节点未被充分利用也无法缩小规模的详细信息。
未充分利用的存储
提供了有关未声明的持久卷以及连接到节点且当前未充分利用的任何本地存储的详细信息
kubecost 成本统计原理
CPU/内存/GPU/存储分析
Kubecost 通过 AWS/GCP/AliCloud 等云服务商 API 动态获取各 region/zone 的上述四项资源的每小时成本,或者通过 json 文件静态配置这几项资源的成本。kubecost 的成本统计粒度为 container,kubecost 根据每个容器的资源请求 requests 以及资源用量监控进行成本分配,对于未配置 requests 的资源将仅按实际用量监控进行成本分配?
网络成本分析
对于提供线上服务的 Kubernetes 集群,网络成本(跨区/跨域传输的流量成本,以及 NAT 网关成本)很可能等于甚至超过计算成本。kubecost 支持使用 Pod network 监控指标对整个集群的流量成本进行拆分,kubecost 会部署一个绑定 hostNetwork 的 daemonset 来采集需要的网络指标,提供给 prometheus 拉取,再进行进一步的分析?
?主要特点和功能:
1)自动化成本分析:Kubecost能够自动收集和分析Kubernetes集群中各个资源的使用情况,并根据不同的维度(如命名空间、标签、应用程序等)提供详细的成本报表和可视化。
2)资源优化建议:Kubecost可以根据资源使用情况和成本数据,为用户提供针对性的优化建议。比如,它可以识别出未使用的资源、过度分配的资源以及可能存在的性能瓶颈。
3)预算管理:Kubecost允许用户设置和管理预算,通过监控实际使用情况与预算的差异,帮助用户控制和优化资源的开销。
4)多维度报表和可视化:Kubecost提供了丰富的报表和可视化功能,使用户可以从不同角度来查看和分析资源使用情况和成本数据。这些报表可以帮助用户更好地理解资源消耗和成本分布的模式。
5)集成平台支持:Kubecost可以与多个云平台和监控工具集成,以获取更全面的资源使用和成本数据。它支持与Prometheus、Grafana等工具的集成,使用户可以将Kubecost与现有的监控和告警系统整合使用。
?GitHub - hidetatz/kubecolor: colorizes kubectl output
kubecolor为kubectl命令输出着色,不执行任何其他操作。kubecolor在内部调用kubectl command并尝试对输出进行着色
linux下载安装
wget https://github.com/dty1er/kubecolor/releases/download/v0.0.25/kubecolor_0.0.25_Linux_x86_64.tar.gz
tar -xf kubecolor_0.0.25_Linux_x86_64.tar.gz
mv kubecolor /usr/local/bin
echo "alias kubectl="kubecolor"">>~/.bash_profile && source ~/.bash_profile
?当 kubecolor 输出 tty 不是标准输出时,它会自动禁用着色
例如,如果您正在运行 kubecolor get pods > result.txt 或 kubecolor get pods | grep xxx,则输出将传递到文件或其它命令,因此不会着色。
在这种情况下,您可以通过传递 --force-colors 标志来强制 kubecolor 进行着色。