![]() ![]() |
Kubernetes設(shè)計模式 ![]() 本書主要內(nèi)容包括:基本模式篇介紹構(gòu)建以及運行基于容器的云原生應(yīng)用程序的核心原則與實踐。行為模式篇介紹各類容器和平臺交互的管理。結(jié)構(gòu)化模式篇介紹通過組織容器解決特定的用例。配置模式篇介紹如何處理Kubernetes中應(yīng)用程序的配置。安全模式篇介紹如何提高運行在Kubernetes之上的應(yīng)用程序的安全性。高級模式篇涵蓋更復(fù)雜的主題,例如操作器、自動伸縮以及集群內(nèi)鏡像構(gòu)建等。 [英] 比爾金 伊卜亞姆(Bilgin Ibryam) [德] 羅蘭·胡貝塔(Roland Hu?) 前言近年來隨著微服務(wù)和容器的采用,我們設(shè)計、開發(fā)和運行軟件的方式發(fā)生了重大變化。如今的應(yīng)用程序在可用性、可擴(kuò)展性以及上市的速度等方面都得到了優(yōu)化。在這些需求的驅(qū)動下,現(xiàn)代架構(gòu)需要不同的模式和實踐。本書旨在幫助開發(fā)人員發(fā)現(xiàn)和學(xué)習(xí)使用Kubernetes 創(chuàng)建云原生應(yīng)用程序時最Z常用的模式。首先,讓我們簡要介紹一下本書的兩個主要成分:Kubernetes 和設(shè)計模式。KubernetesKubernetes 是一個容器編排平臺。Kubernetes 起源于谷歌的數(shù)據(jù)中心,谷歌的內(nèi)部容器編排平臺Borg(參考鏈接:https://oreil.ly/x12HH)也誕生于此。多年來,谷歌一直通過Borg 來運行應(yīng)用程序。2014 年,谷歌決定利用Borg 的經(jīng)驗建立一個名為Kubernetes(希臘語為舵手或飛行員)的新開源項目。2015 年,該項目成為首個捐贈給新成立的云原生計算基金會(Cloud Native Computing Foundation,簡稱CNCF)的項目。Kubernetes 自創(chuàng)建之初就贏得了一個完整的用戶社區(qū),而且貢獻(xiàn)者的數(shù)量以驚人的速度增長。如今,Kubernetes 成為GitHub 上最Z流行的項目之一。公平地說,Kubernetes 是最Z常用且功能最Z豐富的容器編排平臺。此外,Kubernetes 還成為構(gòu)建于其上的其他平臺的基礎(chǔ)。在這些平臺即服務(wù)的系統(tǒng)中,最Z為突出的是紅帽的OpenShift,它為Kubernetes 提供了各種附加功能。這些只是我們選擇Kubernetes 作為本書云原生模式參考平臺的部分原因。本書假定你具備一定的Kubernetes 基本知識。第d1 章概括了Kubernetes 的核心概念,并為后續(xù)各個模式奠定了基礎(chǔ)。設(shè)計模式設(shè)計模式的概念可以追溯到20 世紀(jì)70 年代的建筑領(lǐng)域。建筑師及系統(tǒng)理論家Christopher Alexander 與其團(tuán)隊于1977 年發(fā)表了開創(chuàng)性的《建筑模式語言》(參考鏈接:https://oreil.ly/TKzwz)(牛津大學(xué)出版),其中描述了建立城鎮(zhèn)、大樓和其他建筑項目的建筑模式。后來,這個想法被新興的軟件業(yè)采用。該領(lǐng)域最Z著名的書籍《設(shè)計模式:可復(fù)用面向?qū)ο筌浖幕A(chǔ)》(參考鏈接:https://oreil.ly/k5toF)由Erich Gamma、Richard Helm、Ralph Johnson 與John Vlissides 四人合著,后以四人組著稱。我們談?wù)摰膯卫J、工廠方法或委托模式正是來自于這本書。從那以后,許多優(yōu)秀的模式書籍紛紛問世,針對各個領(lǐng)域從不同程度上進(jìn)行了講解,比如Gregor Hohpe 和Bobby Woolf 的《企業(yè)集成模式》(參考鏈接:https://oreil.ly/5aRjR),以及Martin Fowler 的《企業(yè)應(yīng)用架構(gòu)模式》(參考鏈接:https://oreil.ly/yOdWA)(Addison-Wesley 出版)。簡而言之,模式描述了問題的可復(fù)用解決方案注1。這個定義同樣適用于本書描述的模式,只不過我們的解決方案中沒有那么多變數(shù)。模式不同于配方,因為模式不會提供解決問題的步驟說明,只提供了解決某一類問題的大概思路。例如,Alexander 的模式啤酒館描述了如何建造公共的飲酒場所,陌生人和朋友都可以在這種地方結(jié)伴飲酒,不再做一只孤獨的錨。所有依據(jù)這種模式建造的場所都會有所不同,但它們也有共同之處,例如可容納4 ~ 8 人的隔間,以及可供百人飲酒、聽音樂以及其他活動的場所。然而,模式不僅限于提供解決方案,它還關(guān)系到一種語言的形成。本書中的模式形成了一種緊湊、以名詞為中心的語言,其中每個模式都帶有唯W一的名稱。在這種語言建立后,當(dāng)人們談?wù)撨@些模式時,這些名稱會自動讓人們聯(lián)想到類似的表征。舉個例子,當(dāng)我們談?wù)撘粡堊雷訒r,我們會假設(shè)我們談?wù)摰氖怯兴臈l腿的一塊木頭,而且可以在上面放東西。軟件工程也一樣,例如當(dāng)我們談?wù)摴S時,在面向?qū)ο蟮木幊陶Z言上下文中,我們會立即將工廠與生成其他對象的對象相關(guān)聯(lián)。由于我們會立刻想起模式背后的解決方案,因此就可以節(jié)約時間來處理尚未解決的問題。模式語言還有其他特征。各個模式之間相互關(guān)聯(lián)且可以重疊,因此很多模式加在一起就可以解決大部分問題。此外,正如《建筑模式語言》中描述的那樣,模式?jīng)]有統(tǒng)一的詳細(xì)程度和范圍。寬泛的模式可以涵蓋更廣泛的問題,并為如何解決問題提供粗略的指導(dǎo)。詳細(xì)的模式有非常具體的解決方案,但無法廣泛適用。本書包含所有類型的模式,其中許多模式都引用了其他模式,甚至可能將其他模式作為解決方案的一部分。模式的另一個特征是它們都遵循嚴(yán)格的格式。然而,每個作者都定義了不同的格式,遺憾的是,我們沒有統(tǒng)一的標(biāo)準(zhǔn)規(guī)定模式。Martin Fowler 在《Writing Software Patterns》(參考鏈接:https://oreil.ly/6IA6k)中概述了模式語言的格式。本書的結(jié)構(gòu)我們?yōu)楸緯x擇了一種簡單的模式格式。我們不遵循任何特定的模式描述語言。針對每個模式,我們使用以下結(jié)構(gòu):名稱每個模式都帶有一個名稱,這也是各章的標(biāo)題。名稱是模式語言的中心。問題本節(jié)給出了寬泛的上下文,并詳細(xì)描述了模式的空間。解決方案本節(jié)介紹了模式以Kubernetes 特有的方式解決問題的方法。當(dāng)其他模式與當(dāng)前模式相關(guān),或是當(dāng)前模式的一部分時,本節(jié)還會包含交叉引用。討論本節(jié)討論了在特定上下文中解決方案的優(yōu)缺點。參考資料最Z后一節(jié)包含了與模式相關(guān)的其他信息來源。我們按照如下結(jié)構(gòu)組織了本書中的模式:? 第d一篇,基礎(chǔ)模式,涵蓋了Kubernetes 的核心概念。這些章節(jié)介紹了構(gòu)建基于容器的云原生應(yīng)用程序的基本原則和實踐。? 第二篇,行為模式,描述了基本模式之上的模式,并詳細(xì)介紹了管理各種類型的容器和平臺交互的概念。? 第三篇,結(jié)構(gòu)化模式,涵蓋了與在Pod 內(nèi)組織容器相關(guān)的模式Pod 是Kubernetes 平臺的原子。? 第四篇,配置模式,深入講解在Kubernete 中處理應(yīng)用程序配置的各種方法。這些章節(jié)的模式涉及很多細(xì)節(jié),包括將應(yīng)用程序連接到配置的具體方案。? 第五篇,安全模式,介紹了應(yīng)用程序容器化并部署到Kubernetes 時出現(xiàn)的各種安全問題。? 第六篇,高級模式,容納了很多高級概念,例如擴(kuò)展平臺本身的方式,以及在集群內(nèi)直接構(gòu)建容器鏡像的方式。根據(jù)上下文不同,同一個模式可能也可以適用于多個類別。每章的模式都是獨立的,你可以按照任意順序單獨閱讀各個章節(jié)。本書的讀者對象本書面向希望將Kubernetes 作為平臺,設(shè)計和開發(fā)云原生應(yīng)用程序的開發(fā)人員。如果你對容器和Kubernetes 的概念有基本的了解,并希望提升自身的水平,那么本書非常適合你。但是,理解本書中的用例和模式無需掌握Kubernetes 的底層細(xì)節(jié)。架構(gòu)師、技術(shù)顧問和開發(fā)人員都可以從本書中描述的可復(fù)用模式中受益。本書的內(nèi)容基于真實項目的用例和經(jīng)驗教訓(xùn),囊括了我們多年從事該領(lǐng)域總結(jié)出來的最Z佳實踐和模式。我們希望幫助你理解以Kubernetes 為核心的思維方式,并創(chuàng)建更好的云原生應(yīng)用程序,而不是重新發(fā)明輪子。本書的寫作風(fēng)格非常輕松,各章均可以作為系列論文單獨閱讀。下面,我們簡要地介紹一下本書不包含的內(nèi)容:? 本書不是Kubernetes 的入門教程,也不是參考手冊。我們介紹了大量Kubernetes 的功能,并給出了詳細(xì)的解釋,但我們關(guān)注的是這些功能背后的概念。第d1 章簡要介紹了Kubernetes 的基礎(chǔ)知識。如果你需要有關(guān)Kubernetes 使用方面的綜合性書籍,那么我們強(qiáng)烈推薦MarkoLuk?a 的著作《Kubernetes in Action》。? 本書不是關(guān)于如何設(shè)置Kubernetes 集群的指南。每個示例的前提都是你已有啟動并運行Kubernetes。你可以通過多種方式嘗試這些示例。如果你有興趣學(xué)習(xí)如何設(shè)置Kubernetes 集群,我們推薦Brendan Burns、Joe Beda、Kelsey Hightower 和Lachlan Evenson 的著作《Kubernetes 即學(xué)即用》。? 本書不討論如何為其他團(tuán)隊操作和管理Kubernetes 集群。我們有意跳過了Kubernetes 的管理和操作相關(guān)內(nèi)容,而是從開發(fā)者的角度來看待Kubernetes。本書可以幫助運維團(tuán)隊了解開發(fā)人員如何使用Kubernetes,但有關(guān)Kubernetes 集群的管理和自動化的討論并不多。如果你有興趣學(xué)習(xí)如何操作Kubernetes 集群,我們推薦Brendan Burns、Eddie Villalba、Dave Strebel 和Lachlan Evenson 的著作《Kubernetes Best Practices》。主要內(nèi)容本書有很多值得探索的地方。有些模式看起來可能像Kubernetes 手冊中的摘錄,但仔細(xì)觀察后,你就會發(fā)現(xiàn)這些模式是從概念的角度呈現(xiàn)的,這是其他書籍中從未有過的角度。有些模式則通過不同的方法進(jìn)行了解釋,并針對具體的問題提供了詳細(xì)的指導(dǎo),如第四篇中的配置模式。有些章節(jié)介紹的Kubernetes功能不完全符合模式定義。請不要糾結(jié)這究竟是模式還是功能。所有章節(jié)都從基本原理出發(fā),考察所涉及的各種因素,重點介紹用例、經(jīng)驗教訓(xùn)和最Z佳實踐。這才是有價值的部分。無論模式呈現(xiàn)的細(xì)節(jié)多少,你都可以通過大量示例針對這些概念的說明,了解Kubernetes 為每種特定模式提供的所有內(nèi)容。書中所有的示例都經(jīng)過了測試,你可以通過后續(xù)使用代碼示例小節(jié)中介紹的方式獲取完整的源代碼。第二版的新內(nèi)容自幾年前第d一版發(fā)行以來,Kubernetes 生態(tài)系統(tǒng)一直在不斷發(fā)展,出現(xiàn)了許多Kubernetes 的新版本,以及更多使用Kubernetes 的工具和模式已經(jīng)成為事實上的標(biāo)準(zhǔn)。幸運的是,本書中描述的大多數(shù)模式經(jīng)受住了時間的考驗,依然有效。因此,我們更新了這些模式,添加了截止到Kubernetes 1.26 之前的新特性,并刪除了過時和棄用的部分。第29 章和第30 章由于領(lǐng)域的新發(fā)展而進(jìn)行了重大修改,除此之外的章節(jié)都沒有太大的改動。此外,我們還新增了五種模式,并引入了一個新類別,第五篇安全模式,以彌補第d一版的不足,并為開發(fā)人員提供重要的安全相關(guān)模式。我們的GitHub 示例(地址:https://oreil.ly/kXGjC)已更新并進(jìn)行了擴(kuò)展。最Z后,本書還增加了50% 的新內(nèi)容。排版約定本書使用了下述排版約定。斜體(Italic)表示新術(shù)語、URL、電子郵件地址、文件名和擴(kuò)展名。等寬字體(Constant Width)表示程序片段,以及正文中出現(xiàn)的變量、函數(shù)名、數(shù)據(jù)庫、數(shù)據(jù)類型、環(huán)境變量、語句和關(guān)鍵字等。如上所述,模式形成了一種簡單、彼此關(guān)聯(lián)的語言。為了強(qiáng)調(diào)這種模式的關(guān)聯(lián),每種模式都用斜體字來表示(例如,邊車)。當(dāng)模式根據(jù)Kubernetes 的核心概念(如初始化容器或控制器)命名時,我們僅在直接引用模式本身時才使用這種特定的格式。如果有必要,我們還會給出相應(yīng)的章節(jié)。此外,本書還采用下述約定:? 凡是可以在shell 或編輯器中鍵入的內(nèi)容都以固定寬度的字體顯示。? Kubernetes 資源的名稱始終以大寫形式呈現(xiàn)(如Pod)。如果資源采用了組合名稱(如ConfigMap),我們也會采用這種形式,因為這種形式可以更為清晰地顯示config map,而且還表明它指代Kubernetes 概念。? 有時,Kubernetes 的資源名稱與服務(wù)或節(jié)點等常見概念相同。在這些情況下,我們僅在引用資源本身時使用資源名稱格式。使用代碼示例本書中的每個模式都有完整的可執(zhí)行示例支持,你可以通過本書的主頁找到這些示例(地址:https://k8spatterns.io/)。你還可以在每章末尾參考資料一節(jié)中找到每個模式示例的鏈接。參考資料小節(jié)還包含許多指向與模式相關(guān)信息的鏈接。我們會通過示例代碼庫更新參考資料的列表。本書通過GitHub 提供了所有示例的源代碼(地址:https://oreil.ly/bmj-Y)。本書的代碼庫和主頁還有關(guān)于如何在Kubernetes 集群中嘗試這些示例的指導(dǎo)和說明。在閱讀這些示例時,請查看示例提供的資源文件,其中包含許多有用的注釋,有助于進(jìn)一步理解示例代碼。許多示例都采用了一個名為random-generator(隨機(jī)數(shù)生成器)的REST服務(wù),調(diào)用該服務(wù)將返回隨機(jī)數(shù)。該服務(wù)是為了很好地配合本書中的示例而專門設(shè)計的。你也可以通過GitHub 找到該服務(wù)的源代碼(地址:https://oreil.ly/WuYSu),而它的容器鏡像k8spatterns/random-generator 托管在Docker Hub 上(地址:https://oreil.ly/N36MB)。本書采用了JSON 路徑表示法來描述資源字段。例如,.spec.replicas 資源spec 部分的replicas 字段。如果你發(fā)現(xiàn)示例代碼或文檔中存在任何問題,或有任何疑問,請大膽地在GitHub 的問題跟蹤器中建票(地址:https://oreil.ly/hCnmn)。我們會持續(xù)關(guān)注GitHub 上的問題,并愿意解答上面的所有問題。本書所有代碼均在Creative Commons Attribution 4.0(CC BY 4.0)許可(參考鏈接:https://oreil.ly/QuiQc)下分發(fā)。這些代碼可以免費使用,你也可以自由地分享和修改,并用于商業(yè)和非商業(yè)項目。但是,如果你復(fù)制或分發(fā)這些代碼,則應(yīng)保留本書的署名。署名一般包括書名、作者、出版社和國際標(biāo)準(zhǔn)圖書編號。例如:Kubernetes Patterns, 2nd Edition, by Bilgin Ibryam and Roland Hu? (OReilly). Copyright 2023 Bilgin Ibryam and Roland Hu?, 978-1-098-13168-5。另外, 你也可以在本書的主頁上添加鏈接以及版權(quán)聲明并鏈接到許可證(地址:https://k8spatterns.io/)。我們歡迎你為本書貢獻(xiàn)代碼!如果你認(rèn)為我們的示例有待改進(jìn),那么衷心希望能夠收到您的來信。你只需在GitHub 上建立問題票,或創(chuàng)建一個拉取請求,就可以與我們?nèi)〉寐?lián)系。OReilly 在線學(xué)習(xí)平臺(OReilly Online Learning)近40 年來,OReilly Media 致力于提供技術(shù)和商業(yè)培訓(xùn)、知識和卓越見解,來幫助眾多公司取得成功。公司獨有的專家和改革創(chuàng)新者網(wǎng)絡(luò)通過OReilly 書籍、文章以及在線學(xué)習(xí)平臺,分享他們的專業(yè)知識和實踐經(jīng)驗。OReilly 在線學(xué)習(xí)平臺按照您的需要提供實時培訓(xùn)課程、深入學(xué)習(xí)渠道、交互式編程環(huán)境以及來自O(shè)Reilly 和其他200 多家出版商的大量書籍與視頻資料。更多信息,請訪問網(wǎng)站:https://www.oreilly.com/。聯(lián)系我們?nèi)魏斡嘘P(guān)本書的意見或疑問,請按照以下地址聯(lián)系出版社。美國:OReilly Media, Inc.1005 Gravenstein Highway NorthSebastopol, CA 95472中國:北京市西城區(qū)西直門南大街2 號成銘大廈C 座807 室(100035)奧萊利技術(shù)咨詢(北京)有限公司這本書有專屬網(wǎng)頁,你可以在那兒找到本書的勘誤、示例和其他信息。地址是:https://oreil.ly/kubernetes_patterns-2e。如果你對本書有一些評論或技術(shù)上的建議,請發(fā)送電子郵件到 errata@oreilly.com.cn。要了解OReilly 圖書、培訓(xùn)課程、會議和新聞的更多信息,請訪問我們的網(wǎng)站,地址是:http://www.oreilly.com。我們的LinkedIn:https://linkedin.com/company/oreilly-media。我們的Twitter:http://twitter.com/oreillymedia。我們的Youtube:http://www.youtube.com/oreillymedia。本書作者的Twitter:https://twitter.com/bibryam,https://twitter.com/ro14nd。本書作者的Mastodon:https://fosstodon.org/@bilgin,https://hachyderm.io/@ro14nd。本書作者的GitHub:https://github.com/bibryam,https://github.com/rhuss。本書作者的博客:https://www.ofbizian.com,https://ro14nd.de。致謝作者Bilgin 非常感激妻子Ayshe。在他撰寫本書期間,妻子給予了無盡的支持和耐心。他還想感謝可愛的女兒Selin 和Esin,她們總能讓他露出笑容。兩個女兒是他的一切。最Z后,Bilgin 還想感謝合著伙伴Roland,感謝他的付出,本書才能順利完結(jié)。作者Roland 向妻子Tanja 表示深深的感謝。感謝妻子在他撰寫本書期間給予的支持和寬容,并感謝兒子Jakob 的鼓勵。此外,Roland 還特別感謝Bilgin,本書得以付梓,Bilgin 的真知灼見以及出色的寫作功不可沒。兩版書的撰寫經(jīng)歷了漫長的歲月,我們要感謝在整個過程中幫助我們始終朝著正確方向前進(jìn)的評審員們。對于第d一版,特別感謝Paolo Antinori 和Andrea Tarocchi 在創(chuàng)作過程中給予的幫助。感謝Marko Luk?a、Brandon Philips、Michael Httermann、Brian Gracely、Andrew Block、Jiri Kremser、Tobias Schneck 和Rick Wagner,他們?yōu)槲覀兲峁┝藢I(yè)知識和建議。最Z后,還要感謝孜孜不倦的編輯Virginia Wilson、John Devins、Katherine Tozer、Christina Edwards,以及OReilly 所有人幫助我們出版本書。第二版的創(chuàng)作絕非易事,我們感謝所有在整個過程中支持我們的人。感謝我們的技術(shù)評審員Ali Ok、Dávid ?imansk?、Zbyněk Roubalík、Erkan Yanar、Christoph St?bler、Andrew Block 和Adam Kaplan,以及我們的開發(fā)編輯Rita Fernando 在整個過程中給予的耐心和鼓勵。非常感謝OReilly 生產(chǎn)團(tuán)隊,尤其是Beth Kelly、Kim Sandoval 和Judith McConville,感謝他們在最Z終定稿時對細(xì)節(jié)的一絲不茍。我們特別感謝Abhishek Koserwal 為第26 章創(chuàng)作付出的不懈努力。他為我們提供了及時的幫助,并推動了本書的出版。 Bilgin Ibryam是Diagrid的產(chǎn)品經(jīng)理,負(fù)責(zé)公司的產(chǎn)品戰(zhàn)略。Roland Hu?博士是紅帽的高級首席軟件工程師,OpenShift無服務(wù)器的架構(gòu)師。 目錄
你還可能感興趣
我要評論
|