首页 > 其他分享 >Kubernetes 生产环境 必备3个降本增效方法

Kubernetes 生产环境 必备3个降本增效方法

时间:2023-09-12 14:36:45浏览次数:36  
标签:Kubernetes 必备 CPU 降本增效 VPA 自动 HPA pod Autoscaler

从技术上讲,容器化应用能该帮助组织更具有成本的优势,但Kubernetes到处布满了成本陷阱,可能会使你超出预算。幸运的是,有一些策略可以控制云成本,自动伸缩就是其中之一。Kubernetes带有三个内置的自动伸缩机制来帮助你做到这一点。它们配合得越好,运行应用程序的成本就越低。

1.Pod水平自动扩缩(HPA)

Pod 水平自动扩缩(HorizontalpodAutoscaler) 可以基于CPU利用率自动扩缩 ReplicationController、Deployment、ReplicaSet 和 StatefulSet 中的pod数量。除了CPU利用率,也可以基于其他应程序提供的 自定义度量指标 来执行自动扩缩。

生产环境中,许多应用程序的使用情况会出现波动,这意味着实时添加或删除pod副本会带来更好的成本收益。这就是 HorizontalpodAutoscaler (HPA) 通过自动执行此操作来提供帮助的地方。

何时使用 HPA?

它非常适合扩展无状态应用程序,当然也可以用于有状态应用。如果将 HPA 与Cluster Autoscaler(CA)结合使用,能够为经常变化的工作负载获得最大的成本节约。当pod数量减少时,这将减少活动节点的数量。

HPA 是如何工作的?

HPA 监控pod以了解pod副本的数量是否需要更改。为了确定这一点,它采用每个pod指标值的平均值,并检查删除或添加副本,是否会使该值更接近目标。

例如,如果你部署的目标CPU利用率为50%,而现在你有五个pod在那里运行,则平均CPU利用率为 75%。为了使pod平均值更接近你的目标,HPA 控制器将增加三个副本。

HPA 最佳实践

  • 为 HPA 提供每个pod资源指标:需要在Kubernetes集群中安装 metrics-server。
  • 为每个容器配置值:HPA 根据观察到的pod的CPU利用率值(来自单个pod的资源请求的百分比)做出扩展决策。如果你没有包含某些容器的值,则计算将不准确并可能导致出现糟糕的扩展决策。
  • 使用自定义指标:HPA 扩展决策的另一个来源是自定义指标。HPA 支持两种类型的自定义指标:pod 指标和对象指标。确保使用正确的目标类型。你还可以使用来自第三方监控系统的外部指标。

Kubernetes  生产环境 必备3个降本增效方法_Pod

2. Pod垂直自动扩缩 (VPA)

Vertical Pod Autoscaler(VPA),即垂直 Pod 自动扩缩容,它根据容器资源使用率自动设置 CPU 和 内存 的requests,从而允许在节点上进行适当的调度,以便为每个 Pod 提供适当的资源。它既可以缩小过度请求资源的容器,也可以根据其使用情况随时提升资源不足的容量。

这种自动缩放机制增加和减少了pod容器的CPU和内存资源请求,以使分配的集群资源与实际使用情况保持一致。VPA 还需要访问Kubernetes指标服务器,因为它仅替换由副本控制器管理(Replication Controller)的pod。

提示:

如果你的 HPA 配置没有使用CPU或内存来设置其扩展目标,请同时使用 VPA 和 HPA。

何时使用 VPA?

工作负载可能会在某个时候遇到高利用率,但不断增加其请求限制,不是一个好办法。你可能会浪费CPU或内存资源并限制运行它们的节点。将工作负载分布到多个应用程序实例有时候也是很棘手的,这就是 Vertical Pod Autoscaler 的帮助所在。

VPA 是如何工作的?

VPA 部署由三个组件组成:

  • Recommender
  • Updater
  • Admission Controller:在创建pod时覆盖其资源请求


由于Kubernetes不允许更改正在运行的pod的资源限制,因此 VPA 首先终止旧的pod,然后将更新的值注入新的pod规范。

VPA 最佳实践

  • 避免在Kubernetes的1.11版本之前使用
  • 使用updateMode:Off运行 VPA,以了解你要自动缩放的pod的资源使用情况。这将为你提供推荐的CPU和内存请求,也是以后调整的重要基础。
  • 如果工作负载经常出现高使用率和低使用率的峰值,则 VPA 可能会过于激进,因为它可能会不断地一遍又一遍地替换pod。在这种情况下,使用HPA 效果更好

3. Cluster Autoscaler(CA)

Cluster Autoscaler 在K8S集群中,通过增加/删除其中的Node,达到集群扩缩容的目的。由于 Cluster Autoscaler 控制器工作在基础设施级别,因此它需要具备添加和删除基础设施的权限,你应该安全地管理这些授权信息(例如,遵循最小权限原则)。

何时使用集群自动扩缩器?

如果你希望通过动态扩展节点数量,以最大化当前集群利用率来优化成本,则此自动扩展机制非常有效。对于旨在扩展和满足动态需求的工作负载而言,它是一款出色的工具。

Cluster Autoscaler 如何工作?

它会检查不可调度的pod,然后计算是否可以整合当前部署的所有pod,以在较少数量的节点上运行它们。如果 Cluster Autoscaler 识别出具有可以重新调度到集群中其他节点的pod的节点,它会驱逐它们并删除备用节点。

集群自动扩缩器最佳实践

  • 部署 Cluster Autoscaler 时,要与之相匹配的Kubernetes版本一起使用。(兼容性列表)。
  • 检查集群节点是否具有相同的CPU和内存容量:否则集群自动缩放器将无法工作,因为它假设集群中的每个节点都具有相同的容量。
  • 确保自动缩放的pod都具有指定的资源请求

总结

自动缩放机制对于控制云成本非常有价值,但它们需要大量的手动配置:

  • 防止 HPA 和 VPA 冲突:你需要检查你的 HPA 和 VPA 策略是否最终发生冲突。密切关注成本,以防止它们失控。
  • 平衡三种机制:你需要平衡三种机制的组合,以确保工作负载支持峰值负载,并在负载较低时将成本保持在最低水平。

标签:Kubernetes,必备,CPU,降本增效,VPA,自动,HPA,pod,Autoscaler
From: https://blog.51cto.com/u_64214/7445228

相关文章

  • Kubernetes 集群灾备环境部署
    etcd是kubernetes集群极为重要的一块服务,存储了kubernetes集群所有的数据信息,如Namespace、Pod、Service、路由等状态信息。如果etcd集群发生灾难或者etcd集群数据丢失,都会影响k8s集群数据的恢复。因此,通过备份etcd数据来实现kubernetes集群的灾备环境十分重要。一、etc......
  • Kubernetes 集群的优化 节点配额和内核参数调整 自动增加etcd节点 Kube APIServer 配
    一、节点配额和内核参数调整对于公有云上的Kubernetes集群,规模大了之后很容器碰到配额问题,需要提前在云平台上增大配额。这些需要增大的配额包括:虚拟机个数vCPU个数内网IP地址个数公网IP地址个数安全组条数路由表条数持久化存储大小参考gce随着node节点的增加master节点的配......
  • 图解 Kubernetes 中应用平滑升级4种方式
    如果你已经使用Kubernetes一段时间了,则可能需要考虑计划定期升级。从Kubernetes1.19开始,每个开源版本都提供一年的补丁。你需要升级到最新的可用次要版本或补丁版本才能获得安全性和错误修复。但是,如何在不停机的情况下升级基础架构的关键部分呢?本文将指导你了解在任何环境中......
  • kubernetes部署mongoDB 单机版 自定义配置文件、密码、日志路径等
    来源:https://aijishu.com/a/1060000000097166官方镜像地址: https://hub.docker.com/_/mong...docker版的mongo移除了默认的/etc/mongo.conf,修改了db数据存储路径为/data/db.创建configmap配置,注意不能加fork=true,否则Pod会变成Completed。apiVersion:v1kind:ConfigMap......
  • 如何像 Sealos 一样在浏览器中打造一个 Kubernetes 终端?
    作者:槐佳辉。Sealosmaintainer在Kubernetes的世界中,命令行工具(如kubectl和helm)是我们与集群交互的主要方式。然而,有时候,我们可能希望能够在Web页面中直接打开一个终端,执行这些命令,而不需要在本地环境中安装和配置这些工具。本文将深入探讨如何通过Kubernetes自定义资......
  • 关于Kubernetes-v1.23-pod-生命周期-postStart-preStop-terminationGracePeriodSecond
    我们在一个pod的yaml配置文件中,有时会看到,terminationGracePeriodSeconds选项,与containers:同级,一般可以放于spec:下面即可是当pod,变为删除的状态后,会给pod一个宽限期,让pod去执行一些清理或者销毁操作另外还有两个选项,postStart,preStop,这两个是位于lifecycle,属于pod生命周期......
  • Debezium系列之:在 Kubernetes 上部署 Debezium
    这Debezium系列之:在Kubernetes上部署Debezium一、概述二、先决条件三、为数据库创建Secrets四、部署ApacheKafka五、部署数据源六、部署Debezium连接器七、创建Debezium连接器八、验证部署K8s相关知识可以阅读博主以下几篇技术博客:K8s系列之:搭建高可用K8sv1.23.5集群详......
  • Kubernetes 部署
    Kubernetes部署在k8s上进行部署前,首先需要了解一个基本概念DeploymentDeployment(部署)。在k8s中,通过发布Deployment,可以创建应用程序(dockerimage)的实例(dockercontainer),这个实例会被包含在称为Pod的概念中,Pod是k8s中最小可管理单元。在k8s集群中发布Depl......
  • JVM调优篇:探索Java性能优化的必备种子面试题
    JVM内存模型首先面试官会询问你在进行JVM调优之前,是否了解JVM内存模型的基础知识。这是一个重要的入门问题。JVM内存模型主要包括程序计数器、堆、本地方法栈、Java栈和方法区(1.7之后更改为元空间,并直接使用系统内存)。正常堆内存又分为年轻代和老年代。在Java虚拟机中,年轻代用于存......
  • 图文带你了解华为华三路由器交换机登录的几种方法(开局必备)
    作者:网络之路一天 首发公众号:网络之路博客(ID:NetworkBlog)前言我们学习路由交换就是在实际工作中来配置,解决客户或者上级给的需求,真正接触的就是实实在在的路由器跟交换机,当拿到一套全新的设备的时候,要知道如何去登录,以及一些注意的事项,这个比较关键,很多初学者用惯了模拟器,而模拟器......