使用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端点更新脚本。mkdir
