
源起
我们的业务部署在国内多家公有云 Kubernetes 上,需要统一的平台来管理这些 Kubernetes 集群,而 Rancher 针对国内的公有云 Kubernetes 平台兼容性非常友好。
Rancher 降低了 Kubernetes 集群的部署和使用门槛,我们可以借助 Rancher UI 轻松纳管和使用各个 Kubernetes 集群。不是很深入了解 Kubernetes 的研发同学也可以轻松创建 Deployment、Pod、PV 等资源。
我们可以借助 Rancher Pipeline 在内部实现 CI/CD,使研发专注于业务应用的开发。尽管 Rancher 团队告知 Pipeline 已经停止维护,但是它的简洁依然符合我们内部对 CI/CD 的定位。
Rancher 的持续创新能力,还有围绕着 Kubernetes 进行了一系列的生态扩展及布局,比如:轻量级 Kubernetes 发行版 k3s、Kubernetes 的轻量级分布式块存储系统 Longhorn、基于 Kubernetes 的开源超融合基础设施 (HCI) Harvester、以及 Rancher 的下一代 Kubernetes 发行版 RKE2。跟随头部创新厂商,对团队的持续进步也是大有益处。
Rancher 作为国际化的容器厂商,在国内有非常专业的研发团队,沟通交流非常便捷。很多问题都可以在 Rancher 中文社区中找到答案,对于开源且免费的平台来说,可以说是非常良心了。

迷局


虽然我们的集群数量不多,但是所有集群节点总量并不小。页面加载时,依赖node list 接口获取数据(此 node 为 Rancher 创建的一种特殊 CRD,它与实际下游集群的节点数有关),该接口处理时间较长,引起页面加载缓慢。
我们的下游集群中,主要以公有云的 Kubernetes 为主,这些集群通过导入方式纳管到 Rancher 中。这种纳管模式下,Rancher Server 通过与 cluster-agent 建立的Tunnel,访问下游集群的 Kube API,但是这里并非直接访问,而是走 Tunnel 到 Kubernetes Service IP 访问(如10.43.0.1:443)最终负载到多个 Kube-api server。通常这种模式并没有问题,但是由于我们的访问量和数据量都比较大,SVC IP 转发能力无法支撑,严重影响了通信效率。
针对以上分析,我们经过权衡,决定暂时使用企业版对集群进行调优实践。

抉择
切换到企业版
优化下游集群参数
配置参数
配置说明
--max-requests-inflight
默认值400;用于read请求的访问频率限制;建议1600或更高
--max-mutating-requests-inflight
默认值200;用于write请求的访问频率限制;建议800或更高
--event-ttl
默认值1h0m0s;用于控制保留events的时长;集群events较多时建议30m,以避免etcd增长过快
--watch-cache-sizes
系统根据环境启发式的设定;用于pods/nodes/endpoints等核心资源,其他资源参考default-watch-cache-size的设定
K8s v1.19开始,该参数为动态设定,建议使用该版本
--default-watch-cache-size
默认值100;用于List-Watch的缓存池;建议1000或更多
--delete-collection-workers
默认值1;用于提升namesapce清理速度,有利于多租户场景;建议10
内核调优
开启资源缓存
资源
释义
projectRoleTemplateBindings
Project 权限绑定
clusterRoleTemplateBindings
集群权限绑定
user
用户
nodes
节点(与我们的使用相关)
projects
Rancher 独有的项目概念
templates
Catalog 模板
集群连接模式
策略一:默认配置 默认策略,就是不修改连接方式,沿用社区版连接下游集群的策略。 企业版中默认 Tunnel 中的 k8srest client 的 timeout 值为 60s,可以有效减少 heavy load 时下游集群数据查询的失败几率,性能提升有限,但是请求成功率会有很大提升。 策略二:优化 Tunnel链路 默认情况下,通过 Tunnel 使用下游集群的 Kubernetes API Service(如10.43.0.1)进行通信。如果自建集群的外部,有一个性能更好的 Kubernetes API LB,可以将连接下游集群的apiEndpoint 改为 LB 入口地址,这样可以通过 Kubernetes API LB 分担压力,提升连接下游集群的速度。
策略三:直接和 Tunnel 双链路
启用直连和 Tunnel 双链路模式之前,需要确保下游集群有一个从 Rancher Server 网络直接可达的 apiEndpoint(参考策略二)。优化后,Rancher API 中针对下游集群请求的 v3 接口走直连,其余还是走Tunnel,这样可以有效分散流量,避免大量数据都在 Tunnel 中传输。相对策略二,性能进一步得到提升,但是比较依赖基础网络规划。

硕果


About SUSE Rancher
Rancher是一个开源的企业级Kubernetes管理平台,实现了Kubernetes集群在混合云+本地数据中心的集中部署与管理。Rancher一向因操作体验的直观、极简备受用户青睐,被Forrester评为“2020年多云容器开发平台领导厂商”以及“2018年全球容器管理平台领导厂商”,被Gartner评为“2017年全球最酷的云基础设施供应商”。
目前Rancher在全球拥有超过三亿的核心镜像下载量,并拥有包括中国联通、中国平安、中国人寿、上汽集团、三星、施耐德电气、西门子、育碧游戏、LINE、WWK保险集团、澳电讯公司、德国铁路、厦门航空、新东方等全球著名企业在内的共40000家企业客户。
2020年12月,SUSE完成收购RancherLabs,Rancher成为了SUSE “创新无处不在(Innovate Everywhere)”企业愿景的关键组成部分。SUSE和Rancher共同为客户提供了无与伦比的自由和所向披靡的创新能力,通过混合云IT基础架构、云原生转型和IT运维解决方案,简化、现代化并加速企业数字化转型,推动创新无处不在。
当前,SUSE及Rancher在中国大陆及港澳台地区的业务,均由数硕软件(北京)有限公司承载。SUSE在国内拥有优秀的研发团队、技术支持团队和销售团队,将结合Rancher领先的云原生技术,为中国的企业客户提供更加及时和可信赖的技术支撑及服务保障。





