当前位置: 首页 > 科技观察

使用 Kubecost 和 Kyverno 对云原生工作负载进行成本治理

时间:2023-03-13 06:10:00 科技观察

使用Kubecost和Kyverno的云原生工作负载的成本治理容器。虽然上云让我们的业务快速发展,服务越来越敏捷,但这是有代价的。所有预先分配的云资源,无论是过度利用还是利用不足,都有与之相关的运营成本。组织经常面临管理此类成本的挑战,需要积极主动并采取必要的步骤。解决与成本相关的挑战的一种方法是设置固定的资源配额以限制资源使用。另一种选择是使用合适的工具(云或本地)定期计算所用资源的运行“总成本”。资源配额可能是一个简单的解决方案,但这种一刀切的方法并不适用于所有场景。即使是用于成本识别的工具也能很好地捕获与资源相关的成本信息,但不能扩展到那些需要主动行动的不同场景(即定义满足特定条件的条件;采取行动并报告或纠正),例如使用低代码、闭环自动化。NirmataDevSecOps平台旨在全面应对这些挑战。它是一个开放且易于使用的平台,可在任何基础设施上部署、运行和优化Kubernetes工作负载,支持自助服务、职责分离以及安全和治理控制。在这篇文章中,我们将使用Kyverno作为策略引擎,当kubecost计算的Kubernetes工作负载高于分配值时,它会发出警报。2.KubecostKubecost为使用Kubernetes的团队提供实时成本可视化和洞察力,帮助您持续降低云成本。Kubecost解决了以下挑战:1.成本分配:根据Kubernetes资源划分成本,包括部署、服务、命名空间标签等。在单个视图中或通过单个API端点查看跨多个集群的成本。2.统一成本监控:全面了解Kubernetes的成本以及任何外部云服务或基础设施的成本。可以分摊外部成本,然后围绕所有Kubernetes聚集,以获得整体支出视图。3.优化洞察:洞察哪些资源正在推高成本以及优化这些资源的潜在方法。获取动态建议以在不牺牲性能的情况下减少开支。确定关键基础架构或应用程序更改的优先级,以提高资源效率和可靠性。4.警报和治理:通过与PagerDuty和Slack等工具集成来维护工程工作流程。在成本超支和基础设施中断风险变得麻烦之前快速发现并通知它们。3.Kyverno策略引擎Kyverno是一个开源的Kubernetes原生策略引擎,作为准入控制器运行,可以根据可定制的策略验证、修改和生成任何配置数据。虽然其他通用策略解决方案已针对Kubernetes进行了改造,但Kyverno是专门为Kubernetes设计的。与Kubernetes一样,Kyverno采用声明式管理范式。Kyverno策略是不需要学习新语言的Kubernetes资源。Kyverno通过防止错误配置和增强安全性来保护Kubernetes配置。4.NirmataDevSecOps平台NirmataDevSecOps平台(NDP)集成了使企业能够将Kubernetes标准化为他们的云原生操作系统所需的工具和流程,为运营商、开发人员和安全团队干净地解耦工作流程。该平台通过为开发人员提供自助式安全环境,帮助企业运营团队释放DevOps的敏捷性。NirmataKubernetes平台支持将Kubecost作为身份验证插件。Nirmata开发了CNCF开源项目Kyverno,并在其DevSecOps平台上对其提供本地支持。Kyverno策略引擎是一个强大的工具,可确保遵守安全和运营最佳实践。NDP将用于部署Kubecost附加组件。五、信息汇总接下来介绍集群策略如何使用Kyverno监控Kubernetes命名空间的总运行成本。当总成本高于阈值时,Kyverno会创建违规/失败。总成本信息使用KubecostRESTAPI存储在ConfigMap中。我们在下面详细描述这些组件。首先,在各自的命名空间中部署Kubecost和Kyverno。出于演示目的,我们将有一个名为Nginx的演示命名空间运行NginxWeb服务器的副本。Kubecost还可以使用Nirmata作为DevSecOps平台的附加组件部署(在这种情况下,Kubecost使用OpenEBS-hostpath存储类来创建动态卷)。该链接包含在参考资料部分。6.Demo组件的所有相关文件都存储在Nirmatagitrepo中。1.采集脚本——kubecost-collector.pya。作为Kubernetescron作业在后台运行的Python脚本,用于从Nginx命名空间中的KubecostRESTAPI端点收集成本信息。http://>/model/allocationb.定期更新configmapnamespace-costconfigmap中的cost信息2.ConfigMapa。Kyverno命名空间中的ConfigMap,包含了Nginx命名空间的开销信息3.KyvernoPolicya。Kyverno策略监控存储在configmap中的命名空间-data中,以了解成本值b的变化。如果Nginx命名空间的总成本高于阈值,则创建报告失败。上述组件可以从参考资料部分的Github页面下载。7.Demo工作流程1.创建Nginx命名空间并部署Nginx副本。kubectlcreatenamespacenginxkubectlcreatedeploynginx--image=nginx--replicas=10我们假设Kyverno在Kyverno命名空间中运行,并且Kubecost应用程序已启动并正在运行以向我们提供成本信息。2.使用cm.yamlnamespace-costkubectlcreate-fcm.yaml-nkyverno在命名空间Kyverno中创建一个configmap3.创建更新命名空间成本中的ConfigMap所需的RBAC资源(ServiceAccount、ClusterRole、ClusterRoleBindings)。kubectlcreate-frbac.yaml4.将采集脚本kubecost-collector.py复制到Kubernetes集群中。A.将kubecost-collector放入文件夹后,使用Dockerfile构建Docker镜像。确保使用***kubecost***成本分析器RESTAPI端点更新脚本。mkdircpDockerfilecpkubecost-collector.pydockerbuild-tkubecost-collector上述命令完成后验证kubecost-collector镜像是否存在。dockerimageskubecost-collectorREPOSITORYTAGIMAGEIDCREATEDSIZEkubecost-collectorlatest47a05cdc11bf16分钟前205MBB。kubecost-collector作为Kubernetescron作业运行kubectlcreate-fcron.yaml验证在步骤2中创建的cm的值现在更新为非零,因为kubecost-collector正在从kubecostRESTAPI端点获取实时值。-collector正在从kubecostRESTAPI端点获取实时值。数据====nginx----0.481581BinaryData====5.创建Kyverno集群策略namespace-costkubectlapply-fpolicy.yaml在应用之前在策略中设置适当的成本阈值。由于工作负载是最近的,因此最初的成本可能非常低。6.验证名称空间成本策略是否处于READY状态。kubectlgetcpolNAMEBACKGROUNDACTIONREADYnamespace-costtrueaudittrue该策略应该立即通过,因为新创建的Nginx命名空间的运行成本将低于分配的阈值。kubectlgetcpolrNAMEPASSFAILWARNERRORSKIPAGEclusterpolicyreport1000203m8s7。将Nginx副本增加到更高的值,以便总成本值高于policy.yaml中分配的阈值。或者,您也可以在Nginx命名空间而不是nginxWeb服务器副本中运行CPU/内存密集型工作负载。8、随着Nginx的namespacecost变高,策略会失效。使用kubectl检查polr的策略报告。这可以使用Nirmata政策报告UI进行验证。kubectlgetcpolrNAMEPASSFAILWARNERRORSKIPAGEclusterpolicyreport0100205m8s以上故障可以通过描述查看详细信息。kubectl描述cpolrclusterpolicyreport|grep"Result:\+fail"-B10Timestamp:Nanos:0Seconds:1644935662消息:命名空间运行成本不在定义的阈值内44ab-a935-c5b8cf903e2e结果:失败8.总结当命名空间超过成本阈值时,用户可以向各个团队发送警报并根据特定事件采取行动。Kyverno提供不同的规则(Mutate、Validate、Generate)来作用于用户定义的现有和新工作负载,甚至可以根据策略中定义的条件(Generate)创建新资源。原文链接:https://dzone.com/articles/cost-governance-of-cloud-native-workloads-using-kubecost-and-kyverno译者介绍王志军(besterjun),51CTO社区编辑,国内某云厂商解决方案架构师,10年以上工作经验,长期从事解决方案架构设计、微服务、容器、网络运维等相关工作。专注于云原生、微服务、容器等技术领域。具有丰富的多云和混合云架构规划、设计和实施经验,帮助多家企业成功上云。