將Sidecar容器帶入新的階段-創(chuàng)新互聯(lián)

作者 | 徐迪、張曉宇

創(chuàng)新互聯(lián):自2013年起為各行業(yè)開拓出企業(yè)自己的“網(wǎng)站建設(shè)”服務(wù),為上千公司企業(yè)提供了專業(yè)的成都做網(wǎng)站、網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)和網(wǎng)站推廣服務(wù), 按需開發(fā)網(wǎng)站由設(shè)計(jì)師親自精心設(shè)計(jì),設(shè)計(jì)的效果完全按照客戶的要求,并適當(dāng)?shù)奶岢龊侠淼慕ㄗh,擁有的視覺效果,策劃師分析客戶的同行競(jìng)爭(zhēng)對(duì)手,根據(jù)客戶的實(shí)際情況給出合理的網(wǎng)站構(gòu)架,制作客戶同行業(yè)具有領(lǐng)先地位的。

導(dǎo)讀:本文根據(jù)徐迪和張曉宇在 KubeCon NA 2019 大會(huì)分享整理。分享將會(huì)從以下幾個(gè)方面進(jìn)行切入:首先會(huì)簡(jiǎn)單介紹一下什么是 Sidecar 容器;其次,會(huì)分享幾個(gè)阿里巴巴經(jīng)濟(jì)體的通用場(chǎng)景,以及他們是如何解決這些挑戰(zhàn)的。

Sidecar 簡(jiǎn)介

Sidecar 容器并不是一個(gè)新鮮事物。它是一種設(shè)計(jì)模式,主要用來(lái)做一些輔助的工作,比如網(wǎng)絡(luò)連通性、下載拷貝文件之類的事情;如果大家熟悉 Docker Swarm 的話,就會(huì)發(fā)現(xiàn) Docker Ambassador 其實(shí)就是 Sidecar。

將 Sidecar 容器帶入新的階段

如上所示,Service Consumer 和 Redis Provider 強(qiáng)耦合,部署在同一個(gè)節(jié)點(diǎn)上。如果這個(gè)時(shí)候,Redis Provider 出現(xiàn)問題,需要連接到另外一個(gè) Redis 實(shí)例上,需要重新配置,并重啟 Service Provider。

將 Sidecar 容器帶入新的階段

那么在引入了 Ambassador 以后,問題變得相對(duì)簡(jiǎn)單些,只需要重啟這里的 Redis Ambassador 即可,并不需要 Service Consumer 進(jìn)行任何變動(dòng)。

當(dāng)然這種模式,還可以進(jìn)行跨節(jié)點(diǎn)通信,比如下圖。這樣 Service Consumer 和 Redis Provider 就可以部署在不同的節(jié)點(diǎn)上。在某種程度上,很容易地就將兩種服務(wù)進(jìn)行了解耦。

將 Sidecar 容器帶入新的階段

Sidecar?案例分享

1. Sidecar 容器能用來(lái)干什么?

一般來(lái)講,Sidecar 容器可以:

  • 日志代理/轉(zhuǎn)發(fā),例如 fluentd;
  • Service Mesh,比如 Istio,Linkerd;
  • 代理,比如 Docker Ambassador;
  • 探活:檢查某些組件是不是正常工作;
  • 其他輔助性的工作,比如拷貝文件,下載文件等;

2. 僅此而已?

事實(shí)上,Sidecar 越來(lái)越被大家接受,并且使用越來(lái)越廣泛。Sidecar 容器通常和業(yè)務(wù)容器(非 Sidecar 容器)部署在同一個(gè) Pod 里,共享相同的生命周期,為業(yè)務(wù)容器提供輔助功能。這是一個(gè)非常好的模式,能夠極大程度解耦應(yīng)用,并且支持異構(gòu)組件,降低技術(shù)壁壘。

但目前 Kubernetes 對(duì) Sidecar 的管理還不完善,越來(lái)越不滿足我們的使用,尤其是在生產(chǎn)環(huán)境中使用 Sidecar。

3. 幾個(gè)典型案例

順序依賴

假設(shè)我們?cè)谝粋€(gè) Pod 內(nèi)注入了多個(gè) Sidecar,但是 Sidecar 之間或者 Sidecar 和業(yè)務(wù)容器之間有相互依賴關(guān)系。如下這個(gè)例子,我們需要先啟動(dòng) proxy Sidecar 容器用于建立網(wǎng)絡(luò)連接,這樣 mysql client 才能連接到遠(yuǎn)端的 mysql 集群,并在本地暴露服務(wù)。而后主的業(yè)務(wù)容器才能正常工作。

#1 proxy_container (sidecar)
#2 mysql_client
#3 svc_container

當(dāng)然,有的人會(huì)覺得這個(gè)地方,可以通過諸如更改鏡像啟動(dòng)腳本延遲啟動(dòng)等方法來(lái)解決。但是這些方法侵入性太強(qiáng),不利于擴(kuò)展,還很難進(jìn)行準(zhǔn)確的配置。

Sidecar 管理

我們來(lái)看看另外一個(gè)案例。Sidecar 容器和業(yè)務(wù)容器耦合在同一個(gè) Pod 內(nèi),共享相同的生命周期。因此,單獨(dú)來(lái)管控 Sidecar 容器非常不方,比如更新 Sidecar 的鏡像。

將 Sidecar 容器帶入新的階段

比如,我們已經(jīng)給很多 Pod 注入了 Istio Proxy 這樣的 Sidecar 容器,目前運(yùn)行狀態(tài)良好。但是如果這個(gè)時(shí)候我們想升級(jí)這個(gè) Proxy 鏡像的話,該怎么辦?

如果按照 Istio 社區(qū)官方的文檔,我們需要重新注入這些 Sidecar 容器。具體來(lái)說(shuō),需要?jiǎng)h除原有 Pod,重新生成一份新的 Pod(有些 workload 關(guān)聯(lián)的 Pod,會(huì)由相應(yīng)的 workload 控制器自動(dòng)生成)。

那如果我們有很多個(gè)這樣的 Pod 需要處理的話,怎么辦?通過命令行的話,太不方便,而且容易出錯(cuò)。通過自己?jiǎn)为?dú)寫的代碼的話,可擴(kuò)展性是個(gè)問題,需要頻繁更改這些代碼。

而且這里還有另外一個(gè)問題,我們肯定不會(huì)一下子升級(jí)所有的 Sidecar,肯定要有個(gè)灰度的過程,也就是只升級(jí)一部分 Sidecar,這個(gè)時(shí)候又該怎么辦呢?

社區(qū)進(jìn)展

1. 上游社區(qū)

這里我們非常感謝 Joseph Irving (@Joseph-Irving)?提出了一個(gè) Sidecar kep,通過定義 LifecycleType 來(lái)區(qū)分是否是 Sidecar 容器。

將 Sidecar 容器帶入新的階段

未來(lái)只需要在 Pod Spec 中,按如下方式標(biāo)記即可:

name: sidecarContainer
image: foo
lifecycle:
  type: Sidecar

Pod 內(nèi)容器的啟動(dòng)順序按照:初始化容器->Sidecar 容器->業(yè)務(wù)容器 的順序依次啟動(dòng)。

其中上述 kep 的 kubelet 端實(shí)現(xiàn)?正在進(jìn)行中。

為了支持 Sidecar 更多的使用場(chǎng)景,我們以此為基礎(chǔ)提出了 PreSidecar 和 PostSidecar,分別用于在業(yè)務(wù)容器之前和之后啟動(dòng)。

具體的使用場(chǎng)景見?我們的 PR。

為什么我們覺得 Sidecar 應(yīng)該區(qū)分前置和后置呢?

這是因?yàn)樵谝恍﹫?chǎng)景下,我們需要 Sidecar 容器優(yōu)先于應(yīng)用容器啟動(dòng),幫助做一些準(zhǔn)備工作。例如分發(fā)證書,創(chuàng)建共享卷,或者拷貝下載一些其他文件等。

將 Sidecar 容器帶入新的階段

而在另外一些場(chǎng)景下,我們需要一些 Sidecar 容器在應(yīng)用容器之后啟動(dòng)。考慮到解耦和版本管理的因素,我們將應(yīng)用分為兩部分,應(yīng)用容器專注于業(yè)務(wù)本身,而一些數(shù)據(jù)和個(gè)性化的配置放在 Sidecar 容器中。通常情況下,這兩個(gè)容器將會(huì)共享一個(gè)存儲(chǔ)卷,后置的 Sidecar 容器會(huì)更新替換掉一些默認(rèn)和過時(shí)數(shù)據(jù)。

將 Sidecar 容器帶入新的階段

當(dāng)然考慮到未來(lái)更復(fù)雜的場(chǎng)景,我們可能還會(huì)對(duì)容器的啟動(dòng)順序做 DAG 編排,當(dāng)然這個(gè)需要視生產(chǎn)實(shí)際需要而定。

將 Sidecar 容器帶入新的階段

2. 螞蟻金服及阿里巴巴如何應(yīng)對(duì)

為了解決 Sidecar 的管理工作,我們需要一個(gè)更細(xì)粒度的 workload 方便我們進(jìn)行管理。這個(gè) workload 我們命名為 SidecarSet,目前已經(jīng)開源,生產(chǎn)可用。大家可以訪問 OpenKruise?這個(gè)項(xiàng)目,可以在項(xiàng)目的 roadmap?里了解我們目前的一些新進(jìn)展。OpenKruise 這個(gè)項(xiàng)目目前有三個(gè)生產(chǎn)可用的 workload,分別是 Advanced StatefulSet、BroadcastJob、SidecarSet。另外2個(gè) workload(AdvancedHPA 和 PodHealer)正在加緊開發(fā)中, 很快會(huì)開源出來(lái),敬請(qǐng)期待。相關(guān)使用 Demo,大家可以觀看 Lachlan Evenson 的嘗鮮視頻。

將 Sidecar 容器帶入新的階段

spec 中的 SidecarContainer 的定義就是 Kubernetes 代碼庫(kù)中的 corev1.Container 定義。通過額外的一個(gè) labelSelector,可以很方便地對(duì)指定的容器組進(jìn)行操作。我們支持滾動(dòng)升級(jí)(RollingUpdate)的方式,讓用戶可以分批的升級(jí) Sidecar,同時(shí)也提供了 pause 功能,可以在緊急情況下暫停 Sidecar 的升級(jí)。

如果只是簡(jiǎn)單升級(jí) Sidecar 的鏡像, SidecarSet 控制器僅僅會(huì) patch 原有 pod 的,非常方便的就可以一鍵升級(jí)鏡像。

其他的挑戰(zhàn)

我們?cè)谏a(chǎn)實(shí)踐過程中,還發(fā)現(xiàn)了一些其他的挑戰(zhàn),目前還在尋找比較好的解法。

1. Sidecar 容器的資源管理

一般來(lái)講 Sidecar 容器占用的資源都比較小,那么這個(gè)資源要不要計(jì)算到整個(gè) pod 當(dāng)中?還是可以直接共享業(yè)務(wù)容器的資源即可?相同的 Sidecar 在和不同的應(yīng)用容器搭配使用,如何準(zhǔn)確給 Sidecar 容器分配資源這些都需要進(jìn)行考慮。

將 Sidecar 容器帶入新的階段

2. Sidecar 容器的容錯(cuò)性

一般來(lái)講,Sidecar 容器都是非主要容器,那么這類容器出現(xiàn)問題時(shí),比如 liveness 探活,要不要對(duì)主容器的狀態(tài)或者整個(gè) pod 的狀態(tài)也產(chǎn)生影響。再或者,Sidecar 鏡像更新出現(xiàn)問題時(shí),要不要直接標(biāo)記整個(gè) pod 出現(xiàn)問題。當(dāng)然,還有一些其他的挑戰(zhàn),我們只是列舉了幾個(gè)通用的。對(duì)于這些挑戰(zhàn),我們需要大家一起集思廣益,找到比較合理的解法。

小結(jié)

隨著 Sidecar 在生產(chǎn)環(huán)境使用越來(lái)越廣泛,對(duì)其的管理愈發(fā)需要重視。Sidecar 雖然和業(yè)務(wù)容器部署在同一個(gè) Pod 內(nèi),但是其本質(zhì)上只是輔助性的容器。本文介紹了目前 Sidecar 的典型使用案例,以及面臨的挑戰(zhàn),同時(shí)跟上游社區(qū)一起合作,將阿里經(jīng)濟(jì)體的技術(shù)解決方案在社區(qū)落地,幫助更多的用戶.

作者簡(jiǎn)介:
徐迪 螞蟻金服技術(shù)專家:負(fù)責(zé)螞蟻金融云 PaaS 平臺(tái)建設(shè),Kubernetes 社區(qū)老兵,核心代碼庫(kù)貢獻(xiàn)量社區(qū)前50;
張曉宇 阿里云技術(shù)專家:負(fù)責(zé)阿里巴巴云原生應(yīng)用容器平臺(tái)的生態(tài)建設(shè),主要設(shè)計(jì)和研發(fā)節(jié)點(diǎn)穩(wěn)定性和資源利用率相關(guān)解決方案,同時(shí)也是 Kubernetes 社區(qū)熱心的成員和貢獻(xiàn)者。

“阿里巴巴云原生關(guān)注微服務(wù)、Serverless、容器、Service Mesh 等技術(shù)領(lǐng)域、聚焦云原生流行技術(shù)趨勢(shì)、云原生大規(guī)模的落地實(shí)踐,做最懂云原生開發(fā)者的技術(shù)圈?!?/p>

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

網(wǎng)站名稱:將Sidecar容器帶入新的階段-創(chuàng)新互聯(lián)
文章出自:http://muchs.cn/article22/djjecc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機(jī)、面包屑導(dǎo)航、微信小程序、網(wǎng)站導(dǎo)航營(yíng)銷型網(wǎng)站建設(shè)Google

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

手機(jī)網(wǎng)站建設(shè)