首页 > 其他分享 >K8S HPA在CRD Operator中的应用

K8S HPA在CRD Operator中的应用

时间:2023-09-02 13:22:53浏览次数:42  
标签:Request value CRD periodSeconds Operator HPA K8S 利用率

K8S HPA在Trino Operator中的应用

HPA(Horizontal Pod Autoscaler)

水平扩缩意味着对增加的负载的响应是部署更多的 Pod。 这与“垂直(Vertical)”扩缩不同,对于 Kubernetes, 垂直扩缩意味着将更多资源(例如:内存或 CPU)分配给已经为工作负载运行的 Pod。

https://kubernetes.io/zh-cn/docs/tasks/run-application/horizontal-pod-autoscale/

官方HPA文档里并没有说明HPA对CRD(自定义资源)的支持。仅支持K8S自带Deployment 或者 StatefulSet等资源。

https://github.com/apache/flink-kubernetes-operator/blob/main/examples/hpa/basic-hpa.yaml

后来在社区里发现,有人使用HPA来扩缩CRD

scaleTargetRef:
    apiVersion: flink.apache.org/v1beta1
    kind: FlinkDeployment
    name: basic

https://kubernetes.io/zh-cn/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/

仔细翻阅CRD的文档,里面说明了关于HPA的支持。

主要是暴露Selector、Replicas字段。

apiVersion: trino.cloud.bds.17usoft.com/v1
kind: WorkerCluster
metadata:
spec:
status:
  labelSelector: app=trino-worker,cluster=dynamic-test
  replicas: 5

现状

image

防止用户方手动调节与平台方自动调节冲突,将副本数的控制权收敛到HPA,用户可调整Min来间接控制副本数

image

应用形式

 "hpa": {
                    "cpuAverageUtilization": 55,
                    "memoryAverageUtilization": 55,
                    "behavior": {
                        "scaleDown": {
                            "stabilizationWindowSeconds": 300,
                            "podsScalingPolicy": {
                                "value": 2,
                                "periodSeconds": 50
                            },
                            "percentsScalingPolicy": {
                                "value": 10,
                                "periodSeconds": 50
                            }
                        },
                        "scaleUp": {
                            "stabilizationWindowSeconds": 300,
                            "podsScalingPolicy": {
                                "value": 2,
                                "periodSeconds": 30
                            },
                            "percentsScalingPolicy": {
                                "value": 10,
                                "periodSeconds": 300
                            }
                        }
                    }
                },

指标

目前版本支持CPU、Memory的利用率

"cpuAverageUtilization": 55,
"memoryAverageUtilization": 55,

扩缩容行为

"behavior": {
            "scaleDown": {
                "stabilizationWindowSeconds": 300,
                "podsScalingPolicy": {
                    "value": 2,
                    "periodSeconds": 50
                },
                "percentsScalingPolicy": {
                    "value": 10,
                    "periodSeconds": 50
                }
            }

可根据个数或者百分比进行缩放,会计算其速率,取最大的。

例如:

当节点副本数为10,按个数会扩2个,按百分比会扩1个,HPA会选择扩2个。

当节点副本数为40,按个数会扩2个,按百分比会扩4个,HPA会选择扩4个。

应用

原有的HPA基于Request(下限)来计算利用率。而目前云平台的浮动配置普遍,上下限四倍配比。

image

Request、Limit本身是优化资源利用率。而HPA自身基于Request(下限)的与我们的理念冲突,

目前平台层会在中间做一层转化,使其基于limit进行扩缩容,例如:

request {"cpu":"1","memory":"4Gi"}

limit {"cpu":"10","memory":"40Gi"}

用户侧以limit为指标,设置 60%

平台侧会放大同样的比例以request为指标,用户侧会以limit为指标,设置 为600%

这样即利用的Request、Limit对资源的利用率提升,也充分利用了HPA的资源利用率的提升。

注意事项

因容忍度的存在,HPA 存在扩容死区

现象:当 Request(下限)=Limit (上限)时,期望利用率超过 90%时,无法正常扩容。

原因剖析:HPA 中存在容忍度(默认为 10%),指标变化幅度小于容忍度时,HPA 会忽略本次扩/缩动作。若当期望利用率为 90%时,则实际利用率在 81%-99%之间,都会被 HPA 忽略。

避坑指南:当 Request(下限)=Limit (上限)时,避免设置过高的期望利用率,一来避免扩容死区;二来被动扩容有一定的迟滞时间,留下更多的缓冲余量以应对突增流量。

image

HPA的应用有可能导致更多不可控性

精彩分享 | 欢乐游戏 Istio 云原生服务网格三年实践思考

部署形式

image

标签:Request,value,CRD,periodSeconds,Operator,HPA,K8S,利用率
From: https://www.cnblogs.com/LiPengFeiii/p/17673583.html

相关文章

  • Flink 1.17教程:算子链Operator Chain
    算子链OperatorChain在ApacheFlink中,算子链(OperatorChaining)是将多个操作符(算子)连接在一起形成一个链式结构的优化技术。算子链的作用是将多个操作符合并为一个单一的任务单元,以减少通信开销、提高执行效率和减少资源占用。通俗来说,算子链的作用可以比喻为将多个操作合并成一......
  • Flink 1.17教程:集群搭建、运行模式(standalone/yarn/k8s)及历史服务器
    集群角色集群启动如果是部署在本地,本地访问,无需进行任何配置,直接启动即可。如果是部署在服务器,需要远程访问,则需要将flink.conf中的localhost修改为服务器IP地址或是0.0.0.0节点服务器hadoop102hadoop103hadoop104角色JobManagerTaskManagerTaskManagerTaskManager[atguigu@node001......
  • Flink On K8s实战课程2023
    点击下载:FlinkOnK8s实战课程2023  提取码:2y46目前项目中用到Flink作为离线ETL处理构建相关的特征系统,而特征系统主要是为数据科学家、数据工程师、机器学习工程师去使用,用来去构建AI特征库,用来做模型的训练、用来做数据测试以及一些数据的预测及模型的在线服务,主要特征系统是......
  • k8s 挂载本地目录
    kind:StatefulSetmetadata:namespace:oasisname:redis-cluster-node-nsspec:serviceName:"redis-cluster-svc"template:spec:containers:volumeMounts:-name:sys-timemountPath:/etc/localtime-n......
  • k8s 网络策略
    网络策略介绍如果你希望在IP地址或端口层面(OSI第3层或第4层)控制网络流量,则你可以考虑为集群中特定应用使用Kubernetes网络策略(NetworkPolicy)。NetworkPolicy是一种以应用为中心的结构,允许你设置如何允许Pod与网络上的各类网络“实体”(我们这里使用实体以避免过度......
  • 华为HPA策略
    HPA:HorizontalPodAutoscalingCCE中弹性伸缩最主要的就是使用HPA(HorizontalPodAutoscaling)和CA(ClusterAutoScaling)两种弹性伸缩策略,HPA负责工作负载弹性伸缩,也就是应用层面的弹性伸缩,CA负责节点弹性伸缩,也就是资源层面的弹性伸缩。 https://support.huaweicloud.com/userm......
  • 3.2.0 终极预告!云原生支持新增 Spark on k8S 支持
    视频贡献者|王维饶视频制作者|聂同学编辑整理|DebraChenApacheDolphinScheduler3.2.0版本将发布,为了让大家提前了解到此版本更新的主要内容,我们已经制作了几期视频和内容做了大致介绍,包括《重磅预告!ApacheDolphinScheduler3.2.0新功能“剧透”》、《3.2.0版本......
  • 彻底卸载k8s(重置k8s)
    注意:master和slave节点都需要执行相同操作。1、停止相关服务systemctlstopkubeletsystemctlstopetcdsystemctlstopdocker2、卸载k8skubeadmreset-f3、删除k8s相关目录modprobe-ripiplsmodrm-rf~/.kube/rm-rf/etc/kubernetes/rm-rf/etc/systemd/s......
  • docker和k8s
    dockerDocker是一种开源的容器化平台,它的主要目标是简化应用程序的部署和管理。通过使用Docker,开发人员可以将应用程序及其依赖项打包到一个称为容器的独立单元中,以便在不同的环境中进行部署和运行。Docker的主要用途包括:应用程序的隔离性:Docker容器提供了一种轻量级的虚拟......
  • k8s搭建遇到的问题
    1.端口不能使用例如66662.docker没有restart导致网络没生效3.calico因为网卡导致routeip出错  pod直接访问内部17.XXX网卡的ip,而且ip不断变化和新增的pod不好管理->使用service例如label来管理相同的pod,可以使用customIP类型但是外部访问不了->使用service的nodePo......