看得见的成本!1款工具实现K8S资源成本监控可视化

标签: 成本 工具 k8s | 发表时间:2020-11-11 20:44 | 作者:Rancher
出处:http://weekly.dockone.io


本文来自 Rancher Labs


关注我们,第一时间获取技术干货

计算Kubernetes成本的复杂性

采用Kubernetes和基于服务的架构可以为企业带来诸多好处,如团队可以更快地迁移以及应用程序可以更轻松地扩展等。但是这一转变也带来了一些复杂性,比如云成本的可见性。这是由于应用程序及其资源需求常常是动态变化的,并且团队共享核心资源而没有与工作负载挂钩的透明价格。此外,能够充分意识到Kubernetes所带来的优势的企业通常会将资源运行在不同类型的机器上,甚至会运行在多个云提供程序上。

在本文中,我们将了解在企业中为showback/chargeback项目实现成本监控的最佳实践和不同实现方式,以及如何授权用户对这些信息采取行动。我们首先会了解Kubecost,它提供了一种开源的方式来确保跨所有Kubernetes工作负载一致和准确的可见性。



让我们进一步了解最佳实践,以准确分配和监控Kubernetes的工作负载成本以及相关托管服务上的支出。

成本分配

精确分配资源成本是在Kubernetes环境中创建成本可见性和实现高效成本利用的首要步骤。

要正确进行这一步骤,你需要在工作负载层面通过单个容器进行成本分配。工作负载分配完成后,通过汇总不同的工作负载集合,成本可以正确地分配给各个团队、部门甚至个人开发者。在工作负载层面的成本分配框架如下所示:



让我们一点点拆解这个框架。

资源消耗的平均数量由Kubernetes scheduler进行计算或者由云提供程序提供,这取决于被测量的特定资源。我们建议根据request和usage的最大值来计算内存和CPU分配。这样就能够反映出由Kubernetes scheduler本身所预留的资源量。另一方面,诸如负载均衡器和持久卷等资源会严格基于由提供程序所提供的数量。

Kubernetes API可以直接计算出资源消耗的时间段。这由资源(如内存、CPU和GPU等)在Running状态所消耗的时间决定。要让数据对云chargeback来说足够精确,我们建议团队将这些数据与云提供程序提供的特定云资源(如节点)所花费的时间进行协调,保持一致。在之后的部分我们将对此进行更多介绍。

资源价格是通过观察环境中每种特定资源的成本来确定的。例如,us-east-1 AWS区域中m5.xlarge spot实例的CPU小时价格与同一实例的按需价格不同。

使用这一框架可以在各个工作负载之间适当分配成本,那么它们就可以通过任何Kubernetes概念(如命名空间、标签、注释或controller)轻松聚合。

Kubernetes成本监控

通过Kubernetes概念(如pod或controller)分配的成本,你可以开始准确地将支出映射到任何内部业务层级,如团队、产品、部门或成本中心。企业通常的做法是通过Kubernetes命名空间来划分团队工作负载,而其他的做法可能使用Kubernetes标签或注释来识别工作负载属于哪个团队。

在不同应用、团队等之间进行成本监控的另一个关键因素是确定谁应该为闲置的容量付费。具体而言是指仍在向企业计费但未使用的集群资源。通常情况下,这些费用要么计入中央基础设施成本中心,要么按比例分配给应用团队。将这些成本分配给负责供应决策的团队,通过调整激励措施来拥有一个高效规模的集群,从而产生积极的效果。

核对云账单

Kubernetes提供了大量实时数据。这让开发人员可以直接访问成本指标。尽管这些实时数据通常都是精确的,但它可能与云提供商的计费数据不完全一致。例如,在确定AWS spot节点的小时费率时,用户需要等待Spot数据源或成本和使用报告来确定准确的费率。出于计费和收费的目的,你应该将数据与实际账单进行核对。



通过Kubecost获得更好的可见性和治理

我们已经了解了如何观察数据以计算Kubernetes工作负载的成本。还有另一个方法是利用Kubecost,这是一个建立在开源基础上的成本和容量管理解决方案,提供了对整个Kubernetes环境的可见性。Kubecost为Kubernetes工作负载以及它们所消耗的相关管理服务(如S3或RDS)提供成本可见性和洞察力。该产品收集Kubernetes的实时数据,还能与你的云计费数据进行核对,以反映你支付的实际价格。



有了像Kubecost这样的解决方案,你可以授权应用工程师做出明智的实时决策,并开始实施即时和长期的实践,以优化和治理云支出。这包括在不影响性能的情况下采用成本优化的方案、实施Kubernetes预算和告警、showback/chargeback项目甚至基于成本的自动化。

Kubecost社区版可以免费使用,并且具有上述所有功能。你可以在Rancher应用商店中找到Kubecost Helm chart,轻松完成部署。借助Rancher,你可以获得Kubernetes集群可视化和绝佳控制力的体验,与此同时Kubecost为你提供了对支出和如何优化成本的直接观察。它们共同为使用Kubernetes的团队提供了一个完成的成本管理解决方案。

相关 [成本 工具 k8s] 推荐:

看得见的成本!1款工具实现K8S资源成本监控可视化

- - DockOne.io
本文来自 Rancher Labs. 关注我们,第一时间获取技术干货. 计算Kubernetes成本的复杂性. 采用Kubernetes和基于服务的架构可以为企业带来诸多好处,如团队可以更快地迁移以及应用程序可以更轻松地扩展等. 但是这一转变也带来了一些复杂性,比如云成本的可见性. 这是由于应用程序及其资源需求常常是动态变化的,并且团队共享核心资源而没有与工作负载挂钩的透明价格.

CentOS7 安装 K8S

- - 企业架构 - ITeye博客
前提:VirtualBox CentOS7. 物理机IP   192.168.18.8. 虚拟机1IP:192.168.18.100(VMaster master). 虚拟机2IP:192.168.18.101(VServer1 node1). 虚拟机3IP:192.168.18.102(VServer2 node2).

k8s docker集群搭建 - CSDN博客

- -
一、Kubernetes系列之介绍篇.     - 一次构建,到处运行. 2.什么是kubernetes.   首先,他是一个全新的基于容器技术的分布式架构领先方案. Kubernetes(k8s)是Google开源的容器集群管理系统(谷歌内部:Borg). 在Docker技术的基础上,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等一系列完整功能,提高了大规模容器集群管理的便捷性.

深入掌握K8S Pod - Yabea - 博客园

- -
K8S configmap介绍. Pod是k8s中最小的调度单元,包含了一个“根容器”和其它用户业务容器. 如果你使用过k8s的话,当然会了解pod的基本使用,但是为了更好的应用,你需要深入了解pod的配置、调度、升级和扩缩容等. pod包含一个或多个相对紧密耦合的容器,处于同一个pod中的容器共享同样的存储空间、IP地址和Port端口.

使用kube-proxy让外部网络访问K8S service的ClusterIP

- - zzm
kubernetes版本大于或者等于1.2时,外部网络(即非K8S集群内的网络)访问cluster IP的办法是:. 修改master的/etc/kubernetes/proxy,把KUBE_PROXY_ARGS=”“改为KUBE_PROXY_ARGS=”–proxy-mode=userspace”.

k8s外网如何访问业务应用之Service 池化pod

- - IT瘾-geek
一、废话:先讲述一个k8s重要概念,我觉得这个概念是整个k8s集群实现微服务的最核心的概念. Service定义了Pod的逻辑集合和访问该集合的策略,是真实服务的抽象. Service提供了一个统一的服务访问入口以及服务代理和发现机制,用户不需要了解后台Pod是如何运行. 只需要将一组跑同一服务的pod池化成一个service,k8s集群会自动给这个service分配整个集群唯一ip和端口号(这个端口号自己在yaml文件中定义),一个service定义了访问pod的方式,就像单个固定的IP地址和与其相对应的DNS名之间的关系.

K8S的SDN容器网络解决方案及其价值

- - SegmentFault 最新的文章
编者按:关于容器网络的解决方案业界已经有较多的讨论,笔者无意继续赘述. K8S及其网络模型体现了鲜明的解耦设计思想,采用SDN技术实现K8S容器网络,并与相应的生态组件形成SDN监管控一体化解决方案,可以更好地提高整个系统的运营水平,更有效地提升企业的核心竞争力. 本文拟抛砖引玉,从K8S的网络实现入手,重点阐述SDN在容器网络中的应用价值.

构建生产就绪的K8S集群的16点清单

- - SegmentFault 最新的文章
Kubernetes是用于构建高度可扩展系统的强大工具. 结果,许多公司已经开始或正在计划使用它来协调生产服务. 不幸的是,像大多数强大的技术一样,Kubernetes也很复杂. 我们整理了以下清单,以帮助你生产环境最佳实践Kubernetes. Kubernetes提供了一种编排容器化服务的方法,因此,如果您没有按顺序实践你的容器,那么集群一开始就不会处于良好状态.

9 个技巧,解决 K8s 中的日志输出问题

- - DockOne.io
作者 | 元乙  阿里云存储服务技术专家. 导读:近年来,越来越多的同学咨询如何为 Kubernetes 构建一个日志系统,或者是来求助在此过程中遇到一系列问题如何解决,授人以鱼不如授人以渔,于是作者想把这些年积累的经验以文章的形式发出来,让看到文章的同学少走弯路. K8s 日志系列文章内容偏向落地实操以及经验分享,且内容会随着技术的迭代而不定期更新,本文为该系列文章的第 3 篇.

在 k8s 中对指定 Pod 进行抓包

- -
Distributed Tracing时,遇到了一些问题,需要深入到底层去进行网络抓包分析报文. 但是应用时运行在 k8s 集群中的,与传统的在一台机器上跑一个进程直接通过 tcpdump 抓包方式略有不同. 最初对容器的理解不深刻认为一定要进入到这个容器抓包,而进入容器内并没有 tcpdump 等基础工具,相当于自己还是把容器当作虚拟机在看待.