本書主要內(nèi)容有:學習如何在Kubernetes集群上部署操作器。從使用到實現(xiàn),全面探索操作器。探索操作器框架:操作器SDK、操作器生命周期管理器以及操作器度量。利用SDK的Go編程語言支持構(gòu)建、打包和運行操作器。利用現(xiàn)有的Helm和Ansible資產(chǎn)打包和部署操作器。學習如何在Kubernetes集群上分發(fā)操作器。學習如何利用操作器實現(xiàn)網(wǎng)站可靠性工程實踐。
本書展示了如何通過構(gòu)建操作器來擴展Kubernetes的控制平面和API,幫助運維團隊和應用程序開發(fā)人員可靠地部署和管理關鍵的服務及組件。
操作器是一種打包、部署與管理Kubernetes應用程序的方式。操作器能夠為Kubernetes添加應用程序特有的技術,從而降低自動化復雜的有狀態(tài)應用程序的難度。本書通過鮮活生動的例子向讀者展示了操作器的工作方式,以及如何使用操作器框架和SDK構(gòu)建操作器。
操作器非常熟悉應用程序的內(nèi)部狀態(tài),能夠協(xié)調(diào)應用程序的安裝與升級,修復故障,并自動化充滿重復性或精心策劃的維護工作。本書向讀者展示了如何通過構(gòu)建操作器來擴展Kubernetes的控制平面和API,幫助運維團隊和應用程序開發(fā)人員可靠地部署和管理關鍵的服務及組件。
Kubernetes已然成為世界上功能強大的容器編排平臺,但其真正的力量隱藏在可擴展API及自動化框架的背后,它們將重新定義未來平臺的構(gòu)建與操作方式。而本書正是我們?nèi)鄙俚氖謨浴?br /> Kelsey Hightower
Google云技術專家
前言
Kubernetes 是一款流行的容器編排器。它將許多計算機整合成一個大型計算資源,并建立了一種通過Kubernetes 應用程序編程接口(API)尋址資源的方法。Kubernetes 是起源于Google 的開源軟件,在云原生計算基金會(Cloud Native Computing Foundation,CNCF)的帶領下,通過眾多合作者過去五年的努力開發(fā)而成。
操作器擴展了Kubernetes,能夠自動化特定應用程序整個生命周期的管理。操作器不僅可以作為Kubernetes 上分發(fā)應用程序的打包機制,而且還可以監(jiān)視、維護、恢復和升級部署的軟件。
本書面向的讀者對象
如果你有在Kubernetes 集群上部署應用程序的經(jīng)驗,那么一定很熟悉構(gòu)建操作器模式所面臨的難題和訴求。如果你有在編排集群之外維護基礎服務(如數(shù)據(jù)庫和文件系統(tǒng))的經(jīng)歷,并且渴望將其帶入社區(qū),那么本書一定非常適合你。
本書的主要內(nèi)容
本書介紹了什么是操作器,以及如何利用操作器擴展Kubernetes API。書中展示了如何部署和使用現(xiàn)有的操作器,以及如何使用紅帽的操作器框架為你的應用程序創(chuàng)建和分發(fā)操作器。此外,本書還介紹了有關設計、構(gòu)建和分發(fā)操作器的良好實踐,以及將網(wǎng)站可靠性工程(SRE)原則運用到操作器的理念。第1 章首先介紹了操作器及其概念。接下來,介紹了一些獲得訪問Kubernetes集群的方法,以供在后續(xù)章節(jié)的練習中使用。在成功運行集群之后,本章介紹了操作器的部署,并觀察應用程序發(fā)生故障、擴展或升級到新版本時操作器的行為。
在接下來的幾章中,我們將探索操作器SDK,并向你展示如何利用SDK 來構(gòu)建操作器,以幫助示例應用程序成為Kubernetes 的一流公民。在對實踐基礎有了基本了解之后,我們還將討論操作器所應用的SRE 理念及其共同目標,即降低運維的工作量和成本,提高服務可靠性,將團隊從日復一日地維護工作中解脫出來,激勵團隊成員的創(chuàng)新。
操作器框架與SDK
操作器模式源自CoreOS(https://coreos.com),這是一種自動化Kubernetes集群上日益復雜的應用程序的方法,包括管理Kubernetes 本身及其核心的etcd 鍵值存儲(https://github.com/coreos/etcd)。在被紅帽收購后,操作器一直在不斷發(fā)展,終于2018 年發(fā)布了開源的操作器框架和SDK。本書的示例使用了紅帽的操作器SDK,以及操作器框架所結(jié)合的分發(fā)機制。
其他操作器工具
操作器的社區(qū)在不斷地發(fā)展,單是紅帽分發(fā)頻道就容納了對應于眾多供應商和項目應用程序的一百多個操作器。除此之外,還有其他幾種操作器的構(gòu)建工具。雖然本書沒有詳細討論這些工具,但是在你閱讀完本書之后,可以將它們與操作器SDK 和框架進行比較。其他可用于構(gòu)建操作器的開源工具包括Python 版的Kopf(https://oreil.ly/JCL-S)、面向Kubernetes 項目的Kubebuilder(https://oreil.ly/8zdbj)以及Java 版的操作器SDK(https://oreil.ly/yXhVg)。
排版約定
本書使用了下述排版約定。
斜體(Italic)
表示新術語、URL、電子郵件地址、文件名和擴展名。
等寬字體(Constant Width)
表示程序片段,以及正文中出現(xiàn)的變量、函數(shù)名、數(shù)據(jù)庫、數(shù)據(jù)類型、環(huán)境變量、語句和關鍵字等。
加粗等寬字體(constant width bold)
表示應該由用戶輸入的命令或其他文本。
等寬斜體(constant width italic)
表示應該由用戶輸入的值或根據(jù)上下文確定的值替換的文本。
使用代碼示例
你可以通過如下鏈接下載本書的補充材料(代碼示例,練習等):https://github.com/kubernetes-operators-book/
如果你對本書代碼示例的使用有任何技術問題或困難,請發(fā)送電子郵件到:bookquestions@oreilly.com
本書的目的是幫助你完成工作。一般來說,你可以在自己的程序或者文檔中使用本書附帶的示例代碼。你無需聯(lián)系我們獲得使用許可,除非你要復制大量的代碼。例如,使用本書中的多個代碼片段編寫程序就無需獲得許可。但以CD-ROM 的形式銷售或者分發(fā)OReilly 書中的示例代碼則需要獲得許可;卮饐栴}時援引本書內(nèi)容以及書中示例代碼,無需獲得許可。在你自己的項目文檔中使用本書大量的示例代碼時,則需要獲得許可。
我們不強制要求署名,但如果你這么做我們將深表感激。署名一般包括書名、作者、出版社和國際標準書號。例如:Kubernetes Operators by Jason Dobies and Wood (OReilly). Copyright 2020 Red Hat, Inc.,978-1-492-04805-3。
如果你覺得自身情況不在合理使用或上述允許的范圍內(nèi),請通過郵件和我們聯(lián)系,地址是 permissions@oreilly.com。
如果你對本書有一些評論或技術上的建議, 請發(fā)送電子郵件到:
bookquestions@oreilly.com。
要了解OReilly 圖書、培訓課程、會議和新聞的更多信息,請訪問我們的網(wǎng)站,
地址是:http://www.oreilly.com。
我們的Facebook:http://facebook.com/oreilly。
我們的Twitter:http://twitter.com/oreillymedia。
我們的Youtube:http://www.youtube.com/oreillymedia。
致謝
本書得以付梓,我們要感謝紅帽以及OpenShift Advocacy 團隊的大力支
持,特別是Ryan Jarvinen 給予的全方面協(xié)助。感謝Anish Asthana、Evan
Cordell、Michael Gasch、Michael Hausenblas、Shawn Hurley 和Jess Males,
感謝你們?yōu)楸緯膶徍恕z查、建議以及其他工作所付出的努力,本書的內(nèi)
容才更加完善和連貫。
Jason Dobies是紅帽的開發(fā)推廣工程師,美國維拉諾瓦大學軟件工程與高級項目的兼職教授。 Wood是紅帽的開發(fā)推廣工程師,主要從事使用開源軟件構(gòu)建實用程序計算的工作。
目錄
前言 . 1
第1 章 操作器為Kubernetes 帶來的創(chuàng)新 7
1.1 Kubernetes 的工作方式 .8
1.2 示例:無狀態(tài)Web 服務器 10
1.3 有狀態(tài)的應用程序 11
1.4 操作器是軟件SRE 11
1.5 操作器的工作原理 12
1.6 如何創(chuàng)建操作器 13
1.7 示例:etcd 操作器 14
1.8 操作器面向的對象 15
1.9 整裝待發(fā) 16
第2 章 運行操作器 . 17
2.1 建立操作器實驗室 17
2.1.1 集群版本要求 18
2.1.2 授權要求18
2.1.3 標準的工具和技術 19
2.1.4 建議的集群配置 20
2.1.5 檢查集群的版本 22
2.2 運行一個簡單的操作器 .22
2.2.1 常見的示例 .23
2.2.2 獲取etcd 操作器的清單 24
2.2.3 CR:自定義API 端點 24
2.2.4 我是誰:定義操作器的服務賬號 25
2.2.5 部署etcd 操作器 29
2.2.6 聲明etcd 集群 30
2.2.7 練習使用etcd 32
2.2.8 擴展etcd 集群 33
2.2.9 故障與自動恢復 34
2.2.10 升級etcd 集群 36
2.2.11 清理 .39
2.3 小結(jié) .39
第3 章 構(gòu)建在Kubernetes 接口上的操作器 . 41
3.1 標準伸縮:副本集資源 .41
3.2 自定義資源 43
3.3 自定義控制器 .43
3.4 操作器的范圍 .44
3.4.1 命名空間范圍 44
3.4.2 集群范圍的操作器 45
3.5 授權 .45
3.5.1 服務賬號45
3.5.2 角色 46
3.5.3 角色綁定47
3.5.4 集群角色與集群角色綁定 47
3.6 小結(jié) .47
第4 章 操作器框架 . 49
4.1 操作器框架的起源 49
4.2 操作器成熟度模型 50
4.3 操作器SDK .51
4.4 操作器生命周期管理器 .52
4.5 操作器度量 53
4.6 小結(jié) .54
第5 章 示例應用程序:訪客網(wǎng)站 55
5.1 應用概況 56
5.2 使用清單安裝 .57
5.2.1 部署MySQL 58
5.2.2 后端 60
5.2.3 前端 63
5.3 部署清單 65
5.4 訪問訪客網(wǎng)站 .65
5.5 清理 .66
5.6 小結(jié) .66
第6 章 適配器操作器 . 67
6.1 Helm 操作器 69
6.1.1 構(gòu)建操作器 .70
6.1.2 完善CRD 75
6.1.3 檢查操作器的權限 75
6.1.4 運行Helm 操作器 75
6.2 Ansible 操作器 76
6.2.1 構(gòu)建操作器 .77
6.2.2 完善CRD 80
6.2.3 檢查操作器的權限 80
6.2.4 運行Ansible 操作器 80
6.3 測試操作器 81
6.4 小結(jié) .82
6.5 補充閱讀 82
第7 章 使用操作器SDK 構(gòu)建Go 語言的操作器 . 83
7.1 初始化操作器 .84
7.2 操作器的范圍 .85
7.3 自定義資源定義 87
7.3.1 定義Go 類型 .88
7.3.2 CRD 清單 90
7.4 操作器權限 90
7.5 控制器 91
7.6 編寫操作器的技巧 94
7.6.1 檢索資源94
7.6.2 創(chuàng)建子資源 .96
7.6.3 刪除子資源 .99
7.6.4 子資源的命名 .101
7.6.5 冪等性 101
7.6.6 操作器的影響 .102
7.7 在本地運行操作器 .103
7.8 訪客網(wǎng)站示例 104
7.9 小結(jié) 105
7.10 補充閱讀 106
第8 章 操作器生命周期管理器 107
8.1 OLM 自定義資源 108
8.1.1 集群服務版本 .108
8.1.2 目錄源 109
8.1.3 訂閱 .109
8.1.4 安裝計劃 110
8.1.5 操作器組 110
8.2 安裝OLM 111
8.3 使用OLM 113
8.3.1 探索操作器 119
8.3.2 刪除操作器 121
8.4 OLM 捆綁包的元數(shù)據(jù)文件 121
8.4.1 自定義資源定義 122
8.4.2 集群服務版本文件 122
8.4.3 包清單文件 123
8.5 編寫集群服務版本文件 123
8.5.1 生成文件的骨架 123
8.5.2 元數(shù)據(jù) 125
8.5.3 操作器擁有的CRD .127
8.5.4 操作器依賴的CRD .131
8.5.5 安裝模式132
8.5.6 版本和更新 133
8.6 編寫包清單文件 .134
8.7 本地運行 .135
8.7.1 前提條件135
8.7.2 構(gòu)建OLM 捆綁包 .140
8.7.3 通過OLM 安裝操作器 142
8.7.4 測試正在運行的操作器 .144
8.8 訪客網(wǎng)站操作器示例 144
8.9 小結(jié) 145
8.10 補充閱讀 145
第9 章 操作器的理念 147
9.1 每個應用程序的SRE 147
9.2 不勞而獲 .148
9.2.1 自動化:計算機自動工作 148
9.2.2 徒勞無功:沒有持久價值的工作 .149
9.2.3 擴展的痛點:隨著系統(tǒng)擴展不斷加重的工作 .149
9.3 操作器:Kubernetes 應用程序可靠性工程 150
9.3.1 管理應用程序的狀態(tài) 151
9.3.2 發(fā)送到軟件的黃金信號 .151
9.4 高度成功的操作器的七個習慣 153
9.5 小結(jié) 155
第10 章 親身參與 . 157
10.1 功能請求和報告錯誤 .158
10.2 貢獻代碼 159
10.3 共享操作器 .159
10.4 小結(jié) 160
附錄A 作為集群內(nèi)部的部署運行操作器 . 161
附錄B 自定義資源驗證 163
附錄C 基于角色的訪問控制 . 167
作者介紹 171
封面介紹 171