当前位置: 首页 > Linux

容器场景应该选择什么Linux版本?

时间:2023-04-07 01:36:07 Linux

容器的底层实现深度依赖内核的很多特性,比如overlay文件系统、命名空间、cgroup等。因此,内核的功能和稳定性,在很大程度上决定了其功能和整个容器PaaS平台的稳定性。从TKE推出三年多以来数万集群、数十万节点的运行经验来看,内核问题约占所有节点问题的三分之一。那么哪个Linux版本最适合容器场景呢?在腾讯云,答案是腾讯Linux。这时候你应该会有很多疑问,下面的FAQ会尽量解答你的疑问。谁在维护腾讯Linux?基于什么分布?由腾讯内核和虚拟化团队维护。TencentLinux2.4基于CentOS7,用户态软件包兼容最新版本的CentOS7。CentOS7版本的软件包可以直接在TencentLinux2.4中使用。腾讯Linux和CentOS有什么区别?关键区别在于内核版本,本文稍后将对此进行详细介绍。用户态有一些调整,比如YUM源的配置等,具体可以参考官方介绍文档:https://cloud.tencent.com/doc...是什么版本的核心?TencentLinux2.4目前是4.14内核。GitHub上有代码和rpm包:https://github.com/Tencent/Te...5.4版本将于年底发布。TencentLinux和容器服务的优化镜像有什么关系?它们的内核是一样的,但是TencentLinux2.4是CVM公共镜像,TKE优化镜像是市场镜像。容器服务将使用腾讯Linux2.4替代CentOS7.6容器服务优化版和Ubuntu18.04容器服务优化版。已经使用CentOS7.6TKEOptimized和Ubuntu18.04TKEOptimized的集群可以继续使用,但后续新集群将不再支持这两个镜像。预计11月下旬开始,TKE用户可自行在控制台操作,将集群新建节点的OS镜像切换至TencentLinux2.4。操作入口如下图(修改操作系统为TencentLinux2.4):像Ubuntu这样的发行版有什么优势?主要优势如下,后面会详细介绍:经过腾讯大量内部业务的多年验证和打磨。由顶级内核专家团队提供支持。包含针对容器场景的一些关键性能优化和自定义功能。腾讯内部业务经过多年的验证和打磨。腾讯Linux于2010年开始研发,在腾讯已经运营了10年。总部署量达到百万级,占腾讯内部Linux系统的99%,覆盖整个腾讯。同时,腾讯拥有国内最多元化的商业生态,从社交、游戏,到金融支付、AI、安全等,对底层运营的稳定性、性能、兼容性都有更强的要求。系统。对于容器场景,腾讯的大量核心业务已经部分或全部容器化。比如微信所有的逻辑服务都容器化了。针对微信业务特点进行了一系列优化,成功保障了每年春节期间的红包运营高峰。在安全方面,我们也与微信紧密合作,提供解决方案。来自内核专家团队的支持目前有超过30位全职内核专家支持此内核版本。其中有kvm的维护者,还有很多内核网络、存储、cgroup、调度等各个子系统的专家。支持还体现在版本更新节奏和热补丁服务上。从版本记录(https://github.com/Tencent/Te...)可以看出,从7月到10月,TencentLinux4.14内核系列发布了5个版本。腾讯内部业务和腾讯云外部客户遇到的绝大多数问题都能及时定位修复。另外,对于一些重要的修复,我们会提供内核热补丁的在线修复方法。热补丁安装生效无需重启机器,客户业务不中断。在此情况下,提高客户业务的延迟SLA。针对bug修复,腾讯Linux拥有全套热补丁解决方案,包括:应用级热补丁、内核级热补丁等,每年发布100多个热补丁。大多数漏洞都在一周内提供修复。性能优化腾讯Linux也根据内外部用户在大规模实施中遇到的问题,针对容器场景做了很多性能优化,包括但不限于:解决IPVS模式下连接复用带来的连接复用问题高并发场景异常问题(#81775)。解决IPVS模式下高配节点(多核)IPVS规则过多导致网络卡顿的问题。解决容器密集场景下(单节点容器数多)cAdvisor读取memcg卡在内核态时间过长导致网络卡顿的问题。解决高配置节点(多核)场景下大Pod(多核占用,单核占用高)场景下CPU负载均衡导致的网络故障问题。解决高并发场景下TCP连接监控导致周期性网络抖动的问题(如单独部署cAdvisor配置监控TCP连接)。优化网络包接收软中断,提升网络性能。这些针对各种容器场景的优化效果是非常显着的。以点3为例,ping延迟监控效果图如下(11:00后优化):过程。但是这类程序在容器中获取的是节点的CPU和内存资源,与实际容器分配的资源不匹配,往往会导致进程的线程池等参数不合理,从而导致问题。社区主流的方案是通过部署FUSE实现的LXCFS,通过容器隔离实现/proc/cpuinfo、/proc/meminfo等资源展示。该方案需要在节点上部署LXCFS文件系统,还需要将相关卷和挂载点的配置插入到PODsepc中。详情请参考:Kubernetes揭秘:使用LXCFS提升容器资源可见性TencnetLinux内核实现了类似LXCFS的特性,用户无需在节点上部署LXCFS文件系统,也无需修改PODspec。只需要在节点上打开一个全局开关(sysctl-wkernel.stats_isolated=1),读取容器中的/proc/cpuinfo、/proc/meminfo等文件按照容器隔离,就这么简单。另外,考虑到一些特殊的容器,比如节点监控组件,可能需要读取节点级别的信息。为了解决这个问题,特地增加了容器级别的开关kernel.container_stats_isolated。当开启主机级开关后,只需要在容器启动脚本中关闭容器级开关(sysctl-wkernel.container_stats_isolated=0),然后读取/proc/cpuinfo、/proc/meminfo中这个容器等待文件获取宿主机的信息。(注意:必须在容器中设置容器级别的开关,才能对本容器生效。)详细使用文档请参考:隔离容器中的CPU、内存、进程、磁盘等信息隔离更多内核参数net.ipv4.tcp_max_orphansnet.ipv4.tcp_workaround_signed_windowsnet.ipv4.tcp_rmemnet.ipv4.tcp_wmemvm.max_map_count这些内核参数经常被业务自定义修改。但是,社区内核中没有对这些参数进行命名空间隔离。一个容器对上述参数的修改会影响宿主机和所有其他容器。腾讯Linux根据内外部客户的需求,实现了这些内核参数的命名空间隔离,业务容器可以放心地个性化这些参数,而不用担心对其他业务造成干扰。容器默认内核参数优化在高并发的情况下,可能会出现半连接队列满,丢包的情况。可以通过增加net.core.somaxconn来缓解这个问题。但是容器网络命名空间中net.core.somaxconn的默认值只有128,代码是硬编码的。在腾讯Linux内核中,我们将这个默认值调整为4096,以减少高并发下半连接队列满时的丢包问题。如何在容器服务中使用腾讯Linux如果您希望容器服务集群的节点使用腾讯Linux操作系统,您需要在创建容器服务集群时选择操作系统为腾讯Linux:注:腾讯Linux不仅支持普通云服务器模型,还支持物理机和NvidiaGPU的Blackstone模型。参考资料腾讯Linux官方介绍文档腾讯Linux内核代码容器资源展示隔离使用文档【腾讯云原生】云说新品、云研新技术、云游新活动、云鉴赏资讯,扫描二维码关注同名公众号,并及时获得更新好东西!!