作者:Stephen Thorn
翻譯:劉玲玲
原文:https://www.percona.com/blog/2020/10/08/the-criticality-of-a-kubernetes-operator-for-databases/
一些剛接觸 Kubernetes 的公司嘗試使用傳統(tǒng)環(huán)境中運行數(shù)據(jù)庫的方法在 Kubernetes 中運行數(shù)據(jù)庫寡具。但是妙啃,不建議這樣做。因為這可能會導致數(shù)據(jù)丟失疯淫,并且也不建議這樣管理生產(chǎn)工作負載。為什么這樣做很危險旁瘫?又如何解決這個問題氢妈?
適合 Kubernetes 的工作負載
在考慮將數(shù)據(jù)庫遷移到 Kubernetes 之前,請確保應用程序的其余部分是云原生的拂玻,并可以使用 Kubernetes。如果您已經(jīng)開始對數(shù)據(jù)庫進行垂直彈性伸縮和水平彈性伸縮宰译,并需要編排數(shù)據(jù)庫來控制成本檐蚜,將其遷移至 Kubernetes 上就是個不錯的選擇。
將數(shù)據(jù)庫工作負載轉(zhuǎn)移到 Kubernetes 上有兩個理想的使用場景:微服務(wù)和統(tǒng)一抽象層沿侈。
龐大的單一數(shù)據(jù)集可能會阻礙發(fā)揮 Kubernetes 的一些優(yōu)點:自修復和高可用性熬甚。這可能是一個問題,因為在加入數(shù)據(jù)庫集群時肋坚,需要耗費時間將數(shù)據(jù)物理傳輸?shù)叫?Pod 實例上乡括。如果數(shù)據(jù)集太大,由于物理限制智厌,這個過程會很慢诲泌,并影響性能和數(shù)據(jù)庫的可用性。而微服務(wù)就非常合適铣鹏,因為它的數(shù)據(jù)集相對較小敷扫,使得 Kubernetes 能很好地進行自動化處理。
希望充分利用云原生應用程序和數(shù)據(jù)庫的公司也非常適合 Kubernetes诚卸。如果想利用統(tǒng)一抽象層在任何地方部署和運行數(shù)據(jù)庫葵第,Kubernetes 是一個很好的選擇『夏纾可以將數(shù)據(jù)庫移動到任何運行著 Kubernetes 的地方卒密。
我們對大型非分片數(shù)據(jù)集以及 Kubernetes 在處理這些數(shù)據(jù)集時的局限性進行了討論,但我們還應該看看什么樣的工作負載更適合傳統(tǒng)平臺棠赛。對吞吐量比較敏感的應用程序在 Kubernetes 上表現(xiàn)可能沒有那么好哮奇,或者不是很劃算。Kubernetes 基本是為容器編排而設(shè)計的睛约,而不是為需要極低延遲的高性能數(shù)據(jù)庫而設(shè)計的鼎俘。也許這能夠?qū)崿F(xiàn),但代價是什么呢辩涝?對于高性能的分布式數(shù)據(jù)庫也同樣如此贸伐。
如何看待 Pod?
Pets 和 Cattle 是 DevOps 中的一對概念怔揩。Pets 表示在出現(xiàn)問題時需要關(guān)注單個服務(wù)器的部署方式捉邢,Cattle 表示在出現(xiàn)問題時用副本替換服務(wù)器的能力脯丝。在 Kubernetes 的運作方式中,當出現(xiàn)應用程序無法控制的因素時歌逢,可以在任何時候銷毀、創(chuàng)建或移動 Pod翘狱。Kubernetes 使用一個調(diào)度程序(scheduler)秘案,它可以銷毀和重建 Pod,以滿足您的 Kubernetes 集群配置需求潦匈。
這對于無狀態(tài)應用程序非常有用阱高,因為應用程序中的任何失敗都將導致包含應用程序的 Pod 被銷毀和重新創(chuàng)建,而不需要人工交互茬缩,并極大地加快了問題的解決赤惊。這對于數(shù)據(jù)庫來說并不理想,因為我們不希望數(shù)據(jù)庫突然停止工作凰锡,并造成數(shù)據(jù)丟失或損壞未舟。Kubernetes 可以使用 StatefulSet 提供持久標識符來幫助解決這個問題。這有利于管理有狀態(tài)工作負載掂为,但是要如何發(fā)揮高可用性和利用 Kubernetes 的自動化優(yōu)勢呢裕膀?
如何看待數(shù)據(jù)庫?
從設(shè)計上講勇哗,數(shù)據(jù)庫需要保持其身份昼扛、信息,最重要的是欲诺,數(shù)據(jù)在任何時候都是安全和可訪問的抄谐。數(shù)據(jù)庫是應用程序的支柱,因為它們是應用程序正常運行所依賴的真實數(shù)據(jù)來源扰法。數(shù)據(jù)庫操作中的任何錯誤都將迅速導致應用程序無法運行蛹含。簡單來說,數(shù)據(jù)庫很重要塞颁。
我們?nèi)绾卧?Kubernetes 中安全地運行數(shù)據(jù)庫挣惰,并確保數(shù)據(jù)庫部署是高可用的?
通過使用 StatefulSet 和持久卷(Persistent Volume)殴边,可以保持數(shù)據(jù)的完整性憎茂,但是我們還需要另外的工具來承擔數(shù)據(jù)庫管理任務(wù),例如確保故障轉(zhuǎn)移锤岸、恢復數(shù)據(jù)庫成員竖幔、重新加入高可用架構(gòu)以及其他特定技術(shù)功能。幸運的是是偷,Kubernetes 是可擴展的拳氢,并且擁有 Operator募逞,用于自動執(zhí)行管理服務(wù)的關(guān)鍵任務(wù)。
自動化馋评,自動化放接,自動化
我們了解了在 Kubernetes 中安全運行數(shù)據(jù)庫的復雜性,以及一些用來幫助彌合自動化和傳統(tǒng)人工在功能之間差距的概念留特。在一些數(shù)據(jù)庫 Operator 的幫助下纠脾,我們可以按照預期的方式安全地運行數(shù)據(jù)庫。這些 Operator 能夠?qū)⒁恍┩ǔS蓴?shù)據(jù)庫管理員完成的任務(wù)自動化執(zhí)行蜕青,例如:
- 自動部署苟蹈,嚴格的一致性,無單點故障
- 自動伸縮右核,通過更改 size 參數(shù)添加或刪除集群或 ReplicaSet 成員
- 自動備份和恢復
- 自動修復慧脱,從單個集群或 ReplicaSet 成員的故障中自動恢復
- 自動管理密碼輪換系統(tǒng)用戶
- 簡化更新
總結(jié)
由于運行數(shù)據(jù)庫環(huán)境的復雜性和對高可用的要求,以及動態(tài) Kubernetes 環(huán)境帶來的風險贺喝,強烈建議在 Kubernetes 中部署數(shù)據(jù)庫時菱鸥,使用 Operator 來實現(xiàn)。
歡迎使用 RadonDB MySQL Kubernetes 一款高可用 MySQL 集群 Operator躏鱼!