容器的底层实现深度依赖于内核的泛滥个性,如 overlay 文件系统,namespace, cgroup 等,因而内核的性能和稳定性,在很大水平上,决定了整个容器PaaS平台的性能和稳定性。从 TKE 上线三年多以来,上万集群,数十万个节点的经营教训来看,内核问题约占所有节点问题的三分之一。
那么容器场景抉择哪个Linux版本最好呢?在腾讯云,这个答案是 Tencent Linux。
这时候大家应该会有很多的疑难,接下来的 FAQ 会尽力解答大家的疑难。
Tencent Linux是谁保护的? 基于什么发行版的?
是腾讯内核和虚拟化团队负责保护的。Tencent Linux 2.4 基于CentOS 7, 用户态软件包放弃与最新版 CentOS 7 兼容,CentOS 7 版本的软件包能够间接在 Tencent Linux 2.4 中应用
Tencent Linux跟CentOS有什么区别?
要害的区别在内核版本,本文前面会具体介绍。 用户态有大量调整,如 YUM 源的配置等,详情请参考官网介绍文档:https://cloud.tencent.com/doc...
内核是什么版本?
Tencent Linux 2.4 目前是4.14内核。
代码和 rpm 包在 GitHub 能够获取: https://github.com/Tencent/Te...。
年底会推出5.4版本。
Tencent Linux跟TKE的Optimized镜像是什么关系?
它们的内核是一样的,但Tencent Linux 2.4 是CVM公共镜像, TKE Optimized镜像是市场镜像。
TKE将应用Tencent Linux2.4
来代替CentOS 7.6 TKE Optimized
以及Ubuntu18.04 TKE Optimized
。曾经在应用CentOS 7.6 TKE Optimized
和Ubuntu18.04 TKE Optimized
的集群还能够持续应用,但当前新建集群将不再反对这两种镜像。
预计11月下旬起,TKE用户能够自行在控制台操作,将集群新创建的节点的OS镜像切换为Tencent Linux2.4
,操作入口如下图(把操作系统批改为Tencent Linux2.4
):
相比 CentOS 和 Ubuntu 等发行版有什么劣势?
次要劣势如下, 后文会具体介绍:
- 通过腾讯大量外部业务多年的验证和打磨。
- 顶级内核专家团队的反对。
- 蕴含一些要害的性能优化和针对容器场景的定制个性。
腾讯外部业务多年的验证和打磨
Tencent Linux 从 2010 年启动研发,在腾讯外部曾经上线经营了 10 年,总部署量曾经是百万级,在腾讯外部 Linux 零碎里占比 99%,笼罩了腾讯所有的业务,同时腾讯有着国内最品种繁多的业务生态,从社交,游戏,到金融领取,AI, 平安等, 所以对底层操作系统的稳定性,性能,兼容性等都有更强的要求。
对于容器场景来讲,腾讯大量外围业务简直曾经局部或全副容器化,例如微信所有的逻辑业务全副容器化, 针对微信业务特点,进行系列优化,顺利保障了每年春节的红包顶峰经营,同时在数据安全方面,也跟微信严密单干,提供解决方案。
内核专家团队的反对
目前有三十多位全职内核专家为这个内核版本提供反对。其中有 kvm 维护者,还有很多内核网络,存储,cgroup,调度等各个子系统的专家。
反对力度也体现在版本更新节奏和热补丁服务。
从版本记录(https://github.com/Tencent/Te... 能够看到,从 7 月到 10 月, Tencent Linux 4.14 内核系列公布了 5 个版本。腾讯外部业务和腾讯云内部客户碰到的绝大多数问题,都能及时失去定位和修复。
另外咱们针对一些重要的修复,会提供内核热补丁的在线修复形式。热补丁的装置和失效,不须要重启机器,在不中断客户业务的状况下,晋升客户业务的时延 SLA。
对于破绽修复,Tencent Linux 有着全套的热补丁计划,包含:应用程序级热补丁,内核级热补丁等。每年公布 100 多个热补丁。 大多数破绽在一周内提供修复计划。
性能优化
Tecent Linux 在依据外部与内部的用户在大规模落地实际中遇到的问题,针对容器场景也做了大量性能优化,包含但不限于:
- 解决 IPVS 模式高并发场景下,连贯复用引发连贯异样的问题 (#81775)。
- 解决 IPVS 模式在高配节点 (核数多) 下 IPVS 规定过多引发网络毛刺的问题。
- 解决在容器密集场景下(单节点上容器数量较多),cAdvisor 读取 memcg 陷入内核态过久引发网络毛刺的问题。
- 解决大 Pod (占用核数多,单核占用高) 在高配节点 (核数多) 场景下,CPU 负载平衡引发网络毛刺的问题。
- 解决高并发场景下的 TCP 连贯监控(比方独自部署 cAdvisor 配置监控 TCP 连贯) 引发网络周期性抖动问题。
- 优化网络收包软中断,晋升网络性能。
这些针对各种容器场景的优化成果十分显著,以第 3 点为例,ping 时延监控效果图如下 (11:00 之后是优化后):
容器定制个性
容器资源展现隔离
很多 golang, java 程序的高效运行依赖于正确获取过程可用的 CPU 和内存资源。但这类程序在容器中获取到的是节点的 CPU 和内存资源, 与理论容器所调配的资源并不匹配,往往会造成过程的线程池等参数不合理,从而带来问题。
社区支流的解决方案是通过部署 FUSE 实现的 LXCFS 来实现/proc/cpuinfo, /proc/meminfo等资源展现按容器隔离。这个计划须要在节点部署 LXCFS 文件系统, 也须要往 POD sepc 中插入相干 volume 和挂载点的配置。详情能够参考:Kubernetes Demystified: Using LXCFS to Improve Container Resource Visibility
Tencnet Linux内核中实现了相似 LXCFS 个性,用户无需在节点部署 LXCFS 文件系统, 也无需批改 POD spec。只需在节点开启一个全局开关(sysctl -w kernel.stats_isolated=1
), 容器中读取 /proc/cpuinfo, /proc/meminfo 等文件获取的就是按容器隔离的,就是这么简略。
另外,思考到有些非凡容器, 比方节点监控组件, 可能就是须要读取节点级的信息。为了解决这个问题,专门减少了容器级的开关kernel.container_stats_isolated
。在主机级开关开启的状况下,只须要在容器的启动脚本外面,敞开容器级的开关(sysctl -w kernel.container_stats_isolated=0
),当前在这个容器外面读取 /proc/cpuinfo, /proc/meminfo 等文件获取的就是主机的信息了。(注: 容器级开关必须在容器中设置,能力对本容器失效)
请参考具体应用文档:容器内CPU、内存、过程、磁盘等信息隔离
更多内核参数的隔离
- net.ipv4.tcp_max_orphans
- net.ipv4.tcp_workaround_signed_windows
- net.ipv4.tcp_rmem
- net.ipv4.tcp_wmem
- vm.max_map_count
这些内核参数都是业务常常须要定制批改的。然而社区内核外面并没有对这些参数做 namespace 化隔离。一个容器对以上参数的批改,会对主机以及所有其余容器都起作用。 Tencent Linux依据内外部客户的需要,实现了这些内核参数的 namespace 化隔离,业务容器能够释怀的对这些参数进行个性化设置而不必放心对其余业务的烦扰了。
容器缺省内核参数优化
在高并发的状况下,可能会产生半连贯队列满而丢包, 能够通过调大 net.core.somaxconn
来缓解问题。然而容器网络 namespace 外面的 net.core.somaxconn
缺省值只有 128,而且是代码写死的。 在 Tencent Linux 内核中,咱们把这个缺省值调整到 4096, 从而能够缩小高并发状况下半连贯队列满的丢包问题。
在 TKE 如何应用 Tencent Linux
如果心愿 TKE 集群的节点应用 Tencent Linux 的操作系统,须要在创立 TKE 集群时,操作系统抉择 Tencent Linux
的:
注: Tencent Linux 除了反对一般的云服务器机型外,还反对黑石物理机与 Nvidia GPU 的机型。
参考资料
- Tencent Linux 官网介绍文档
- Tencent Linux 内核代码
- 容器资源展现隔离应用文档
【腾讯云原生】云说新品、云研新术、云游新活、云赏资讯,扫码关注同名公众号,及时获取更多干货!!