容器的底层实现深度依赖于内核的众多特性,如 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/document/product/213/38027 内核是什么版本?Tencent Linux 2.4 目前是4.14内核。 Tencent Linux跟TKE的Optimized镜像是什么关系?它们的内核是一样的,但Tencent Linux 2.4 是CVM公共镜像, TKE Optimized镜像是市场镜像。 TKE将使用 预计11月下旬起,TKE用户可以自行在控制台操作,将集群新创建的节点的OS镜像切换为 相比 CentOS 和 Ubuntu 等发行版有什么优势?主要优势如下, 后文会详细介绍:
腾讯内部业务多年的验证和打磨Tencent Linux 从 2010 年启动研发,在腾讯内部已经上线运营了 10 年,总部署量已经是百万级,在腾讯内部 Linux 系统里占比 99%,覆盖了腾讯所有的业务,同时腾讯有着国内最种类繁多的业务生态,从社交,游戏,到金融支付,AI, 安全等, 所以对底层操作系统的稳定性,性能,兼容性等都有更强的要求。 对于容器场景来讲,腾讯大量核心业务几乎已经部分或全部容器化,例如微信所有的逻辑业务全部容器化, 针对微信业务特点,进行系列优化,顺利保障了每年春节的红包高峰运营,同时在数据安全方面,也跟微信紧密合作,提供解决方案。 内核专家团队的支持目前有三十多位全职内核专家为这个内核版本提供支持。其中有 kvm 维护者,还有很多内核网络,存储,cgroup,调度等各个子系统的专家。 支持力度也体现在版本更新节奏和热补丁服务。 从版本记录(https://github.com/Tencent/TencentOS-kernel/releases) 可以看到,从 7 月到 10 月, Tencent Linux 4.14 内核系列发布了 5 个版本。腾讯内部业务和腾讯云外部客户碰到的绝大多数问题,都能及时得到定位和修复。 另外我们针对一些重要的修复,会提供内核热补丁的在线修复方式。热补丁的安装和生效,不需要重启机器,在不中断客户业务的情况下,提升客户业务的时延 SLA。 对于漏洞修复,Tencent Linux 有着全套的热补丁方案,包括:应用程序级热补丁,内核级热补丁等。每年发布 100 多个热补丁。 大多数漏洞在一周内提供修复方案。 性能优化Tecent Linux 在根据内部与外部的用户在大规模落地实践中遇到的问题,针对容器场景也做了大量性能优化,包括但不限于:
这些针对各种容器场景的优化效果非常显著,以第 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。只需在节点开启一个全局开关( 另外,考虑到有些特殊容器, 比如节点监控组件, 可能就是需要读取节点级的信息。为了解决这个问题,专门增加了容器级的开关 请参考详细使用文档:容器内CPU、内存、进程、磁盘等信息隔离 更多内核参数的隔离
这些内核参数都是业务经常需要定制修改的。但是社区内核里面并没有对这些参数做 namespace 化隔离。一个容器对以上参数的修改,会对主机以及所有其他容器都起作用。 Tencent Linux根据内外部客户的需求,实现了这些内核参数的 namespace 化隔离,业务容器可以放心的对这些参数进行个性化设置而不用担心对其他业务的干扰了。 容器缺省内核参数优化在高并发的情况下,可能会发生半连接队列满而丢包, 可以通过调大 在 TKE 如何使用 Tencent Linux如果希望 TKE 集群的节点使用 Tencent Linux 的操作系统,需要在创建 TKE 集群时,操作系统选择
参考资料 |
|