翻譯|是否應(yīng)該在 Kubernetes 上運(yùn)行數(shù)據(jù)庫

數(shù)據(jù)庫如何在 Kubernetes 上運(yùn)行贡蓖?如果可以曹鸠,哪些類型的數(shù)據(jù)庫和數(shù)據(jù)最適合使用 K8s?讓我們一起來看看斥铺。

Kubernetes 是用于自動(dòng)部署彻桃、擴(kuò)展和管理容器化應(yīng)用程序的一個(gè)開源的容器編排解決方案。盡管 Kubernetes 最初是為無狀態(tài)應(yīng)用程序設(shè)計(jì)的仅父,但隨著有狀態(tài)工作負(fù)載的日益流行叛薯,Kubernetes 也可以于管理有狀態(tài)應(yīng)用程序。

通常情況下笙纤,容器是無狀態(tài)的耗溜,如果容器崩潰或需要重啟,容器中的數(shù)據(jù)肯定會丟失省容。作為一個(gè)容器編排器抖拴,Kubernetes 會保持定期重啟并在節(jié)點(diǎn)間移動(dòng)容器。無論 Kubernetes 對運(yùn)行應(yīng)用程序的容器做了什么,這對于需要保存數(shù)據(jù)的有狀態(tài)工作負(fù)載來說都是一個(gè)重要的問題阿宅。

眾所周知候衍,數(shù)據(jù)庫服務(wù)器是一個(gè)有狀態(tài)的應(yīng)用程序。

那數(shù)據(jù)庫如何在 Kubernetes 上運(yùn)行洒放?Kubernetes 是否有機(jī)制來管理此類應(yīng)用程序蛉鹿?如果是這樣,什么類型的數(shù)據(jù)庫和數(shù)據(jù)最適合使用它往湿?

在這篇文章中妖异,我們將找到答案。

運(yùn)行數(shù)據(jù)庫的不同方式

以企業(yè)中運(yùn)行數(shù)據(jù)庫服務(wù)器的不同方式為例分為:

  • 本地自有數(shù)據(jù)庫:目前許多公司仍然選擇使用虛擬機(jī)在本地或云上托管數(shù)據(jù)庫服務(wù)器领追。企業(yè)負(fù)責(zé)設(shè)置數(shù)據(jù)庫服務(wù)器他膳、設(shè)置其安全性、安裝補(bǔ)丁绒窑、升級棕孙、配置存儲、提供高可用性些膨、擴(kuò)展蟀俊、備份以及執(zhí)行其他的數(shù)據(jù)庫管理員操作。這是手動(dòng)程度最高的方式傀蓉,但這種方式可以完全控制數(shù)據(jù)庫和數(shù)據(jù)欧漱。
  • 云上托管數(shù)據(jù)庫:大多數(shù)現(xiàn)代企業(yè)會選擇 Amazon RDS职抡、Azure 數(shù)據(jù)庫葬燎、谷歌云數(shù)據(jù)庫 或 Instaclustr 等在云上部署和擴(kuò)展數(shù)據(jù)庫服務(wù)器更容易的解決方案。供應(yīng)商負(fù)責(zé)存儲缚甩、計(jì)算谱净、網(wǎng)絡(luò)帶寬、安裝擅威、升級和高可用性等壕探。作為消費(fèi)者的企業(yè)只需將數(shù)據(jù)庫托管在供應(yīng)商提供的一個(gè)實(shí)例上,該實(shí)例運(yùn)行你選擇的數(shù)據(jù)庫引擎(如 SQL 或 NoSQL)郊丛。
  • Kubernetes 托管數(shù)據(jù)庫:該方式是以上兩種方式的混合體李请。你可以在本地或云端運(yùn)行 Kubernetes 或者使用托管服務(wù)。通過這種方法厉熟,你可以利用 Kubernetes 的許多優(yōu)勢导盅,如自動(dòng)調(diào)度、自修復(fù)或水平伸縮揍瑟。但數(shù)據(jù)庫的使用(如性能調(diào)優(yōu)白翻、備份和恢復(fù))仍需要你注意,并且可能會由于一些容器化特點(diǎn)而略有不同绢片。

持久性存儲和 K8s 的其他特性

盡管開發(fā) Kubernetes 的目的是管理不需要數(shù)據(jù)持久性的容器化應(yīng)用程序滤馍,但它現(xiàn)在也提供了管理有狀態(tài)應(yīng)用程序的解決方案岛琼。持久卷( Persistent volumes 簡稱 PV)[1] 提供了一個(gè) API,允許 Kubernetes 管理員管理卷[2]巢株,它與更多存儲種類[3] 一起提供了一種安全而抽象的方式來存儲和管理數(shù)據(jù)槐瑞。

然而,云是不可預(yù)測的阁苞,Kubernetes 經(jīng)常需要重啟和重新構(gòu)建 pods随珠。因此,持久卷很難在節(jié)點(diǎn)間移動(dòng)數(shù)據(jù)猬错,并同時(shí)確保它們連接到正確的容器窗看。更復(fù)雜的是,一些數(shù)據(jù)庫需要運(yùn)行在多節(jié)點(diǎn)集群配置中倦炒。

Kubernetes 1.5 版本[4] 中引入了一些設(shè)計(jì)來幫助解決這些問題显沈。StatefulSets[5] 確保 pods 基于相同的容器規(guī)范,即使它們被移動(dòng)到另一個(gè)節(jié)點(diǎn)也保持唯一的 ID逢唤。通過唯一 ID 將 pods 與持久卷耦合起來拉讯,即使在重新調(diào)度它們時(shí),也可以維護(hù)工作負(fù)載的狀態(tài)鳖藕。DaemonSets[6] 雖然稍微復(fù)雜一些魔慷,但也是在集群的每個(gè)節(jié)點(diǎn)上運(yùn)行工作副本的一種方式。

分布式有狀態(tài)工作負(fù)載通常需要一系列預(yù)定義資源無法處理的復(fù)雜操作著恩。例如院尔,分布式數(shù)據(jù)庫可能需要在數(shù)據(jù)庫節(jié)點(diǎn)(在 Kubernetes 中,是一個(gè) pod)出現(xiàn)故障時(shí)執(zhí)行一組特定的操作喉誊。這類操作的例子可以是選舉領(lǐng)導(dǎo)者邀摆、平衡數(shù)據(jù)等等。

原生 Kubernetes 功能無法真正處理這些情況伍茄,但其自定義資源(Custom resources)[7] 可以提供幫助栋盹。 Custom resources 允許 Kubernetes API 使用領(lǐng)域特定的邏輯進(jìn)行擴(kuò)展,定義新的資源類型和控制器[8]敷矫。Operator 模式[9] 通過幫助開發(fā)自定義解決方案例获,利用自定義資源來管理應(yīng)用程序及其組件。

OSS 框架曹仗,如 kubebuilder[10]榨汤,或 Operator Framework[11],提供了構(gòu)建塊來創(chuàng)建 Operator整葡,如 Postgres Operator[12]件余、MySQL Operator for Kubernetes[13], Elastic Cloud on Kubernetes (ECK)[14],或 K8ssandra[15]。

分布式數(shù)據(jù)庫的特性

大多數(shù)數(shù)據(jù)庫引擎都提供了一種或多種方式來分發(fā)數(shù)據(jù)并使其具有高可用性啼器。當(dāng)選擇要在 Kubernetes 上運(yùn)行數(shù)據(jù)庫時(shí)旬渠,你需要考慮以下特性:

  • 復(fù)制:數(shù)據(jù)庫是否支持復(fù)制?如果支持端壳,它支持什么類型的復(fù)制(如:雙向復(fù)制告丢、事務(wù)復(fù)制和快照)?這將有助于提高可靠性损谦、容錯(cuò)性和可訪問性岖免。
  • 分片:數(shù)據(jù)庫是否能夠?qū)?shù)據(jù)進(jìn)行分區(qū),并在不同的實(shí)例(即 pod)中保存不同的片段照捡?這可以幫助優(yōu)化冗余和分散負(fù)載颅湘。
  • 故障轉(zhuǎn)移:數(shù)據(jù)庫是否能夠從主節(jié)點(diǎn)、讀寫節(jié)點(diǎn)切換到其他只讀節(jié)點(diǎn)并將只讀節(jié)點(diǎn)提升為主節(jié)點(diǎn)栗精?這也將有助于提高可靠性闯参、容錯(cuò)性和可訪問性。
  • 可伸縮性:數(shù)據(jù)庫是否具備可伸縮性(向內(nèi)擴(kuò)展和向外擴(kuò)展)悲立?Kubernetes 為水平擴(kuò)展鋪平了道路鹿寨,但是數(shù)據(jù)庫需要根據(jù)需要添加或刪除實(shí)例。這可以幫助處理增加的負(fù)載或在負(fù)載下降時(shí)降低成本薪夕。
    具有這些特性的數(shù)據(jù)庫(例如:MySQL脚草、PostgreSQL、ClickHouse原献、Elasticsearch馏慨、MongoDB 或 Cassandra 等)可以更輕松地應(yīng)對異構(gòu)云環(huán)境的不確定性。

數(shù)據(jù)可用性的考慮

由于 pod 和計(jì)算節(jié)點(diǎn)在本質(zhì)上通常是臨時(shí)的嚼贡,因此熏纯,Kubernetes 更適合于某些類型的數(shù)據(jù)。重要的是要了解數(shù)據(jù)的重要性粤策,以及它必須在多大程度上可用。

為了實(shí)現(xiàn)高可用性误窖,一些數(shù)據(jù)庫引擎使用所謂的最終一致性模型叮盘。最終一致性是一種技術(shù),它確保如果給定的數(shù)據(jù)塊沒有新的更新霹俺,所有對它的訪問都將返回最后更新的值柔吼。它假設(shè),在任何時(shí)間點(diǎn)丙唧,不同節(jié)點(diǎn)的數(shù)據(jù)可能存在一些不一致(取決于從哪里讀取它)愈魏,因?yàn)樗诓粩喔拢且坏└峦瓿桑泄?jié)點(diǎn)都將擁有它的相同副本培漏,并且所有客戶端請求都將獲得相同的數(shù)據(jù)溪厘。當(dāng)你在 Kubernetes 中運(yùn)行數(shù)據(jù)庫系統(tǒng)時(shí),需要從業(yè)務(wù)角度來看這是否可接受牌柄。

一些數(shù)據(jù)庫引擎可以處理故障轉(zhuǎn)移(例如畸悬,當(dāng)運(yùn)行數(shù)據(jù)的主副本的 pod 重新調(diào)度或崩潰時(shí)),但備用節(jié)點(diǎn)恢復(fù)并承擔(dān)主要節(jié)點(diǎn)角色可能需要一些時(shí)間珊佣。你需要考慮在這種情況下蹋宦,可以承受多少數(shù)據(jù)不可用,以及是否可以接受使用舊數(shù)據(jù)咒锻。

如你所見冷冗,這完全取決于業(yè)務(wù)需求。處理瞬態(tài)數(shù)據(jù)(如緩存層)惑艇、只讀數(shù)據(jù)(如查找表)或可輕松重建的數(shù)據(jù)(如 API 輸出)的工作負(fù)載時(shí)贾惦,很顯然更適合在 Kubernetes 上。

總結(jié)

作為一種容器編排技術(shù)敦捧,Kubernetes 簡化了許多常見的操作問題须板,例如調(diào)度、自動(dòng)擴(kuò)展或故障轉(zhuǎn)移兢卵。雖然它非常適用于無狀態(tài)工作負(fù)載习瑰,但有狀態(tài)工作負(fù)載(如數(shù)據(jù)庫)還有其他需要解決的問題。我們已經(jīng)看到:

  • 持久卷和存儲類提供了一種安全而抽象的方式來管理數(shù)據(jù)秽荤;
  • 通過允許將 pod 與持久數(shù)據(jù)綁定甜奄,可以在這些概念的基礎(chǔ)上構(gòu)建 StatefulSet 和 DaemonSet;
  • 自定義資源和 Operator 可以幫助為需要數(shù)據(jù)持久性的應(yīng)用程序提供自定義邏輯窃款。
    但是课兄,重要的是要考慮對要在 Kubernetes 上運(yùn)行的數(shù)據(jù)庫引擎的可用支持,以及要存儲的數(shù)據(jù)類型和數(shù)據(jù)的可用性要求晨继。在 Kubernetes 中運(yùn)行服務(wù)需要應(yīng)對一定程度的波動(dòng)性烟阐。

因此,Kubernetes 上更適合部署可以處理復(fù)制紊扬、分片和故障轉(zhuǎn)移的數(shù)據(jù)庫蜒茄。同樣,Kubernetes 托管的理想數(shù)據(jù)是可以輕松快速重新生成的數(shù)據(jù)餐屎。歸根結(jié)底檀葛,這將取決于業(yè)務(wù)需要的容錯(cuò)能力。

原文:https://www.containiq.com/post/should-you-run-a-database-on-kubernetes

引用鏈接

1.持久卷:https://www.containiq.com/post/kubernetes-persistent-volumes

2.卷:https://kubernetes.io/docs/concepts/storage/volumes/

3.存儲種類:https://kubernetes.io/docs/concepts/storage/storage-classes/

4.Kubernetes 1.5:https://kubernetes.io/blog/2016/12/kubernetes-1-5-supporting-production-workloads/

5.StatefulSets:https://www.containiq.com/post/kubernetes-statefulsets

6.DaemonSets:https://www.containiq.com/post/using-kubernetes-daemonsets-effectively

7.自定義資源:https://www.containiq.com/post/kubernetes-crds-custom-resource-definitions

8.控制器:https://www.containiq.com/post/kubernetes-controllers

9.Operator 模式:https://kubernetes.io/docs/concepts/extend-kubernetes/operator/

10.kubebuilder:https://github.com/kubernetes-sigs/kubebuilder

11.Operator Framework:https://operatorframework.io/

12.Postgres Operator:https://github.com/zalando/postgres-operator

13.MySQL Operator:https://github.com/mysql/mysql-operator

14.Elastic Cloud on Kubernetes:https://github.com/elastic/cloud-on-k8s

15.K8ssandra:https://k8ssandra.io/

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末腹缩,一起剝皮案震驚了整個(gè)濱河市屿聋,隨后出現(xiàn)的幾起案子空扎,更是在濱河造成了極大的恐慌,老刑警劉巖润讥,帶你破解...
    沈念sama閱讀 210,835評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件转锈,死亡現(xiàn)場離奇詭異,居然都是意外死亡象对,警方通過查閱死者的電腦和手機(jī)黑忱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,900評論 2 383
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來勒魔,“玉大人甫煞,你說我怎么就攤上這事」诰睿” “怎么了抚吠?”我有些...
    開封第一講書人閱讀 156,481評論 0 345
  • 文/不壞的土叔 我叫張陵烘浦,是天一觀的道長台谍。 經(jīng)常有香客問我,道長锌奴,這世上最難降的妖魔是什么孵户? 我笑而不...
    開封第一講書人閱讀 56,303評論 1 282
  • 正文 為了忘掉前任萧朝,我火速辦了婚禮,結(jié)果婚禮上夏哭,老公的妹妹穿的比我還像新娘检柬。我一直安慰自己,他們只是感情好竖配,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,375評論 5 384
  • 文/花漫 我一把揭開白布何址。 她就那樣靜靜地躺著,像睡著了一般进胯。 火紅的嫁衣襯著肌膚如雪用爪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,729評論 1 289
  • 那天胁镐,我揣著相機(jī)與錄音偎血,去河邊找鬼。 笑死希停,一個(gè)胖子當(dāng)著我的面吹牛烁巫,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播宠能,決...
    沈念sama閱讀 38,877評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼磁餐!你這毒婦竟也來了违崇?” 一聲冷哼從身側(cè)響起阿弃,我...
    開封第一講書人閱讀 37,633評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎羞延,沒想到半個(gè)月后渣淳,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,088評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡伴箩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,443評論 2 326
  • 正文 我和宋清朗相戀三年入愧,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嗤谚。...
    茶點(diǎn)故事閱讀 38,563評論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡棺蛛,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出巩步,到底是詐尸還是另有隱情旁赊,我是刑警寧澤,帶...
    沈念sama閱讀 34,251評論 4 328
  • 正文 年R本政府宣布椅野,位于F島的核電站终畅,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏竟闪。R本人自食惡果不足惜离福,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,827評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望炼蛤。 院中可真熱鬧妖爷,春花似錦、人聲如沸鲸湃。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,712評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽暗挑。三九已至笋除,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間炸裆,已是汗流浹背垃它。 一陣腳步聲響...
    開封第一講書人閱讀 31,943評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留烹看,地道東北人国拇。 一個(gè)月前我還...
    沈念sama閱讀 46,240評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像惯殊,于是被迫代替她去往敵國和親酱吝。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,435評論 2 348

推薦閱讀更多精彩內(nèi)容