首页 > 其他分享 >CCE云原生混部场景下的测试案例

CCE云原生混部场景下的测试案例

时间:2024-05-07 09:02:03浏览次数:33  
标签:原生 stress 在线 redis cpu 离线 混部 CCE CPU

本文分享自华为云社区《CCE云原生混部场景下在线任务抢占、压制离线任务CPU资源、保障在线任务服务质量效果测试》,作者:可以交个朋友。

背景

企业的 IT 环境通常运行两大类进程,一类是在线服务,一类是离线作业。

在线任务:运行时间长,服务流量及资源利用率有潮汐特征,时延敏感,对服务SLA 要求高,如电商交易服务等。

离线任务:运行时间分区间,运行期间资源利用率较高,时延不敏感,容错率高,中断一般允许重运行,如大数据处理等。

混部主要的形式是通过将在线和离线任务部署在相同节点的方式来提高资源利用率,比如某节点之前部署3个高服务SLA的在线任务,现在混合部署3个在线任务和3个离线任务,离线服务把在线服务各个时段的空闲资源利用起来而不影响在线服务的服务质量。

在容器混部层面主要涉及: 1)调度层面实现节点调度资源超分,在、离线任务混合调度到相同节点; 2)CPU层面实现在线任务抢占、压制离线任务;3)内存层面本文不做介绍。通过混部技术CPU部分能力,可以实现在运行过程中,系统会根据在、离线任务资源使用情况,自动完成在线“抢占”、“压制”离线任务资源以保障在线资源的资源诉求。以一台4核机器为例:

  • 当在线任务需要3核CPU资源,那么需要系统“压制”离线任务最多只能使用1核CPU资源;
  • 在线任务当时处于业务低峰,仅使用1核CPU资源,离线任务可以短期使用剩余CPU资源;当在线任务业务上涨时,系统保障在线业务可以“抢占”离线业务CPU资源;

环境准备

环境要求

集群版本:

  • v1.19集群:v1.19.16-r4及以上版本
  • v1.21集群:v1.21.7-r0及以上版本
  • v1.23集群:v1.23.5-r0及以上版本
  • v1.25及以上版本

集群类型:CCE Standard集群或CCE Turbo集群。

节点OS:EulerOS 2.9 (内核kernel-4.18.0-147.5.1.6.h729.6.eulerosv2r9.x86_64)或者Huawei Cloud EulerOS 2.0

节点类型:弹性虚拟机。

Volcano插件版本:1.7.0及以上版本。

环境信息

CCE集群部署kube-prometheus-stack、grafana和volcano插件

image.png

image.png

image.png

CPU压制、抢占演示

压测基线

创建演示需要的工作负载,且保证两个工作负载调度至同一节点(由于dashboard中普罗表达式与pod名称关联,建议不要工作负载名称,否则影响dashboard正常显示)

kind: Deployment 
apiVersion: apps/v1 
metadata: 
  name: redis        
spec: 
  replicas: 1 
  selector: 
    matchLabels: 
      app: redis 
  template: 
    metadata: 
      creationTimestamp: null 
      labels: 
        app: redis 
      annotations: 
        prometheus.io/path: /metrics 
        prometheus.io/port: '9121' 
        prometheus.io/scrape: 'true' 
    spec: 
      containers: 
        - name: container-1 
          image: swr.cn-north-4.myhuaweicloud.com/testapp/redis:v6 
          resources: 
            limits: 
              cpu: '1' 
            requests: 
              cpu: 250m 
        - name: container-2 
          image: bitnami/redis-exporter:latest 
          resources: 
            limits: 
              cpu: 250m 
              memory: 512Mi 
            requests: 
              cpu: 250m 
              memory: 512Mi 
      imagePullSecrets: 
        - name: default-secret 
      schedulerName: volcano 
--- 
kind: Deployment 
apiVersion: apps/v1 
metadata: 
  name: stress 
spec: 
  replicas: 1 
  selector: 
    matchLabels: 
      app: stress 
  template: 
    metadata: 
      labels: 
        app: stress 
    spec: 
      containers: 
        - name: container-1 
          image: swr.cn-north-4.myhuaweicloud.com/testapp/centos-stress:v1 
          command: 
            - /bin/bash 
          args: 
            - '-c' 
            - while true; do echo hello; sleep 10; done 
          resources: 
            limits: 
              cpu: '4' 
              memory: 4Gi 
            requests: 
              cpu: 2500m 
              memory: 1Gi 
      imagePullSecrets: 
        - name: default-secret 
      schedulerName: volcano
      affinity: 
        podAffinity: 
          requiredDuringSchedulingIgnoredDuringExecution: 
            - labelSelector: 
                matchExpressions: 
                  - key: app 
                    operator: In 
                    values: 
                      - redis 
              namespaces: 
                - default 
              topologyKey: kubernetes.io/hostname

使用redis-benchmark命令压测redis;192.168.1.159为redis的Pod ip

./redis-benchmark -h 192.168.1.159 -p 6379 -n 3000000 -c 100 –q -t SET,INCR,LPUSH,LPOP,RPOP,SADD,HSET,SPOP,ZADD,ZPOPMIN

在grafana页面观察redis指标和cpu使用率,可以作为在无干扰情况下的基线参考数据

image.png

非混部场景

创建节点池用作混合部署,同时重新部署以上工作负载,使其调度至新节点

再次使用redis-benchmark命令压测redis;192.168.1.172为redis的Pod ip

./redis-benchmark -h 192.168.1.172 -p 6379 -n 3000000 -c 100 –q -t SET,INCR,LPUSH,LPOP,RPOP,SADD,HSET,SPOP,ZADD,ZPOPMIN

进入stress容器内,待redis指标达到基线且平稳后,执行命令提升CPU使用率

stress-ng -c 4 -t 3600

在grafana页面观察redis指标和cpu使用率,发现stress容器压测过程中,redis的性能数据急速退化

image.png

混部场景

更新节点池,在高级配置中为节点配置混部标签:volcano.sh/colocation="true"

image.png

点击节点池的配置管理-kubelet组件配置-开启节点混部特性

image.png

修改节点的驱逐阈值,将阈值修改为100,避免在压测stress时cpu使用率超过阈值被直接驱逐

kubectl annotate node 192.168.0.209 volcano.sh/evicting-cpu-high-watermark=100

修改stress工作负载的注解,将stress标记为离线业务,redis工作负载不用修改

kind: Deployment 
apiVersion: apps/v1 
metadata: 
  name: stress 
spec: 
  replicas: 1 
  selector: 
    matchLabels: 
      app: stress 
  template: 
    metadata: 
      labels: 
        app: stress 
      annotations:          
        volcano.sh/qos-level: "-1"       # 离线作业注解 
    spec: 
      containers: 
        - name: container-1 
          image: swr.cn-north-4.myhuaweicloud.com/testapp/centos-stress:v1 
          command: 
            - /bin/bash 
          args: 
            - '-c' 
            - while true; do echo hello; sleep 10; done 
          resources: 
            limits: 
              cpu: '4' 
              memory: 4Gi 
            requests: 
              cpu: 2500m 
              memory: 1Gi 
      imagePullSecrets: 
        - name: default-secret 
      schedulerName: volcano
      affinity: 
        podAffinity: 
          requiredDuringSchedulingIgnoredDuringExecution: 
            - labelSelector: 
                matchExpressions: 
                  - key: app 
                    operator: In 
                    values: 
                      - redis 
              namespaces: 
                - default 
              topologyKey: kubernetes.io/hostname
使用redis-benchmark命令压测redis;192.168.1.172为redis的Pod ip
./redis-benchmark -h 192.168.1.172 -p 6379 -n 3000000 -c 100 –q -t SET,INCR,LPUSH,LPOP,RPOP,SADD,HSET,SPOP,ZADD,ZPOPMIN
进入stress容器内,待redis指标达到基线且平稳后,执行命令提升CPU使用率
stress-ng -c 4 -t 3600

在grafana页面观察redis指标和cpu使用率,在混合场景下,即使离线任务在尝试打爆节点CPU,操作系统依然维持在线任务CPU诉求,保障了在线任务的服务质量

image.png

点击关注,第一时间了解华为云新鲜技术~

 

标签:原生,stress,在线,redis,cpu,离线,混部,CCE,CPU
From: https://www.cnblogs.com/huaweiyun/p/18176460

相关文章

  • 云原生周刊:Terraform 1.8 发布 | 2024.5.6
    开源项目推荐xlskubectl用于控制Kubernetes集群的电子表格。xlskubectl将GoogleSpreadsheet与Kubernetes集成。你可以通过用于跟踪费用的同一电子表格来管理集群。git-syncgit-sync是一个简单的命令,它将git存储库拉入本地目录,等待一段时间,然后重复。当远程存储库......
  • 原生JS表格数据常用总结
    主要是在数据报表这块,做了好几年发现,其实用户最终想要看的并不是酷炫的BI大屏,而是最基础也是最复杂的中国式报表.更多就是倾向于从表格中去获取数据信息,最简单的就是最好的,于是还是来总结一下表格这块的东西.基础表格先来实现一个最基础的表格,用table标签,......
  • Django Error: [WinError 10013] An attempt was made to access a socket in a way f
      D:\06softw-dev-202306\manage.pyrunserverWatchingforfilechangeswithStatReloaderPerformingsystemchecks...Systemcheckidentifiednoissues(0silenced).May03,2024-10:02:12Djangoversion3.2.18,usingsettings'MPDB.settings......
  • js逆向实战之某证信Accept-Enckey参数加密解析
    url:https://webapi.cninfo.com.cn/#/marketDataDate分析过程抓包,主要关注图中标记的数据包,它的回显数据是我们所需要的。但在该数据包的请求中有一个Accept-Enckey参数是经过加密的,需要知道其加密的逻辑。全局搜索sysapi/p_sysapi1007,只有一处符合的。找到对应地方,......
  • Radius 现在是云原生计算基金会(CNCF)的沙箱项目
    在数字化时代,云原生计算技术逐渐成为企业转型的关键。2024-04-25,备受瞩目的开源项目Radius已正式加入云原生计算基金会(CNCF)的沙箱项目![Sandbox]Radius·Issue#65·cncf/sandbox(github.com)这个消息让业界瞩目,加入CNCF的沙箱项目,不仅是对Radius技术实力的认可,也是Radi......
  • IDEA在运行maven打war的时候报错:Cannot access defaults field of Properties
    问题描述:解决方案在pom.xml文件中引入:<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-war-plugin</artifactId>......
  • 国内独家|阿里云瑶池发布ClickHouse企业版:云原生Serverless新体验
    日前,阿里云联合ClickHouseInc.成功举办了「ClickHouse企业版商业化发布会」。阿里云ClickHouse企业版是阿里云和ClickHouse原厂独家合作的存算分离的云原生版本,支持资源按需弹性Serverless,在帮助企业降低成本的同时,为企业带来更多商业价值。 在发布会上,阿里云数据库产品事业部......
  • 云原生技术kubernetes(K8S)简介
    详细介绍目录01kubernetes是什么?02kubernetes和Compost+Swarm之间的区别03一点总结今天我们看看kubernetes技术的介绍,最近在极客时间上看张磊老师的深入kubernetes技术,讲的非常好,有兴趣的同学可以去收听一下,对于理解kubernetes技术非常有帮助,这里我会按照自己的进度,分享一下......
  • K8s 开先河、技能全栈、业务“无感”,深度解读云原生的这一年
    此次峰会的同行人包括后来的Kubernetes创始人JoeBeta和CraigMcLuckie,两人联手另一位同事BrendanBurns创立了Heptio,这家公司据传在两年内以数亿美金的价格被VMWare收购。会议当时,CraigMcLuckie还是新成立的谷歌云部门产品经理,而JoeBeda则刚写好内部Kubernetes设计文档,在峰会期......
  • 云原生k8s史上最详细 云原生 serverless
    Serverless是云计算发展的产物,其实不管是云计算还是云原生,亦或者是Serverless架构,他具体是什么,都是很难说得清的,但是这并不影响我们对Serverless架构的理解。一、心智层面去服务器化:专业的事情交给更专业的人,开发者可以更关注于自身业务逻辑字面解释Server和less的:就是将更少的......