Kubernetes:如何改善大型DDS系統(tǒng)中的軟件交付

系統(tǒng)管理員一致認(rèn)為:部署和管理大型分布式系統(tǒng)非常復(fù)雜。如果您有數(shù)百個(gè)應(yīng)用程序,則很難手動(dòng)執(zhí)行所有操作。為了克服這個(gè)問題,容器技術(shù)已被廣泛應(yīng)用于各種行業(yè)的大規(guī)模分布式系統(tǒng)中。

容器是打包應(yīng)用程序及其依存關(guān)系的軟件部署單元。容器技術(shù)對(duì)于數(shù)據(jù)分發(fā)服務(wù)(Data Distribution Service?)系統(tǒng)可能很有用,尤其是在您擁有大型系統(tǒng)并且需要遠(yuǎn)程部署、更新和擴(kuò)展它的情況下。在這方面,RTI公司已經(jīng)探索Docker和Kubernetes已有相當(dāng)一段時(shí)間了。

作為RTI研究團(tuán)隊(duì)內(nèi)工作的一部分,我們還一直在評(píng)估Kubernetes集群內(nèi)DDS的性能,以幫助確定客戶是否應(yīng)該注意任何問題。在我的兩部分博客的第一部分中,這里將討論什么是Kubernetes,以及它與DDS的關(guān)系。

什么是Kubernetes?

Kubernetes(k8s)是用于容器化應(yīng)用程序的編排平臺(tái)。什么是業(yè)務(wù)流程平臺(tái)?編排平臺(tái)是一組服務(wù),可幫助部署和管理分布式節(jié)點(diǎn)和應(yīng)用程序。具體來說,它通過向上和向下縮放、執(zhí)行更新和回滾,自我修復(fù)等方法來幫助管理分布式應(yīng)用程序。目前,k8s是容器編排的實(shí)際標(biāo)準(zhǔn),它是Google開發(fā)的一個(gè)開源項(xiàng)目,并且目前由Cloud Native Computing Foundation(CNCF)管理。

您可能聽說過Docker。k8與Docker有何關(guān)系?k8和Docker是互補(bǔ)技術(shù)。Docker是當(dāng)前使用最廣泛的容器引擎技術(shù),因此使用Docker開發(fā)和打包然后使用k8來管理這些容器是很常見的。

Kubernetes體系結(jié)構(gòu)

要使用k8s,首先需要設(shè)置k8s集群,否則,如果已經(jīng)有一個(gè)集群,則需要訪問該集群。如果您沒有集群,請(qǐng)簽出kubeadm來設(shè)置分布式集群,或者查看minikube來本地設(shè)置。使用這些工具非常容易。

k8s集群是什么樣的?如圖1所示,每個(gè)k8s集群至少由一個(gè)主節(jié)點(diǎn)和多個(gè)工作節(jié)點(diǎn)組成。主服務(wù)器充當(dāng)集群的控制平面。每個(gè)工作程序節(jié)點(diǎn)管理一個(gè)容器運(yùn)行時(shí),例如Docker;它處理容器的生命周期操作,例如拉容器圖像,啟動(dòng)和停止容器。每個(gè)工作節(jié)點(diǎn)還具有一個(gè)稱為kubelet的代理,該代理與主服務(wù)器進(jìn)行通信以進(jìn)行容器編排。

一旦您的k8s集群?jiǎn)?dòng)并運(yùn)行,就可以通過k8s命令行工具kubectl將k8s清單文件發(fā)送到主服務(wù)器來部署容器。

圖1. Kubernetes的概念和架構(gòu)

Kubernetes網(wǎng)絡(luò)

現(xiàn)在,讓我解釋一下k8的網(wǎng)絡(luò)模型,因?yàn)檫@將是與DDS最為相關(guān)的主題。K8s使用Docker作為默認(rèn)的容器引擎,但是其聯(lián)網(wǎng)方法不同于Docker的默認(rèn)方法。

k8s引入了一個(gè)稱為“ pod”的新概念作為其可部署單元。容器是具有共享存儲(chǔ)/網(wǎng)絡(luò)的一個(gè)或多個(gè)容器的集合。每個(gè)Pod都有自己直接可訪問的IP地址,因此,您無需像處理Docker那樣處理容器與主機(jī)之間的映射端口。

該網(wǎng)絡(luò)模型創(chuàng)建了一個(gè)干凈的,向后兼容的模型,在其中可以將Pod視為物理主機(jī)。Kubernetes的網(wǎng)絡(luò)模型具有以下基本要求:

· 所有容器無需網(wǎng)絡(luò)地址轉(zhuǎn)換(NAT)即可與所有其他容器通信。

· 所有節(jié)點(diǎn)都可以在沒有NAT的情況下與所有容器通信(反之亦然)。

· 容器所看到的IP與其他人所看到的IP是相同的。

從中我們得到的啟發(fā)

與單獨(dú)使用Docker相比,k8s網(wǎng)絡(luò)模型更適合DDS。 DDS參與者交換其IP地址以進(jìn)行點(diǎn)對(duì)點(diǎn)通信,因此DDS在沒有NAT的網(wǎng)絡(luò)上可以更好地工作。

DDS發(fā)現(xiàn)服務(wù)對(duì)于k8s非常有用。 Pod的IP地址不可靠,因?yàn)樗鼈兊腎P地址是在創(chuàng)建時(shí)動(dòng)態(tài)分配的。因此,通常將Pod縫合到具有可靠IP地址和DNS名稱的“ k8s服務(wù)”中。然后,k8s服務(wù)負(fù)載平衡了縫合后端后端的網(wǎng)絡(luò)流量。使用DDS發(fā)現(xiàn)服務(wù),您不需要k8s服務(wù),因?yàn)镈DS窗格可以通過主題發(fā)現(xiàn)并建立彼此的連接,從而抽象出基于IP的通信。這將允許DDS Pod在無需k8s服務(wù)的情況下進(jìn)行發(fā)現(xiàn)和通信,從而解決了IP不可靠性問題。

k8s提供了一組不錯(cuò)的功能,用于部署,更新,擴(kuò)展和自我修復(fù)分布式應(yīng)用程序。盡管這是事實(shí),但可能難以完全理解和利用所有功能。我們真的需要k8來管理DDS應(yīng)用程序嗎?我會(huì)說并不是每個(gè)系統(tǒng)都需要它。但是,如果您的系統(tǒng)是:

1. 大規(guī)模的數(shù)百個(gè)節(jié)點(diǎn)和應(yīng)用程序。

2. 利用容器包裝應(yīng)用程序。

3. 需要自動(dòng)縮放和自我修復(fù)功能。

使用k8s的自我修復(fù)功能的一個(gè)問題是,檢測(cè)和啟動(dòng)新容器可能要花費(fèi)一分鐘或更長(zhǎng)時(shí)間。此恢復(fù)時(shí)間不會(huì)影響群集的無狀態(tài)應(yīng)用程序,但是會(huì)嚴(yán)重影響有狀態(tài)的應(yīng)用程序。作為RTI研究團(tuán)隊(duì)當(dāng)前工作的一部分,我們一直在研究為關(guān)鍵應(yīng)用程序支持自我修復(fù)的機(jī)制,這些機(jī)制有可能將恢復(fù)時(shí)間縮短到100毫秒以下。

在本博客的下一部分中,我將以RTI PerfTest為例,分享在k8s集群中部署DDS應(yīng)用程序的特定說明和配置。如果您對(duì)此主題感興趣,請(qǐng)檢查一下!

關(guān)于作者

Kyoungho An是Real-Time Innovations(RTI)的高級(jí)研究工程師。他在分布式實(shí)時(shí)嵌入式系統(tǒng)方面擁有10年的經(jīng)驗(yàn)。他的研究興趣包括發(fā)布/訂閱中間件,以及分布式系統(tǒng)的部署和監(jiān)視。他曾擔(dān)任首席研究員,領(lǐng)導(dǎo)過多個(gè)由DOD和DOE資助的研究項(xiàng)目。他在期刊和會(huì)議上發(fā)表了針對(duì)分布式基于事件的系統(tǒng),中間件和網(wǎng)絡(luò)物理系統(tǒng)的研究論文。他擁有博士學(xué)位。范德比爾特大學(xué)計(jì)算機(jī)科學(xué)博士學(xué)位。

(免責(zé)聲明:本網(wǎng)站內(nèi)容主要來自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準(zhǔn)確性及可靠性,但不保證有關(guān)資料的準(zhǔn)確性及可靠性,讀者在使用前請(qǐng)進(jìn)一步核實(shí),并對(duì)任何自主決定的行為負(fù)責(zé)。本網(wǎng)站對(duì)有關(guān)資料所引致的錯(cuò)誤、不確或遺漏,概不負(fù)任何法律責(zé)任。
任何單位或個(gè)人認(rèn)為本網(wǎng)站中的網(wǎng)頁或鏈接內(nèi)容可能涉嫌侵犯其知識(shí)產(chǎn)權(quán)或存在不實(shí)內(nèi)容時(shí),應(yīng)及時(shí)向本網(wǎng)站提出書面權(quán)利通知或不實(shí)情況說明,并提供身份證明、權(quán)屬證明及詳細(xì)侵權(quán)或不實(shí)情況證明。本網(wǎng)站在收到上述法律文件后,將會(huì)依法盡快聯(lián)系相關(guān)文章源頭核實(shí),溝通刪除相關(guān)內(nèi)容或斷開相關(guān)鏈接。 )

贊助商
2020-05-28
Kubernetes:如何改善大型DDS系統(tǒng)中的軟件交付
系統(tǒng)管理員一致認(rèn)為:部署和管理大型分布式系統(tǒng)非常復(fù)雜。如果您有數(shù)百個(gè)應(yīng)用程序,則很難手動(dòng)執(zhí)行所有操作。為了克服這個(gè)問題,容器技術(shù)已被廣泛應(yīng)用于各種行業(yè)的大規(guī)模分布式系統(tǒng)中。

長(zhǎng)按掃碼 閱讀全文