騰訊云容器場景選擇什么Linux版本?

來源: 騰訊云原生
作者:洪志國 陳鵬
時間:2020-11-19
17104
容器的底層實現(xiàn)深度依賴于內核的眾多特性,如overlay文件系統(tǒng),namespace,cgroup等,因此內核的功能和穩(wěn)定性,在很大程度上,決定了整個容器PaaS平臺的功能和穩(wěn)定性。

容器的底層實現(xiàn)深度依賴于內核的眾多特性,如overlay文件系統(tǒng),namespace,cgroup等,因此內核的功能和穩(wěn)定性,在很大程度上,決定了整個容器PaaS平臺的功能和穩(wěn)定性。從TKE上線三年多以來,上萬集群,數(shù)十萬個節(jié)點的運營經(jīng)驗來看,內核問題約占所有節(jié)點問題的三分之一。

那么容器場景選擇哪個Linux版本最好呢?在騰訊云,這個答案是Tencent Linux[1]。

640.png

這時候大家應該會有很多的疑問,接下來的FAQ會盡力解答大家的疑問。

Tencent Linux是誰維護的?基于什么發(fā)行版的?

是騰訊內核和虛擬化團隊負責維護的。Tencent Linux 2.4基于CentOS 7,用戶態(tài)軟件包保持與最新版CentOS 7兼容,CentOS 7版本的軟件包可以直接在Tencent Linux 2.4中使用。

Tencent Linux跟CentOS有什么區(qū)別?

關鍵的區(qū)別在內核版本,本文后面會詳細介紹。用戶態(tài)有少量調整,如YUM源的配置等,詳情請參考官方介紹文檔:https://cloud.tencent.com/document/product/213/38027

內核是什么版本?

Tencent Linux 2.4目前是4.14內核。

代碼和rpm包在GitHub可以獲取:https://github.com/Tencent/TencentOS-kernel。

年底會推出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。已經(jīng)在使用CentOS 7.6 TKE Optimized和Ubuntu18.04 TKE Optimized的集群還可以繼續(xù)使用,但以后新建集群將不再支持這兩種鏡像。

預計11月下旬起,TKE用戶可以自行在控制臺操作,將集群新創(chuàng)建的節(jié)點的OS鏡像切換為Tencent Linux2.4,操作入口如下圖(把操作系統(tǒng)修改為Tencent Linux2.4):

640 (1).png

相比CentOS和Ubuntu等發(fā)行版有什么優(yōu)勢?

主要優(yōu)勢如下,后文會詳細介紹:

1.經(jīng)過騰訊大量內部業(yè)務多年的驗證和打磨。

2.頂級內核專家團隊的支持。

3.包含一些關鍵的性能優(yōu)化和針對容器場景的定制特性。

騰訊內部業(yè)務多年的驗證和打磨

Tencent Linux從2010年啟動研發(fā),在騰訊內部已經(jīng)上線運營了10年,總部署量已經(jīng)是百萬級,在騰訊內部Linux系統(tǒng)里占比99%,覆蓋了騰訊所有的業(yè)務,同時騰訊有著國內最種類繁多的業(yè)務生態(tài),從社交,游戲,到金融支付,AI,安全等,所以對底層操作系統(tǒng)的穩(wěn)定性,性能,兼容性等都有更強的要求。

對于容器場景來講,騰訊大量核心業(yè)務幾乎已經(jīng)部分或全部容器化,例如微信所有的邏輯業(yè)務全部容器化,針對微信業(yè)務特點,進行系列優(yōu)化,順利保障了每年春節(jié)的紅包高峰運營,同時在數(shù)據(jù)安全方面,也跟微信緊密合作,提供解決方案。

內核專家團隊的支持

目前有三十多位全職內核專家為這個內核版本提供支持。其中有kvm維護者,還有很多內核網(wǎng)絡,存儲,cgroup,調度等各個子系統(tǒng)的專家。

支持力度也體現(xiàn)在版本更新節(jié)奏和熱補丁服務。

從版本記錄(https://github.com/Tencent/TencentOS-kernel/releases)可以看到,從7月到10月,Tencent Linux 4.14內核系列發(fā)布了5個版本。騰訊內部業(yè)務和騰訊云外部客戶碰到的絕大多數(shù)問題,都能及時得到定位和修復。

另外我們針對一些重要的修復,會提供內核熱補丁的在線修復方式。熱補丁的安裝和生效,不需要重啟機器,在不中斷客戶業(yè)務的情況下,提升客戶業(yè)務的時延SLA。

對于漏洞修復,Tencent Linux有著全套的熱補丁方案,包括:應用程序級熱補丁,內核級熱補丁等。每年發(fā)布100多個熱補丁。大多數(shù)漏洞在一周內提供修復方案。

性能優(yōu)化

Tecent Linux在根據(jù)內部與外部的用戶在大規(guī)模落地實踐中遇到的問題,針對容器場景也做了大量性能優(yōu)化,包括但不限于:

1.解決IPVS模式高并發(fā)場景下,連接復用引發(fā)連接異常的問題(pr#81775[2])。

2.解決IPVS模式在高配節(jié)點(核數(shù)多)下IPVS規(guī)則過多引發(fā)網(wǎng)絡毛刺的問題。

3.解決在容器密集場景下(單節(jié)點上容器數(shù)量較多),cAdvisor讀取memcg陷入內核態(tài)過久引發(fā)網(wǎng)絡毛刺的問題。

4.解決大Pod(占用核數(shù)多,單核占用高)在高配節(jié)點(核數(shù)多)場景下,CPU負載均衡引發(fā)網(wǎng)絡毛刺的問題。

5.解決高并發(fā)場景下的TCP連接監(jiān)控(比如單獨部署cAdvisor配置監(jiān)控TCP連接)引發(fā)網(wǎng)絡周期性抖動問題。

6.優(yōu)化網(wǎng)絡收包軟中斷,提升網(wǎng)絡性能。

這些針對各種容器場景的優(yōu)化效果非常顯著,以第3點為例,ping時延監(jiān)控效果圖如下(11:00之后是優(yōu)化后):

640 (2).png

容器定制特性

容器資源展示隔離

很多golang,java程序的高效運行依賴于正確獲取進程可用的CPU和內存資源。但這類程序在容器中獲取到的是節(jié)點的CPU和內存資源,與實際容器所分配的資源并不匹配,往往會造成進程的線程池等參數(shù)不合理,從而帶來問題。

社區(qū)主流的解決方案是通過部署FUSE實現(xiàn)的LXCFS來實現(xiàn)/proc/cpuinfo,/proc/meminfo等資源展示按容器隔離。這個方案需要在節(jié)點部署LXCFS文件系統(tǒng),也需要往POD sepc中插入相關volume和掛載點的配置。詳情可以參考:Kubernetes Demystified:Using LXCFS to Improve Container Resource Visibility[3]

Tencnet Linux內核中實現(xiàn)了類似LXCFS特性,用戶無需在節(jié)點部署LXCFS文件系統(tǒng),也無需修改POD spec。只需在節(jié)點開啟一個全局開關(sysctl-w kernel.stats_isolated=1),容器中讀取/proc/cpuinfo,/proc/meminfo等文件獲取的就是按容器隔離的,就是這么簡單。

另外,考慮到有些特殊容器,比如節(jié)點監(jiān)控組件,可能就是需要讀取節(jié)點級的信息。為了解決這個問題,專門增加了容器級的開關kernel.container_stats_isolated。在主機級開關開啟的情況下,只需要在容器的啟動腳本里面,關閉容器級的開關(sysctl-w kernel.container_stats_isolated=0),以后在這個容器里面讀取/proc/cpuinfo,/proc/meminfo等文件獲取的就是主機的信息了。(注:容器級開關必須在容器中設置,才能對本容器生效)

請參考詳細使用文檔:容器內CPU、內存、進程、磁盤等信息隔離[4]

更多內核參數(shù)的隔離

·net.ipv4.tcp_max_orphans

·net.ipv4.tcp_workaround_signed_windows

·net.ipv4.tcp_rmem

·net.ipv4.tcp_wmem

·vm.max_map_count

這些內核參數(shù)都是業(yè)務經(jīng)常需要定制修改的。但是社區(qū)內核里面并沒有對這些參數(shù)做namespace化隔離。一個容器對以上參數(shù)的修改,會對主機以及所有其他容器都起作用。

Tencent Linux根據(jù)內外部客戶的需求,實現(xiàn)了這些內核參數(shù)的namespace化隔離,業(yè)務容器可以放心的對這些參數(shù)進行個性化設置而不用擔心對其他業(yè)務的干擾了。

容器缺省內核參數(shù)優(yōu)化

在高并發(fā)的情況下,可能會發(fā)生半連接隊列滿而丟包,可以通過調大net.core.somaxconn來緩解問題。但是容器網(wǎng)絡namespace里面的net.core.somaxconn缺省值只有128,而且是代碼寫死的。在Tencent Linux內核中,我們把這個缺省值調整到4096,從而可以減少高并發(fā)情況下半連接隊列滿的丟包問題。

在TKE如何使用Tencent Linux

如果希望TKE集群的節(jié)點使用Tencent Linux的操作系統(tǒng),需要在創(chuàng)建TKE集群時,操作系統(tǒng)選擇Tencent Linux的:

640 (3).png

注:Tencent Linux除了支持普通的云服務器機型外,還支持黑石物理機與Nvidia GPU的機型。

參考資料

[1]Tencent Linux:https://cloud.tencent.com/document/product/213/38027

[2]pr#81775:https://github.com/kubernetes/kubernetes/issues/81775

[3]Kubernetes Demystified:Using LXCFS to Improve Container Resource Visibility:https://dzone.com/articles/kubernetes-demystified-using-lxcfs-to-improve-cont

[4]容器內CPU、內存、進程、磁盤等信息隔離:https://github.com/Tencent/TencentOS-kernel/wiki/container-resource-view-isolation

[5]Tencent Linux內核代碼:https://github.com/Tencent/TencentOS-kernel

立即登錄,閱讀全文
版權說明:
本文內容來自于騰訊云原生,本站不擁有所有權,不承擔相關法律責任。文章內容系作者個人觀點,不代表快出海對觀點贊同或支持。如有侵權,請聯(lián)系管理員(zzx@kchuhai.com)刪除!
個人VIP