为了账号安全,请及时绑定邮箱和手机立即绑定

Openshift自定义Router成倍提升集群性能

标签:
Kubernetes

webp

一个关于K8S的故事

为什么要自定义Router

  • Openshift的Router节点其实就是一个Haproxy容器应用,这个已经不是什么秘密了。我们平常使用时,不需要关心Haproxy的配置,因为它的默认配置完全满足绝大多数情况的需求。

  • 但是它的默认配置并没有把最大的性能发挥出来,这时就需要我们对Haproxy的配置进行自定义了。

  • 如果你需要实现一些新的功能,比如说将Mysql通过Router对外提供服务等

怎样自定义Router

  • Router Pod根据haproxy-config模板创建haproxy.conf配置文件,默认文件为/var/lib/haproxy/conf/haproxy-config.template

  • Router Haproxy镜像启动时会根据环境变量TEMPLATE_FILE来选择最终使用的模板文件

  • 向Router Pod中放入自定义的模板文件,并将它的路径传给环境变量TEMPLATE_FILE

  • 模板文件中的相关函数

函数说明
processEndpointsForAlias(alias ServiceAliasConfig, svc ServiceUnit, action string) []Endpoint返回所有可用的endpoints,如果action为shuffle,那返回结果会打乱顺序
env(variable, default …string) string获取环境变量,如果没有环境变量,使用第二个参数的值,如果第二个参数没设置,返回空字符串
matchPattern(pattern, s string) bool第一个参数是正则表达式,第二个参数为校验字符串,如果第二个参数满足正则规则,则返回True,否则返回False
isInteger(s string) bool检查字符串是否为数字格式
firstMatch(s string, allowedValues …string) bool将一个字符串在允许的字符串列表中从左到右匹配,返回最新匹配的字符串
matchValues(s string, allowedValues …string) bool如果字符串与给定的一组字符串中的字符串有匹配,则返回True,否则返回False
generateRouteRegexp(hostname, path string, wildcard bool) string生成一个 与主机名和路径匹配的正则表达式
genCertificateHostName(hostname string, wildcard bool) string为匹配证书生成主机名
isTrue(s string) bool如果给定的字符串中有'true'则返回True,否则False

自定义Router配置实战

  1. 导出Router默认的模板文件

$ oc rsh router-1-pod -n default cat haproxy-config.template > haproxy-config.template
  1. 更改haproxy-config.template,添加nbthread支持 3.10以上版本已添加了该变量

...
global
  nbthread {{env "ROUTER_NBTHREAD" "1"}}
  cpu-map auto:1/1-{{env "ROUTER_NBTHREAD" "1"}} 1-{{env "ROUTER_NBTHREAD" "1"}}
...
  1. 创建ConfigMap

$ oc create configmap customrouter --from-file=haproxy-config.template
  1. 挂载ConfigMap,设置环境变量

#### *3.9* 版本$ oc volumes dc/router --add --overwrite \
    --name=config-volume \
    --mount-path=/var/lib/haproxy/conf/custom \
    --source='{"configMap": { "name": "customrouter"}}'$ oc set env dc/router \
    TEMPLATE_FILE=/var/lib/haproxy/conf/custom/haproxy-config.template#### *3.11* 版本$ oc set volumes dc/router --add --overwrite \
    --name=config-volume \
    --mount-path=/var/lib/haproxy/conf/custom \
    --source='{"configMap": { "name": "customrouter"}}'$ oc set env dc/router \
    TEMPLATE_FILE=/var/lib/haproxy/conf/custom/haproxy-config.template
  1. 等待Router自动重启,使用新的配置模板

$ oc rsh router-2-pod -n default cat haproxy.conf

测试结果

通过设置环境变量ROUTER_NBTHREAD的值,使用Jmeter对应用进行压力测试

ROUTER_NBTHREADAvg(ms)Min(ms)Max(ms)ErrorTPS(/s)
119408383018322
2133015602031160
412707553047049
8138014259041995
161630100691(0%)23979

从中可以看出,不同的nbthread对Router容量的影响非常大,当nbthread=4时,容量达到默认的nbthread=1的2倍。



作者:潘晓华Michael
链接:https://www.jianshu.com/p/add9e0d2ed31


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
移动开发工程师
手记
粉丝
46
获赞与收藏
144

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消