亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

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
獲贊與收藏
145

關注作者,訂閱最新文章

閱讀免費教程

  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消