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

背景

企业的 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: volcanoaffinity: 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

修改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: volcanoaffinity: 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

文章转载自:华为云开发者联盟

原文链接:https://www.cnblogs.com/huaweiyun/p/18176460

体验地址:引迈 - JNPF快速开发平台_低代码开发平台_零代码开发平台_流程设计器_表单引擎_工作流引擎_软件架构

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/833320.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Pycharm链接远程服务器GPU跑深度学习模型

我们在学习深度学习时,常常会遇到自己笔记本电脑性能不够,显卡性能低,在运行深度学习项目的时候很浪费时间。如果实验室有可用于深度学习的服务器的话,会大大减少代码执行时间,服务器上的GPU算力一般都很高。 本文主要…

【IP:Internet Protocol,子网(Subnets),IPv6:动机,层次编址:路由聚集(rout aggregation)】

文章目录 IP:Internet Protocol互联网的的网络层IP分片和重组(Fragmentation & Reassembly)IP编址:引论子网(Subnets)特殊IP地址IP 编址: CIDR子网掩码(Subnet mask)转发表和转发…

【mysql学习笔记】

创建数据表 命令 create database mydb charset utf8; 创建数据库,使用字符编码为utf-8 (create database 数据库名称 charset utf-8;) show databases; //展示database里面内容 u…

实用的Chrome 浏览器命令

Google Chrome 浏览器提供了许多快捷命令和实用功能,可以帮助用户提高效率和改善浏览体验。这里列举了一些非常实用的Chrome浏览器命令: 1. **CtrlT** / **CmdT** - 打开一个新的标签页。 2. **CtrlShiftT** / **CmdShiftT** - 重新打开最后关闭的标签页…

智慧之巅:大数据与算力中心的融合演进

智慧之巅:大数据与算力中心的融合演进 1 引言 在这个数据驱动的时代,我们站在了一个前所未有的历史节点上。大数据和算力中心,这两个曾经各自为政的领域,如今正以一种前所未有的方式交织在一起,共同推动着数字经济的蓬…

MFC扩展库BCGControlBar Pro v34.1 - 可视化设计器、主题新升级

BCGControlBar库拥有500多个经过全面设计、测试和充分记录的MFC扩展类。 我们的组件可以轻松地集成到您的应用程序中,并为您节省数百个开发和调试时间。 BCGControlBar专业版 v34.1已正式发布了,这个版本包含了对Windows 10/11字体图标的支持、功能区和…

有哪些方式可以有效地评估精益生产咨询公司的能力?

在寻求精益生产咨询服务的过程中,评估咨询公司的能力至关重要。这不仅关乎企业精益生产转型的成功与否,更直接影响到企业未来的竞争力和发展。那么,有哪些方式可以有效地评估精益生产咨询公司的能力呢? 首先,了解咨询公…

git:分支删除

删除本地分支: git branch -d branch_name其中,branch_name 是你要删除的本地分支的名称。如果分支上有未合并的更改,使用 -d 选项会提示你确认删除。 如果要强制删除未合并的分支,可以使用 -D 选项: git branch -D…

纯血鸿蒙APP实战开发——短视频切换实现案例

短视频切换实现案例 介绍 短视频切换在应用开发中是一种常见场景,上下滑动可以切换视频,十分方便。本模块基于Swiper组件和Video组件实现短视频切换功能。 效果图预览 使用说明 上下滑动可以切换视频。点击屏幕暂停视频,再次点击继续播放…

tensorflow学习笔记(1)环境准备写个简单例子(小白手册)-20240506

一、安装python、tensorflow 1、Mac上默认python已经安装,自带pip 2、pip3 install tensorflow 如果报错,提示pip3版本较低,可以根据提示来更新pip3:/Library/Developer/CommandLineTools/usr/bin/python3 -m pip install --upgrade pip 3、然后再使用pip3来安装tensor…

【排序算法】之快速排序

一、算法介绍 快速排序(Quick sort)是由C.A.R.Hoare提出来的。快速排序法又叫分割交换排序法,是目前公认的最佳排序法,也是使用“分而治之”的方式,会先在数据中找到一个虚拟的中间值,并按此中间值将所有打算排序的数据分为两部分…

本地项目上传gitlab

要将本地项目上传到GitLab仓库,请按照以下步骤操作: 在GitLab上创建一个新仓库。初始化本地仓库(如果尚未这样做): cd your_project_directory git init 添加所有文件到本地仓库: git add . 提交更改到本…

常用大模型介绍

GPT(Generative Pre-Trained Transformer) 工作原理: 自我注意机制(Self-Attention):GPT基于Transformer架构,该架构的核心组件是自我注意层,它允许模型查看整个输入序列来计算每个…

Verilog中4位数值比较器电路

某4位数值比较器的功能表如下。 请用Verilog语言采用门级描述方式,实现此4位数值比较器 参考代码如下: (CSDN代码块不支持Verilog,代码复制到notepad编辑器中,语言选择Verilog,看得更清楚) t…

ESP8266固件烧写

概述 因为手上有块闲置的ESP8266开发板,想着拿来倒腾一下WIFI探针,倒腾了一阵测试成功,博文记录用以备忘 硬件 ESP8266 NodeMCU 环境 Windows 11 步骤 1.下载esp32_win32_msys2_environment_and_toolchain-20181001.zip 2.下载xtensa…

docker安装部署服务后docker网段和主机网段冲突解决

一:现象 docker安装后,dockers的内部网段在172.[17-31].xx.xx,如果主机网段在这之间时就可能出现网段冲突问题 二:解决 修改Docker 的 daemon 配置文件(/etc/docker/daemon.json) "default-address-pools": [{"…

SEO之高级搜索指令(二)

初创企业需要建站的朋友看这篇文章,谢谢支持: 我给不会敲代码又想搭建网站的人建议 新手上云 (接上一篇。。。。) 5 、inanchor: inanchor:指令返回的结果是导入链接锚文字中包含搜索词的页面。百度不支持inanchor:。 比如在 Go…

fork,execve,_exit从第一个程序到所有程序

操作系统启动后到底做了什么 CPU Reset → Firmware → Loader → Kernel _start() → 第一个程序 /bin/init → 程序 (状态机) 执行 系统调用 操作系统会加载 “第一个程序” 寻找启动程序代码 if (!try_to_run_init_process("/sbin/init") ||!try_to_run_init_p…

在 Windows 上将 Tomcat 设置为服务并在启动时添加 JVM 参数

在 Windows 上将 Tomcat 设置为服务并在启动时添加 JVM 参数(如 -Dhudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTIONtrue),你需要修改 Tomcat 服务的启动配置。这通常通过使用 tomcat9w.exe(对于 To…

Git的常见面试题

Git 是一种广泛使用的版本控制系统,对于开发者面试来说,了解 Git 相关的知识非常重要。以下是一些常见的 Git 面试题及其答案,这些问题可以帮助你准备软件开发相关的面试。 1. 什么是 Git? 答案:Git 是一个开源的分布…