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

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

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

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

640.png

這時(shí)候大家應(yīng)該會(huì)有很多的疑問,接下來的FAQ會(huì)盡力解答大家的疑問。

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

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

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

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

內(nèi)核是什么版本?

Tencent Linux 2.4目前是4.14內(nèi)核。

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

年底會(huì)推出5.4版本。

Tencent Linux跟TKE的Optimized鏡像是什么關(guān)系?

它們的內(nèi)核是一樣的,但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ù)使用,但以后新建集群將不再支持這兩種鏡像。

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

640 (1).png

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

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

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

2.頂級(jí)內(nèi)核專家團(tuán)隊(duì)的支持。

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

騰訊內(nèi)部業(yè)務(wù)多年的驗(yàn)證和打磨

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

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

內(nèi)核專家團(tuán)隊(duì)的支持

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

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

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

另外我們針對(duì)一些重要的修復(fù),會(huì)提供內(nèi)核熱補(bǔ)丁的在線修復(fù)方式。熱補(bǔ)丁的安裝和生效,不需要重啟機(jī)器,在不中斷客戶業(yè)務(wù)的情況下,提升客戶業(yè)務(wù)的時(shí)延SLA。

對(duì)于漏洞修復(fù),Tencent Linux有著全套的熱補(bǔ)丁方案,包括:應(yīng)用程序級(jí)熱補(bǔ)丁,內(nèi)核級(jí)熱補(bǔ)丁等。每年發(fā)布100多個(gè)熱補(bǔ)丁。大多數(shù)漏洞在一周內(nèi)提供修復(fù)方案。

性能優(yōu)化

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

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

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

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

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

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

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

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

640 (2).png

容器定制特性

容器資源展示隔離

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

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

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

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

請(qǐng)參考詳細(xì)使用文檔:容器內(nèi)CPU、內(nèi)存、進(jìn)程、磁盤等信息隔離[4]

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

·net.ipv4.tcp_max_orphans

·net.ipv4.tcp_workaround_signed_windows

·net.ipv4.tcp_rmem

·net.ipv4.tcp_wmem

·vm.max_map_count

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

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

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

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

在TKE如何使用Tencent Linux

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

640 (3).png

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

參考資料

[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]容器內(nèi)CPU、內(nèi)存、進(jìn)程、磁盤等信息隔離:https://github.com/Tencent/TencentOS-kernel/wiki/container-resource-view-isolation

[5]Tencent Linux內(nèi)核代碼:https://github.com/Tencent/TencentOS-kernel

立即登錄,閱讀全文
版權(quán)說明:
本文內(nèi)容來自于騰訊云原生,本站不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。文章內(nèi)容系作者個(gè)人觀點(diǎn),不代表快出海對(duì)觀點(diǎn)贊同或支持。如有侵權(quán),請(qǐng)聯(lián)系管理員(zzx@kchuhai.com)刪除!
優(yōu)質(zhì)服務(wù)商推薦
更多
掃碼登錄
打開掃一掃, 關(guān)注公眾號(hào)后即可登錄/注冊(cè)
加載中
二維碼已失效 請(qǐng)重試
刷新
賬號(hào)登錄/注冊(cè)
小程序
快出海小程序
公眾號(hào)
快出海公眾號(hào)
商務(wù)合作
商務(wù)合作
投稿采訪
投稿采訪
出海管家
出海管家