騰訊云云原生混合云-TKE發(fā)行版

來源: 騰訊云原生
作者:徐蓓 李波
時間:2021-05-31
17527
TKE發(fā)行版(TKE Kubernetes Distro)是由騰訊云TKE發(fā)布的K8s發(fā)行版本,用于幫助用戶創(chuàng)建安全可靠的K8s集群。

背景

TKE發(fā)行版(TKE Kubernetes Distro)是由騰訊云TKE發(fā)布的K8s發(fā)行版本,用于幫助用戶創(chuàng)建安全可靠的K8s集群。用戶可依托TKE發(fā)行版在自建或者托管機房、物理機或者虛機上,運行與TKE完全一致的K8s服務(wù)。TKE發(fā)行版集群可無縫與騰訊云TKE集成,進而組建混合云。用戶可通過TKE發(fā)行版集群將云下業(yè)務(wù)擴展到云上,利用騰訊云TKE、EKS等云服務(wù)彈性能力,為業(yè)務(wù)提供強大的資源保障。

目前TKE發(fā)行版已在GitHub開源:[https://github.com/tkestack/tke-k8s-distro]

使用場景與定位

在混合云場景下,不同的云服務(wù)商提供的K8s并不完全相同。并且用戶在云服務(wù)商以外的環(huán)境只能使用社區(qū)版K8s,而運行環(huán)境的任何微小差異都可能導(dǎo)致業(yè)務(wù)故障,因此,如何盡可能地保障多環(huán)境中基礎(chǔ)組件的一致性變得尤為重要。TKE發(fā)行版便是解決這個問題的一個不錯的選擇,用戶無需花費精力去關(guān)注不同環(huán)境下K8s的能力差異,以及自行修復(fù)K8s中的遇到的問題。

依賴TKE發(fā)行版,用戶現(xiàn)在可以編譯和構(gòu)建與騰訊云TKE相同的K8s版本。這意味著用戶現(xiàn)在可以手動部署可靠和安全的集群,而無需持續(xù)測試和跟蹤K8s更新、依賴關(guān)系和安全補丁。每一個TKE發(fā)行版都遵循騰訊云TKE和K8s社區(qū)標(biāo)準(zhǔn)新版本兼容性的流程。

TKE發(fā)行版在保證兼容性的基礎(chǔ)上,對K8s進行了擴展,并且與騰訊云TKE服務(wù)保持版本一致。用戶可以在自己的IDC或者混合云上部署TKE發(fā)行版,使用已有企業(yè)用戶大規(guī)模驗證的可靠安全的K8s服務(wù)。

TKE發(fā)行版的每個版本都會通過K8s社區(qū)官方一致性測試,保證兼容性,同時以patch形式提供源代碼,并提供構(gòu)建工具幫助用戶進行編譯。TKE發(fā)行版目前支持v1.20版本。

640.webp.jpg

我們的優(yōu)勢

大規(guī)模生產(chǎn)集群驗證

TKE發(fā)行版提供與騰訊云TKE相同的可安裝版本和開源代碼,功能和穩(wěn)定性經(jīng)過大量企業(yè)用戶、公有云及自研云錘煉。用戶可以使用提供的源代碼和編譯工具進行構(gòu)建和部署。

無縫集成公有云TKE

TKE發(fā)行版可支持用戶在自建或者托管機房,物理機或者虛機上,運行與騰訊云TKE完全一致的K8s服務(wù)。并且可以無縫與騰訊云TKE集成,組建混合云集群。

更長支持周期

TKE發(fā)行版的支持周期比社區(qū)版更長。在社區(qū)版停止支持后,TKE發(fā)行版將繼續(xù)得到支持,包括重要問題以及安全漏洞的修復(fù)。

更多實用能力增強

TKE發(fā)行版結(jié)合騰訊自身業(yè)務(wù)特點和經(jīng)驗,針對部分場景(彈性擴容、離在線混部、資源隔離等)實現(xiàn)了能力增強。并且TKE發(fā)行版緊跟社區(qū)趨勢,主導(dǎo)或深度參與社區(qū)KEP設(shè)計與實現(xiàn)。對于有實用價值KEP會先于社區(qū)支持,讓用戶提前享受到云原生技術(shù)進步。

功能增強

支持彈性擴容到騰訊云EKS服務(wù)

EKS是騰訊云的彈性容器服務(wù),用戶無須購買節(jié)點即可部署工作負(fù)載,非常適合突發(fā)等臨時的擴容需求。在需要臨時擴容時,可以秒級快速把工作負(fù)載從TKE發(fā)行版集群擴容到云上EKS,應(yīng)對突發(fā)和臨時流量,提高資源利用率,降低運維和資金成本。

支持動態(tài)修改kube-controller-manager日志級別

在運維K8s生產(chǎn)集群中,我們一般設(shè)置較低日志級別(0~2),而在問題排查時我們需要提高日志級別。TKE發(fā)行版實現(xiàn)了動態(tài)修改日志級別功能,從而避免因組件重啟導(dǎo)致關(guān)鍵日志丟失。目前K8s官方版本支持kube-apiserver、kubelet和kube-scheduler設(shè)置,TKE發(fā)行版額外實現(xiàn)了kube-controller-manager組件的日志動態(tài)調(diào)級。

該feature已提交社區(qū):【https://github.com/kubernetes/kubernetes/pull/98262】

支持Memory QoS with cgroups v2特性(進行中)

Memory QoS with cgroups v2是TKE團隊設(shè)計實現(xiàn)的內(nèi)存QoS功能,它利用v2 memory controller中memory.min/memory.high為pod/container/node提供全方位的內(nèi)存保護。

目前該KEP已被K8s社區(qū)接受,預(yù)計在v1.22中實現(xiàn)alpha版。TKE發(fā)行版會先于社區(qū)支持該特性,為用戶Pod、集群節(jié)點等提供更好的內(nèi)存保護。

Memory QoS with cgroups v2:【https://github.com/kubernetes/enhancements/tree/master/keps/sig-node/2570-memory-qos】

支持TencentOS QoS特性(進行中)

TencentOS是騰訊針對云場景研發(fā)的Linux操作系統(tǒng),專門針對容器場景提供了原生優(yōu)先級支持及資源隔離增強,包括CPU、內(nèi)存、磁盤IO和網(wǎng)絡(luò)IO等。TKE發(fā)行版內(nèi)置了對TencentOS QoS特性的支持,將K8s資源隔離和QoS分級offload到TencentOS實現(xiàn)。該特性在開發(fā)中,預(yù)計下個版本支持。

TencentOS:【https://github.com/Tencent/TencentOS-kernel】

穩(wěn)定性增強

TKE發(fā)行版依據(jù)大量生產(chǎn)經(jīng)驗,修復(fù)眾多生產(chǎn)級bug,支持千萬核集群在騰訊穩(wěn)定運行。主要bugfix包括:

1.修復(fù)使用containerd時集群監(jiān)控指標(biāo)缺失問題

在containerd作為container runtime的集群中,kubelet沒有正確設(shè)置采集指標(biāo)的container name,導(dǎo)致不能被歸類和分析。TKE發(fā)行版本修復(fù)了該問題,提交社區(qū)PR:【https://github.com/kubernetes/kubernetes/pull/90260】

2.修復(fù)刪除Pod后立即創(chuàng)建并調(diào)度到同一個節(jié)點可能導(dǎo)致無法掛載成功的問題

K8s statefulset pod在刪除后重新創(chuàng)建,如果pod調(diào)度到同一個節(jié)點,會因為卷掛載失敗而導(dǎo)致啟動失敗。TKE發(fā)行版修復(fù)了該問題,提交社區(qū)PR:【https://github.com/kubernetes/kubernetes/pull/72914】

3.修復(fù)CentOS下創(chuàng)建容器會導(dǎo)致cgroup泄露的問題

TKE發(fā)行版關(guān)閉了kernel memory accouting以避免cgroup泄露。

4.修復(fù)kubectl describe deployment <xxx> NewReplicaSet 顯示為 <none> 的問題

kubectl describe在獲取deployment對象后,會對volume進行排序,有時會導(dǎo)致無法匹配到最新replicaset。TKE發(fā)行版修復(fù)了該問題,提交社區(qū)PR:【https://github.com/kubernetes/kubernetes/pull/97752】

5.修復(fù)Pod容器鏡像有多tag時,Pod status鏡像tag會不匹配問題

Pod容器一鏡像有多tag時,會導(dǎo)致pod spec容器鏡像tag與kubelet上報不符。TKE發(fā)行版backport社區(qū)PR修復(fù)此問題:【https://github.com/kubernetes/kubernetes/pull/94833】

6.修復(fù)aws credential provider導(dǎo)致kubelet啟動20s延遲問題

AWS credential provider在初始化時會嘗試連接AWS元數(shù)據(jù)服務(wù),會導(dǎo)致非AWS集群出現(xiàn)最長20s啟動延遲。TKE發(fā)行版上報了bug【https://github.com/kubernetes/kubernetes/issues/92162】

并backport社區(qū)PR【https://github.com/kubernetes/kubernetes/pull/93260】

7.修復(fù)Ubuntu16.04 lxcfs升級造成pod退出問題

K8s集群在Ubuntu16.04下默認(rèn)安裝低版本lxcfs,在對lxcfs升級后,會導(dǎo)致pod無法正常運行。原因是低版本lxcfs掛載cgroupfs,kubelet在啟動時會使用lxcfs已掛載cgroupfs,而非系統(tǒng)/sys/fs/cgroup。lxcfs在升級新版本后,舊cgroupfs會被解掛,導(dǎo)致kubelet對pod cgroup操作失敗。TKE發(fā)行版修復(fù)了該問題。

如何使用TKE發(fā)行版

TKE發(fā)行版提供了安裝工具腳本,幫助用戶自動編譯和構(gòu)建發(fā)行版鏡像,極大降低了TKE發(fā)行版的使用門檻。

編譯和構(gòu)建流程包括:

1.拉取patch代碼

git clone[https://github.com/tkestack/tke-k8s-distro](https://github.com/tkestack/tke-k8s-distro)

2.編譯組件

make

或者

make \<release\>

目前支持1.20版本。

3.組件產(chǎn)出

編譯過程中,源碼路徑為_src/&lt;release&gt;,編譯產(chǎn)出路徑為_output/&lt;release&gt;,組件包括kubeadm,kube-apiserver,kube-controller-manager,kubectl,kubelet,kube-proxy,kube-scheduler。

下一步

TKE發(fā)行版的推出,使得用戶線下IDC與騰訊云上TKE的融合成為可能。我們期望TKE發(fā)行版未來能成為混合云與多云的基石,讓用戶在混合云環(huán)境中,可隨時隨地享受到和云上TKE一致的體驗。

TKE發(fā)行版未來會以開源方式運作,用戶可以通過GitHub提供任何反饋,不僅限于Issue和PR。

GitHub:【https://github.com/tkestack/tke-k8s-distro】

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