- Kubernetes云原生數(shù)據(jù)管理
- (美)Jeff Carpenter(杰夫·卡彭特)等
- 4958字
- 2024-05-11 18:18:56
前言
Kubernetes是否已經(jīng)準(zhǔn)備好處理有狀態(tài)工作負(fù)載?
可能是這個問題讓你翻開了本書。自從云計算首次出現(xiàn)以來,數(shù)據(jù)基礎(chǔ)設(shè)施(NoSQL/NewSQL、流式處理、分析)和應(yīng)用基礎(chǔ)設(shè)施(Docker、Kubernetes)都在迅速發(fā)展,但它們發(fā)展的方向有所不同。人們認(rèn)為,是時候正式將這兩個領(lǐng)域融合起來了。這不僅僅是對未來的渴望,目前已經(jīng)有多個社區(qū)正在開展合作。那些試圖為數(shù)據(jù)和應(yīng)用而管理兩套不同技術(shù)棧的組織很快就會發(fā)現(xiàn)自己處于競爭劣勢。
Kubernetes于2014年正式發(fā)布,在此之后的幾年中,幾乎沒有人會認(rèn)為它能夠存放數(shù)據(jù)和有狀態(tài)工作負(fù)載。2018年Kelsey Hightower的推文(見網(wǎng)址列表條目[2])代表了當(dāng)時的主流觀點:
Kubernetes在運行有狀態(tài)工作負(fù)載方面取得了巨大的進展,包括數(shù)據(jù)庫和消息隊列等,但人們?nèi)匀桓鼉A向于不在Kubernetes上運行它們。
在過去的幾年中,形勢已經(jīng)發(fā)生逆轉(zhuǎn)。解決問題的工程師接受了Kelsey的挑戰(zhàn)并付諸行動。Kubernetes支持有狀態(tài)工作負(fù)載的完善度可以說是毫不令人意外的,這是因為需求實在太旺盛了。如果還有人爭論為什么數(shù)據(jù)庫必須在裸金屬機器上運行,或為什么不應(yīng)該在容器內(nèi)部部署數(shù)據(jù)基礎(chǔ)設(shè)施等問題,那么他們可以關(guān)注本書。
人們還了解到,“永不”和“尚未”之間存在巨大的差異。計算、存儲、網(wǎng)絡(luò)現(xiàn)在被看作商品,為什么數(shù)據(jù)管理就是一個例外呢?Kubernetes在降低成本和簡化應(yīng)用開發(fā)流程方面的價值導(dǎo)向意味著數(shù)據(jù)基礎(chǔ)設(shè)施向Kubernetes的遷移是不可避免的。不僅是Kubernetes在發(fā)生變化,人們還將看到數(shù)據(jù)基礎(chǔ)設(shè)施的項目也在發(fā)生變化。
寫作本書的目的
DataStax的“日常工作”要求我們在Kubernetes上有效地部署和操作Apache Cassandra,這讓我們產(chǎn)生了將有狀態(tài)工作負(fù)載轉(zhuǎn)移到Kubernetes上的想法。本著開源開發(fā)的精神,我們尋找了其他數(shù)據(jù)庫和其他在有狀態(tài)工作負(fù)載方面嘗試過類似舉措(并取得成功)的從業(yè)者,我們找到了一群志同道合的人,并在2020年推出了Kubernetes數(shù)據(jù)社區(qū)(DoKC)(見網(wǎng)址列表條目[3])。DoKC現(xiàn)在是一個獨立的組織,已經(jīng)舉辦了100多場交流會和一些現(xiàn)場活動。D o K C交流會上的各類主題和演講者(見網(wǎng)址列表條目[4])是這個社區(qū)充滿活力的證據(jù),大家協(xié)同工作來建立標(biāo)準(zhǔn)和最佳實踐。最重要的是,大家正一起努力學(xué)習(xí),吸取過去的經(jīng)驗教訓(xùn),并在打造新事物的過程中互幫互助。
隨著參加的交流會越來越多,一些共同的主題便開始浮現(xiàn)。我們一遍又一遍地聽到持久卷(PersistentVolume,PV)子系統(tǒng)的好處,StatefulSet的優(yōu)點和缺點,使數(shù)據(jù)庫操作更易于管理的Operator模式的承諾,以及萌生的新型數(shù)據(jù)管理的想法。隨著時間的推移,我們堅信這個新興的從業(yè)者社區(qū)需要一個地方來將分散在多個演示文稿和博客文章中的要點收集起來,并將其提煉成易于理解的形式。本書就是這一過程的產(chǎn)物。
“路漫漫其修遠(yuǎn)兮,吾將上下而求索”,云原生數(shù)據(jù)領(lǐng)域還有很多工作要做,包括Operator、機器學(xué)習(xí)、數(shù)據(jù)API、數(shù)據(jù)集的聲明式管理等。我們希望本書能為其他更多圖書、博客、演示文稿和學(xué)習(xí)資源打開“大門”。
本書的受眾人群
本書的主要讀者包括從事云端設(shè)計、構(gòu)建和運行應(yīng)用的開發(fā)人員與架構(gòu)師。如果你恰好是其中一員并手捧本書,那你很可能早已聽聞許多采用Kubernetes的機構(gòu),你或許已經(jīng)加入了這個行列或至少正在考慮加入它。當(dāng)然,你可能也對在Kubernetes上運行有狀態(tài)工作負(fù)載持保留態(tài)度,并企圖尋求幫助以走出困境。那你就來對地方了!本書將提供以下信息:
? 了解基本的Kubernetes資源及如何運用它們來構(gòu)建數(shù)據(jù)基礎(chǔ)設(shè)施
? 了解使用Helm和Operator等工具在Kubernetes上自動部署和操作數(shù)據(jù)基礎(chǔ)設(shè)施的方法
? 針對應(yīng)用,擁有評估和選用數(shù)據(jù)基礎(chǔ)設(shè)施技術(shù)的能力
? 掌握將這些數(shù)據(jù)基礎(chǔ)設(shè)施技術(shù)集成到整個技術(shù)棧中的方法
? 洞察新興技術(shù),有助于在未來提升基于Kubernetes的應(yīng)用
我們通過DoKC認(rèn)識了許多Kubernetes的核心開發(fā)人員和數(shù)據(jù)基礎(chǔ)設(shè)施開發(fā)人員,他們雖然人數(shù)不多但也是本書十分重要的受眾。我們希望創(chuàng)建一套通用的準(zhǔn)則和最佳實踐,并將其用作框架來推動Kubernetes的核心發(fā)展,以優(yōu)化為了在Kubernetes上運行而構(gòu)建的數(shù)據(jù)基礎(chǔ)設(shè)施。讓我們團結(jié)一致,推進Kubernetes云原生數(shù)據(jù)的實踐。
本書開誠布公,直截了當(dāng)——我們會告訴你哪些技術(shù)已經(jīng)成熟穩(wěn)固,也會告訴你有很多領(lǐng)域的技術(shù)還處于新興階段。我們將重點突出那些需要改進的領(lǐng)域。
如何閱讀本書
建議通讀本書,尤其是對Kubernetes經(jīng)驗不豐富的讀者更要如此。本書先介紹了有關(guān)Kubernetes的術(shù)語和概念,隨著話題的深入,它們將貫穿本書的其余部分。以下是本書的組織結(jié)構(gòu)。
第1章 云原生數(shù)據(jù)基礎(chǔ)設(shè)施:持久化、流式傳輸與批量分析
本章闡述了通過在Kubernetes上運行無狀態(tài)工作負(fù)載和有狀態(tài)工作負(fù)載來實現(xiàn)云原生應(yīng)用現(xiàn)代化的目標(biāo)。讀者應(yīng)該從該章節(jié)開始閱讀,因為其中定義了關(guān)鍵的目標(biāo)和術(shù)語,為所有讀者提供了一致的環(huán)境。具體來說,本章介紹了云原生數(shù)據(jù)的定義,并給出了云原生數(shù)據(jù)基礎(chǔ)設(shè)施準(zhǔn)則,本書的其余部分將使用這些準(zhǔn)則來衡量有關(guān)技術(shù)。
第2章 通過Kubernetes管理數(shù)據(jù)存儲
本章探討了Kubernetes上數(shù)據(jù)基礎(chǔ)設(shè)施的基本領(lǐng)域之一:存儲。本章從存儲在容器化系統(tǒng)中的工作方式開始介紹,首先以Docker為例介紹,然后轉(zhuǎn)向Kubernetes及其PV子系統(tǒng)。本章討論了各種可用的存儲類型,包括文件、塊和對象存儲,以及如何權(quán)衡使用本地和遠(yuǎn)程存儲解決方案。
第3章 打造Kubernetes數(shù)據(jù)庫
本章介紹了Kubernetes的計算資源,如Pod、Deployments和StatefulSet,并引導(dǎo)讀者逐步完成使用這些資源部署數(shù)據(jù)庫,如部署MySQL和Apache Cassandra的過程。通過學(xué)習(xí)本章,讀者將了解StatefulSet在管理分布式數(shù)據(jù)庫方面的優(yōu)勢和劣勢。
第4章 通過Helm在Kubernetes上自動部署數(shù)據(jù)庫
本章延續(xù)上一章的主題,重新回顧了在Kubernetes上部署MySQL和Cassandra的過程,此次是通過Helm包管理器以更自動化的方式進行的。通過學(xué)習(xí)本章,讀者還將了解有助于配置的Kubernetes資源,包括ConfigMap和Secret。本章還介紹了Helm在整個DevOps流程和CI/CD工具集中的作用,以及Helm在管理數(shù)據(jù)庫操作方面的一些缺點。
第5章 通過Operator自動管理Kubernetes數(shù)據(jù)庫
本章通過介紹Operator模式和演示如何使用Operator幫助管理日常的數(shù)據(jù)庫操作來總結(jié)數(shù)據(jù)庫的部署步驟。本章以Vitess(MySQL)和Cass Operator(Apache Cassandra)為例,闡述了Operator是如何擴展Kubernetes控制平面并管理數(shù)據(jù)庫的。通過學(xué)習(xí)本章,讀者將了解如何評估Operator的成熟度,學(xué)習(xí)如何使用Operator SDK等構(gòu)建自己的Operator。
第6章 在Kubernetes上集成數(shù)據(jù)基礎(chǔ)設(shè)施
本章開始將關(guān)注點從部署和操作數(shù)據(jù)庫擴展到把數(shù)據(jù)庫和其他數(shù)據(jù)基礎(chǔ)設(shè)施整合到整個應(yīng)用技術(shù)棧中。本章研究了一個名為K8ssandra的項目,它集成了Apache Cassandra,以及用于管理監(jiān)控、安全和數(shù)據(jù)庫備份的工具,并提供了一個API層用于輕松訪問的數(shù)據(jù)。
第7章 Kubernetes原生數(shù)據(jù)庫
本章總結(jié)了本書前半部分有關(guān)云原生數(shù)據(jù)管理的知識,并運用這些知識來討論“什么是Kubernetes原生數(shù)據(jù)庫”。這不僅僅是關(guān)于行業(yè)流行語的討論,對選擇數(shù)據(jù)基礎(chǔ)設(shè)施和開發(fā)該數(shù)據(jù)基礎(chǔ)設(shè)施的人來說,這一討論也很重要。
第8章 Kubernetes數(shù)據(jù)流式傳輸
本章從流式傳輸開始,研究其余數(shù)據(jù)基礎(chǔ)設(shè)施。云原生應(yīng)用中數(shù)據(jù)的移動和處理同數(shù)據(jù)庫持久化一樣普遍,但需要不同的部署策略:安全地連接端點并構(gòu)建默認(rèn)的自愈性和彈性。本章使用了Apache Pulsar和Apache Flink來演示這些重要實踐。
第9章 Kubernetes數(shù)據(jù)分析
諷刺的是,對大規(guī)模分析部署的需求只是現(xiàn)如今Kubernetes方法論的起源故事中的一部分,即編排和資源管理。環(huán)顧四周,在Kubernetes上運行分析任務(wù)是現(xiàn)在許多機構(gòu)的首要任務(wù)。本章強調(diào)了Apache Spark中的差異點,為介紹用例提供了良好的開端,并通過Dask和Ray項目介紹了Kubernetes上數(shù)據(jù)分析的最新進展。
第10章 機器學(xué)習(xí)及其他新興用例
目前有關(guān)人工智能和機器學(xué)習(xí)的話題已處于數(shù)據(jù)基礎(chǔ)設(shè)施領(lǐng)域的前沿位置。可以考慮將過去研發(fā)出的項目運行到Kubernetes上,這一舉措十分有價值。當(dāng)然,還有其他類型的項目選用了云原生技術(shù),并為數(shù)據(jù)未來指明了方向。本章旨在調(diào)查這些項目,集思廣益,為云原生數(shù)據(jù)提供幫助。
第11章 將數(shù)據(jù)工作負(fù)載遷移到Kubernetes上
如果不付諸實踐,那么對本書的學(xué)習(xí)將變?yōu)橥絼凇1菊聫娬{(diào)了前幾章的關(guān)鍵內(nèi)容,并提供了一個關(guān)于人員、流程和技術(shù)變革的框架,用它來協(xié)助將有狀態(tài)工作負(fù)載成功地遷移到Kubernetes上。此外,本章展望了組織機構(gòu)的數(shù)據(jù)基礎(chǔ)設(shè)施在不久的將來可能的形態(tài)。
在Kubernetes上管理數(shù)據(jù)是一個新興課題,某些領(lǐng)域會發(fā)生巨大改變。就像任何技術(shù)圖書一樣,本書在特定時間點(2022年年末)總結(jié)了可以參考的相關(guān)知識。事實上,針對一個快速發(fā)展的主題撰寫一本書是極具挑戰(zhàn)的,這是因為很難保障信息的時效性。
為了更好地應(yīng)對這一處境,本書采取這樣一種模式:在提供大量示例的同時強調(diào)基礎(chǔ)知識。隨著內(nèi)容的深入,本書研究的技術(shù)將顯得越來越不成熟。在此,希望讀者緊扣核心要義并將其應(yīng)用于每個單獨的用例,而不是照搬照抄或?qū)ふ摇叭f能解”。
特別地,由于第2章至第5章中的內(nèi)容涉及的主題已經(jīng)非常成熟,所以在這些章節(jié)中會提供更深入的闡述和實戰(zhàn)示例。而第8章至第10章介紹的數(shù)據(jù)基礎(chǔ)設(shè)施還在不斷地演進中,至少在Kubernetes部署方面是如此。對于這種情況,本書將提供更多的第三方學(xué)習(xí)資源,以確保讀者了解最新進展。本書的初衷是鼓勵讀者與他人分享發(fā)現(xiàn)的新資源,以更好地一同進步。
格式說明
本書使用如下格式:
斜體或楷體(Italic)
用于新術(shù)語、郵箱、文件名及文件擴展名。
等寬體(Constant width)
用于示例代碼及正文中引用的代碼元素,如變量名、函數(shù)名、數(shù)據(jù)庫、數(shù)據(jù)類型、環(huán)境變量、聲明和關(guān)鍵字。
粗等寬體(Constant width bold)
用于展示由用戶輸入的命令或其他文本。
斜等寬體(Constant width italic)
用于表示應(yīng)替換為用戶提供的值或由上下文確定的值。
表示提示或建議。
表示通用的注釋。
表示警告或注意。
所用示例代碼
補充材料(示例代碼、練習(xí)等)可以訪問網(wǎng)址列表條目[5]下載。
在使用示例代碼的過程中,如有技術(shù)問題或疑問,請發(fā)送電子郵件至bookquestions@oreilly.com。
本書旨在幫助讀者完成相關(guān)工作。在通常情況下,讀者可以在程序或文檔中使用本書提供的示例代碼。除非要使用大量示例代碼,否則無須聯(lián)系我們獲得許可。例如,在編寫一個程序時要使用本書中的幾段示例代碼不需要獲得許可,而銷售或分發(fā)本書中的示例代碼則需要獲得許可。引用本書中的內(nèi)容和示例代碼來回答問題不需要獲得許可,而將本書中的大量示例代碼合并到讀者的產(chǎn)品文檔中則需要獲得許可。
在引用本書中的內(nèi)容時,我們鼓勵注明出處但通常不強制要求,包括標(biāo)題、作者、出版商和ISBN等。例如,《Kubernetes云原生數(shù)據(jù)管理》(978-1-098-11139-7),作者為Jeff Carpenter與Patrick McFadin,2023年出版,版權(quán)歸作者所有。
如果不確定對示例代碼的使用是否超出上述許可范圍,那么請隨時通過permissions@oreilly.com與我們聯(lián)系。
O’Reilly在線學(xué)習(xí)
40多年來,O’Reilly Media始終堅持提供技術(shù)和業(yè)務(wù)培訓(xùn),傳遞知識和見解來幫助各行各業(yè)的公司不斷取得成功。
專家和創(chuàng)作者們構(gòu)成了獨特的學(xué)習(xí)網(wǎng)絡(luò),他們通過書本、文章和在線學(xué)習(xí)平臺分享知識和專業(yè)技能。O’Reilly的在線學(xué)習(xí)平臺可以讓你按需訪問實時的培訓(xùn)課程、詳盡的學(xué)習(xí)路徑、交互式的編程環(huán)境,以及大量來自O(shè)’Reilly及200多家其他出版商的文本和視頻。欲了解更多信息,請訪問網(wǎng)址列表條目[6]。
聯(lián)系我們
如對本書有建議、意見或疑問,請通過如下方式與出版商聯(lián)系:
美國:
O'Reilly Media,Inc.
1005 Gravenstein Highway North
Sebastopol,CA 95472
中國:
北京市西城區(qū)西直門南大街2號成銘大廈C座807室(100035)
奧萊利技術(shù)咨詢(北京)有限公司
請訪問網(wǎng)址列表條目[7]獲取有關(guān)本書的勘誤表、示例和任何其他信息。如有相關(guān)建議、意見或技術(shù)問題,請發(fā)送電子郵件至errata@oreilly.com.cn。
欲獲取有關(guān)圖書和課程的新聞與信息,請訪問網(wǎng)址列表條目[8]。
LinkedIn鏈接見網(wǎng)址列表條目[9]。
Twitter鏈接見網(wǎng)址列表條目[10]。
YouTube鏈接見網(wǎng)址列表條目[11]。
致謝
首先要感謝Jess Haberman女士,她從我們第一次談話起就認(rèn)同了本書的理念,并為之努力;其次要感謝Jill Leonard先生不斷的鼓勵和提出的真知灼見。
本書的一大特色是囊括了與專家技術(shù)人員及從業(yè)人員的對話花絮。我們盡可能原汁原味地保留了原始內(nèi)容。在此,我們衷心地感謝以下人士花費寶貴的時間提出了見解:Rick Vasquez、Kiran Mova、Maciej Szulik、John Sanda、Deepthi Sigireddi、Umair Mufti、Irfan Ur Rehman、Dongxu(Ed)Huang、Jake Luciani、Jesse Anderson、Josh van Leeuwen、Holden Karau、Dean Wampler、Theofilos Papapanagiotou、Willem Pienaar、Xiaofan Luan、Josh Patterson、Adi Polak和Craig McLuckie。
這些人士不僅建言獻策,還為我們的研究指明了方向并為我們選擇的技術(shù)提出了討論話題。Deepthi、Jesse、Umair和Rick還擔(dān)任了本書技術(shù)審閱的雙重職責(zé)。此外,我們還對以下幾位提出見解的技術(shù)審稿人一并表示感謝:Wei Deng、Ali Ok、Aaron Morton和Noah Gift。
DoKC為本書提供了巨大的靈感源泉。在此,特別感謝Bart Farrell、Demitrios Brinkmann和Melissa Logan為我們聯(lián)系了許多其他社區(qū)的成員并給予了我們鼓勵和支持。還要特別感謝Evan Powell,是他找到Demetrios,資助最初的交流會并創(chuàng)立了DoKC。這就是所謂的“星星之火,可以燎原”。
此外,也要感謝Sam Ramji對本書的卓越貢獻,他不僅撰寫了前言,而且不忘時常提醒我們“實踐才能出真知”并以此衡量我們的思維方式。Sam總是非常樂意接聽電話、介紹相關(guān)話題或一邊喝啤酒一邊分享想法。
這本書誕生于全球新型冠狀病毒感染大流行的初期,并在全球和個人層面的不確定性、挑戰(zhàn)和更新的各個季節(jié)中孕育而生。我們非常感謝許多朋友和家人的支持,他們與我們一起度過了這些時光,并時刻關(guān)注這本書的進展。
- 計算機組成原理與接口技術(shù):基于MIPS架構(gòu)實驗教程(第2版)
- 程序員修煉之道:從小工到專家
- SQL Server 2016 數(shù)據(jù)庫教程(第4版)
- Spark大數(shù)據(jù)分析實戰(zhàn)
- MongoDB管理與開發(fā)精要
- R數(shù)據(jù)科學(xué)實戰(zhàn):工具詳解與案例分析(鮮讀版)
- 揭秘云計算與大數(shù)據(jù)
- Enterprise Integration with WSO2 ESB
- iOS and OS X Network Programming Cookbook
- 企業(yè)級數(shù)據(jù)與AI項目成功之道
- The Game Jam Survival Guide
- SAS金融數(shù)據(jù)挖掘與建模:系統(tǒng)方法與案例解析
- 數(shù)據(jù)挖掘算法實踐與案例詳解
- 基于數(shù)據(jù)發(fā)布的隱私保護模型研究
- 工業(yè)大數(shù)據(jù)分析實踐