CCE云原生混部场景下的测试案例
本文分享自华为云社区《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插件
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使用率,可以作为在无干扰情况下的基线参考数据
非混部场景
创建节点池用作混合部署,同时重新部署以上工作负载,使其调度至新节点
再次使用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的性能数据急速退化
混部场景
更新节点池,在高级配置中为节点配置混部标签:volcano.sh/colocation="true"
点击节点池的配置管理-kubelet组件配置-开启节点混部特性
修改节点的驱逐阈值,将阈值修改为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诉求,保障了在线任务的服务质量

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
一键关闭 Win11 系统广告「GitHub 热点速览」
不知道读者中有多少人早已对 Windows 11 系统自带的广告感到厌烦,却又不知道如何关闭它们? 虽然网上有详细的关闭教程,但是都需要逐一手动操作,不是很方便。所以,今天「GitHub 热点速览」给大家带来了一款能够轻松关闭 Windows 11 系统广告的工具「OFGB」,它开箱即用、界面简洁、操作方便,值得拥有!此外,这里还有更快地查看系统信息的工具「Fastfetch」,轻松制作 USB/SD 启动盘制作工具「Etcher」,以及 Rust 语言编写的纯文本定义 HTTP 请求的工具「Hurl」。这些开源项目都是开箱即用,将简单实用进行到底! 最后,不容错过的是上周急速走红的全新的神经网络架构「KAN」,开源后便在社区引起了热议,网上对它褒贬不一,诚邀您来品品。 本文目录 1. 开源热搜项目 1.1 关闭 Windows 11 系统广告的工具:OFGB 1.2 更快的系统信息工具:Fastfetch 1.3 USB/SD 启动盘制作工具:Etcher 1.4 纯文本定义 HTTP 请求的工具:Hurl 1.5 全新的神经网络架构:KAN 2. HelloGitHub 热评 2....
- 下一篇
详解数仓的3A安全能力
本文分享自华为云社区《GaussDB(DWS) 3A安全能力》,作者:yd_281561943。 1. 前言 适用版本:【8.0.0 (及以上)】 数据库安全是指保护数据库以防止未授权用户窃取、篡改和破坏数据库中数据信息的技术。数据库安全技术可以简单分为3个A: Authentication(认证):认证解决让谁进来的问题(进门) Authorization(授权):授权解决能干啥的问题(干活) Audit(审计):审计解决干了啥的问题(监控) 2. Authentication——认证 连接认证解决用户能否登录数据库的问题。本产品支持如下几种认证方式: 基于主机的认证:服务器端根据客户端的IP地址、用户名及要访问的数据库来查看配置文件从而判断用户是否通过认证。 口令认证:包括远程连接的加密口令认证和本地连接的非加密口令认证。 证书认证:此模式需进行SSL连接配置且需要客户端提供有效的SSL证书,不需要提供用户密码。 第三方认证:ldap、oneaccess等 这几种方式都需要配置“pg_hba.conf”文件,pg_hba.conf文件格式,pg_hba有若干行的HBA记录组成: 一...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS7安装Docker,走上虚拟化容器引擎之路
- Linux系统CentOS6、CentOS7手动修改IP地址
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS关闭SELinux安全模块
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Hadoop3单机部署,实现最简伪集群
- CentOS6,7,8上安装Nginx,支持https2.0的开启