關(guān)于我們
書單推薦
新書推薦
|
Kubernetes即學(xué)即用
本書作者一直在Google和其他公司從事Kubernetes方面的工作,為我們解釋了該系統(tǒng)如何融入分布式應(yīng)用程序的生命周期之中的。你將學(xué)習(xí)如何使用各種工具和API來實(shí)現(xiàn)可擴(kuò)展分布式系統(tǒng)管理的自動(dòng)化,無論該系統(tǒng)用于在線服務(wù)、機(jī)器學(xué)習(xí)應(yīng)用程序,還是Raspberry Pi計(jì)算機(jī)群集。本書的主要內(nèi)容有:探索Kubernetes所面臨的分布式系統(tǒng)挑戰(zhàn)。使用Docker等容器進(jìn)行容器化應(yīng)用開發(fā)。使用docker鏡像格式和容器運(yùn)行時(shí)在Kubernetes上創(chuàng)建和運(yùn)行容器。探索在生產(chǎn)中運(yùn)行應(yīng)用程序所必需的專門對(duì)象。在無需停機(jī)或無差錯(cuò)情況下可靠地推出新的軟件版本。舉例說明如何在Kubernetes中開發(fā)和部署真實(shí)應(yīng)用程序。
Kubernetes 獻(xiàn)辭 Kubernetes 要感謝每一個(gè)在凌晨三點(diǎn)醒來重啟進(jìn)程的系統(tǒng)管理員;感謝每個(gè)將代碼推送到生產(chǎn)環(huán)境中,結(jié)果卻發(fā)現(xiàn)它并沒有像在筆記本計(jì)算機(jī)上那樣運(yùn)行的開發(fā)人員;感謝每個(gè)由于主機(jī)名更新問題而誤將負(fù)載測(cè)試應(yīng)用于生產(chǎn)環(huán)境中的服務(wù)上的系統(tǒng)架構(gòu)師。當(dāng)然,這都是些令人痛苦的、令人摸不著頭腦的時(shí)刻,但正是由于這些奇怪錯(cuò)誤才促進(jìn)了Kubernetes 的發(fā)展。用一句話來說就是:Kubernetes 打算從根本上簡(jiǎn)化構(gòu)建、部署和維護(hù)分布式系統(tǒng)的各種任務(wù)。它的靈感來自于幾十年來人們?cè)诖蛟炜煽肯到y(tǒng)方面積累的實(shí)際經(jīng)驗(yàn),并且進(jìn)行了全新的設(shè)計(jì),以便促使人們?cè)趶氖逻@方面工作時(shí)的體驗(yàn),即使不是欣喜的,也至少是愉快的。我們希望你喜歡這本書! 本書讀者對(duì)象 無論你是分布式系統(tǒng)的新手,還是多年來一直在部署云原生系統(tǒng)的老手,容器和Kubernetes 都能幫你將速度、敏捷性、可靠性和效率提升到一個(gè)新的高度。本書將為讀者詳細(xì)介紹Kubernetes 群集管理器,以及如何使用其工具和API 來改善分布式應(yīng)用程序的開發(fā)、交付和維護(hù)效率。盡管本書不要求讀者有Kubernetes 方面的經(jīng)驗(yàn),但為了最大程度地利用本書,至少要求讀者熟悉基于服務(wù)器的應(yīng)用程序的構(gòu)建和部署方面的知識(shí)。當(dāng)然,熟悉負(fù)載均衡和網(wǎng)絡(luò)存儲(chǔ)等概念將是有用的,但不是必需的。同樣,關(guān)于Linux、Linux 容器和Docker 的經(jīng)驗(yàn)雖然不是必需的,卻可以幫助你充分利用這本書。 我們?yōu)槭裁匆獙戇@本書 從Kubernetes 面世到現(xiàn)在,我們一直都在跟它打交道,從而有機(jī)會(huì)見證了它翻天覆地的變化:從一個(gè)當(dāng)初主要滿足好奇心的實(shí)驗(yàn),轉(zhuǎn)變?yōu)槟壳盀閺臋C(jī)器學(xué)習(xí)到在線服務(wù)等領(lǐng)域大規(guī)模應(yīng)用提供強(qiáng)大動(dòng)力的關(guān)鍵生產(chǎn)級(jí)基礎(chǔ)設(shè)施。隨著這一轉(zhuǎn)變的發(fā)生,我們?cè)絹碓狡惹械馗杏X到需要寫這樣一本書:它既能抓住Kubernetes 使用方式的核心概念,同時(shí)又能抓住這些概念的發(fā)展背后的動(dòng)機(jī)。如果能夠編寫一本這樣的書,那么毫無疑問將會(huì)對(duì)云原生應(yīng)用程序開發(fā)做出重要的貢獻(xiàn)。我們希望在閱讀本書時(shí),你不僅可以學(xué)習(xí)如何在Kubernetes 之上構(gòu)建可靠的、可伸縮的應(yīng)用程序,同時(shí)還可以洞悉分布式系統(tǒng)所面臨的核心挑戰(zhàn),因?yàn)檎沁@些挑戰(zhàn)才促進(jìn)了分布式系統(tǒng)的發(fā)展。 目前的云原生應(yīng)用簡(jiǎn)介 從第一種編程語言到面向?qū)ο缶幊,再到虛擬化和云基礎(chǔ)架構(gòu)的發(fā)展,計(jì)算機(jī)科學(xué)的歷史就是一個(gè)隱藏復(fù)雜性并賦予你構(gòu)建更復(fù)雜應(yīng)用程序的抽象開發(fā)的歷史。盡管如此,可靠的、可擴(kuò)展的應(yīng)用程序的開發(fā)仍然面臨著許多重大挑戰(zhàn)。近年來,像Kubernetes 這樣的容器和容器管理API 已經(jīng)成為一個(gè)重要的抽象,它能從根本上簡(jiǎn)化可靠的、可擴(kuò)展的分布式系統(tǒng)的開發(fā)。盡管容器和集群管理系統(tǒng)尚未完全成為主流,但它們已經(jīng)能夠讓開發(fā)人員以快速、靈活和可靠的方式構(gòu)建和部署應(yīng)用程序,而這種方式在幾年前看來簡(jiǎn)直就是科幻小說。 本書主要內(nèi)容 本書的組織結(jié)構(gòu)如下。第1 章概述了Kubernetes 的各種優(yōu)勢(shì),這里不會(huì)深入探究其細(xì)節(jié)。如果你是Kubernetes 新手,最好從這一章開始閱讀,從而了解本書其他部分的大致內(nèi)容。接下來的一章將詳細(xì)介紹容器和容器化應(yīng)用程序開發(fā)。如果你以前從未真正接觸過Docker,本章將是一個(gè)不錯(cuò)的入門材料。如果你已經(jīng)是Docker 專家,那么它可以用于溫故知新。第3 章介紹如何部署Kubernetes。雖然本書主要講解Kubernetes 的使用方式,但是在此之前,需要建立并運(yùn)行一個(gè)集群。當(dāng)然,運(yùn)行生產(chǎn)環(huán)境中的集群方面的知識(shí)已經(jīng)超出了本書的范圍,所以本章只是介紹幾種創(chuàng)建集群的簡(jiǎn)單方法,以便了解Kubernetes 的使用方。從第5 章開始,我們深入了解使用Kubernetes 部署應(yīng)用程序的具體細(xì)節(jié)。其中,我們將為讀者詳細(xì)介紹Pods(第5 章)、標(biāo)簽和注釋(第6 章)、服務(wù)(第7 章)和ReplicaSet(第8 章)。這些就是利用Kubernetes 部署服務(wù)所需的核心基礎(chǔ)知識(shí)。在這些章節(jié)之后,我們將討論Kubernetes 中一些更專門化的對(duì)象:DaemonSet(第9 章)、jobs(第10 章),以及ConfigMaps 和secrets(第11 章)。雖然這些章節(jié)對(duì)于許多生產(chǎn)環(huán)境中的應(yīng)用程序來說是必不可少的,但如果你只是學(xué)習(xí)Kubernetes,那么完全可以跳過它們,然后在獲得更多的經(jīng)驗(yàn)和專業(yè)知識(shí)后再回來閱讀它們。然后,我們會(huì)討論調(diào)度(第12 章),也就是將一個(gè)完整應(yīng)用程序的生命周期綁定在一起,并將存儲(chǔ)器集成到Kubernetes(第13 章)中。最后,我們通過一些例子來說明如何利用Kubernetes 來開發(fā)和部署實(shí)際應(yīng)用程序。 在線資源 你需要安裝Docker,為此,可能還需要熟悉一下相關(guān)的Docker 文檔。同樣,你也需要安裝kubectl 命令行工具。你可能還想加入Kubernetes slack頻道,這是一個(gè)大型用戶社區(qū),優(yōu)點(diǎn)是幾乎每天的任意時(shí)刻都有人在探討和回答問題。最后,隨著相關(guān)知識(shí)技能的不斷進(jìn)步,將來可能還需要直接與GitHub 上的開源Kubernetes 存儲(chǔ)庫進(jìn)行交互。 排版約定 本書使用了下列排版約定: 斜體(Italic)表示新術(shù)語、URL、電子郵件地址、文件名和文件擴(kuò)展名。 等寬字體(Constant Width)表示程序片段,以及正文中出現(xiàn)的變量、函數(shù)名、數(shù)據(jù)庫、數(shù)據(jù)類型、環(huán)境變量、語句和關(guān)鍵字等。 等寬粗體(Constant width bold)表示應(yīng)該由用戶輸入的命令或其他文本。 等寬斜體(Constant Width Italic)表示應(yīng)該由用戶輸入的值或根據(jù)上下文確定的值替換的文本。 使用代碼示例 補(bǔ)充材料(代碼示例、習(xí)題等)可從https://github.com/kubernetes-up-andrunning/examples 下載。 本書是要幫你完成工作的。一般來說,如果本書提供了示例代碼,你可以把它用在你的程序和文檔中。除非你使用了很大一部分代碼,否則無需聯(lián)系我們獲得許可。比如,用本書的幾個(gè)代碼片段寫一個(gè)程序就無需獲得許可。銷售或分發(fā)OReilly 圖書的示例光盤則需要獲得許可。引用本書中的示例代碼來回答問題無需獲得許可。將書中大量示例代碼放到你的產(chǎn)品文檔中則需要獲得許可。 我們很希望但并不強(qiáng)制要求你在引用本書內(nèi)容時(shí)加上引用說明。引用說明一般包括書名、作者、出版社和ISBN。比如:Kubernetes: Up and Runningby Kelsey Hightower, Brendan Burns, and Joe Beda (OReilly). Copyright 2017Kelsey Hightower, Brendan Burns, and Joe Beda, 978-1-491-93567-5。如果你覺得自己對(duì)示例代碼的用法超出了上述許可的范圍,歡迎你通過permissions@oreilly.com 與我們聯(lián)系。
作者主要從事數(shù)據(jù)中心網(wǎng)絡(luò)解決方案的研發(fā)與部署,技術(shù)方向包括云計(jì)算、軟件定義網(wǎng)絡(luò)(SDN)、網(wǎng)絡(luò)安全等,是國(guó)內(nèi)較早從事 SDN 和網(wǎng)絡(luò)虛擬化相關(guān)技術(shù)的推廣者,同時(shí)也是 Docke開源社區(qū)的發(fā)起人之一。
前言 .........................................................................................................................................1 第1章 概述 ...............................................................................................................................7 速度 ...........................................................................................................................................8 不變性的價(jià)值 ..................................................................................................................9 聲明式配置 .....................................................................................................................10 自我修復(fù)系統(tǒng) .................................................................................................................11 擴(kuò)展服務(wù)和團(tuán)隊(duì) .....................................................................................................................12 解耦 ..................................................................................................................................12 更易于擴(kuò)展的應(yīng)用程序和集群 ..................................................................................12 利用微服務(wù)擴(kuò)展開發(fā)團(tuán)隊(duì) ...........................................................................................13 一致性和可擴(kuò)展性的隔離 ...........................................................................................14 抽象基礎(chǔ)設(shè)施 ..........................................................................................................................16 效率 ..........................................................................................................................................17 小結(jié) ..........................................................................................................................................18 第2章 創(chuàng)建和運(yùn)行容器 ......................................................19 容器鏡像 ..................................................................................................................................20 Docker鏡像格式 ............................................................................................................21 使用Docker構(gòu)建應(yīng)用程序鏡像 ...........................................................................................23 Dockerfile ........................................................................................................................23 鏡像的安全性 .................................................................................................................24 優(yōu)化鏡像大小 .................................................................................................................24 將鏡像存儲(chǔ)到遠(yuǎn)程倉儲(chǔ) ........................................................................................................25 Docker容器運(yùn)行時(shí) .................................................................................................................26 通過Docker運(yùn)行容器 ....................................................................................................27 探索kuard應(yīng)用程序 ......................................................................................................27 限制資源使用 .................................................................................................................27 刪除鏡像 ..................................................................................................................................28 小結(jié) ..........................................................................................................................................29 第3章 部署Kubernetes群集 .............................................30 在公共云上安裝Kubernetes ...............................................................................................31 Google Container Service ...........................................................................................31 使用Azure Container Service安裝Kubernetes ......................................................31 在Amazon Web Services上安裝Kubernetes ...........................................................32 使用minikube在本地安裝Kubernetes .............................................................................33 在Raspberry Pi上運(yùn)行Kubernetes ....................................................................................34 Kubernetes客戶端 .................................................................................................................34 檢查群集狀態(tài) .................................................................................................................34 查看Kubernetes Worker節(jié)點(diǎn) ......................................................................................35 群集組件 ..................................................................................................................................38 Kubernetes代理 .............................................................................................................38 Kubernetes DNS .............................................................................................................38 Kubernetes UI .................................................................................................................39 小結(jié) .........................................................................................................................................40 第4章 常用kubectl命令 ....................................................41 命名空間 ..................................................................................................................................41 上下文 ......................................................................................................................................41 查看Kubernetes API對(duì)象 .....................................................................................................42 創(chuàng)建、更新和銷毀Kubernetes對(duì)象...................................................................................43 標(biāo)記和注釋對(duì)象 ....................................................................................................................44 調(diào)試命令 ..................................................................................................................................44 小結(jié) ..........................................................................................................................................45 第5章 pod ........................................................................46 Kubernetes中的pod ..............................................................................................................47 用pod思考 ...............................................................................................................................48 pod Manifest ...........................................................................................................................48 創(chuàng)建pod ...........................................................................................................................49 創(chuàng)建pod Manifest ..........................................................................................................50 運(yùn)行pod ...................................................................................................................................51 列出pod ...........................................................................................................................51 pod的詳細(xì)信息 .............................................................................................................52 刪除pod ...........................................................................................................................53 訪問pod ..................................................................................................................................54 使用端口轉(zhuǎn)發(fā) .................................................................................................................54 使用日志獲取更多信息 ...............................................................................................55 利用exec執(zhí)行容器中的命令 .......................................................................................55 在容器間復(fù)制文件 ........................................................................................................56 健康檢查 ..................................................................................................................................56 活性探針 .........................................................................................................................57 就緒探針 ..........................................................................................................................58 健康檢查的類型 .............................................................................................................59 資源管理 ..................................................................................................................................59 資源請(qǐng)求:所需資源下限 ...........................................................................................60 通過限額控制資源用量 ...............................................................................................62 利用卷實(shí)現(xiàn)數(shù)據(jù)持久化 ........................................................................................................63 通過pod使用存儲(chǔ)卷 .....................................................................................................63 pod使用卷的不同方式 .................................................................................................64 使用遠(yuǎn)程磁盤實(shí)現(xiàn)數(shù)據(jù)的持久性 ..............................................................................65 綜合討論 ..................................................................................................................................66 小結(jié) ..........................................................................................................................................67 第6章 標(biāo)簽和注釋 ............................................................68 標(biāo)簽 ..........................................................................................................................................68 應(yīng)用標(biāo)簽 ..........................................................................................................................70 修改標(biāo)簽 .........................................................................................................................71 標(biāo)簽選擇器 .....................................................................................................................72 API對(duì)象中的標(biāo)簽選擇器..............................................................................................74 注釋 ..........................................................................................................................................75 定義注釋 ..........................................................................................................................76 清理 ..........................................................................................................................................76 小結(jié) ..........................................................................................................................................77 第7章 服務(wù)發(fā)現(xiàn) ...............................................................78 什么是服務(wù)發(fā)現(xiàn)? .................................................................................................................78 Service對(duì)象 .............................................................................................................................79 提供DNS服務(wù) ..................................................................................................................80 就緒檢查 ..........................................................................................................................82 集群之外 ..................................................................................................................................83 云集成 ......................................................................................................................................85 高級(jí)細(xì)節(jié) .................................................................................................................................86 端點(diǎn) ..................................................................................................................................86 手動(dòng)服務(wù)發(fā)現(xiàn) .................................................................................................................88 kube-proxy與集群IP .....................................................................................................89 群集IP環(huán)境變量..............................................................................................................90 清除對(duì)象 ..................................................................................................................................91 小結(jié) ..........................................................................................................................................91 第8章 ReplicaSet .............................................................92 調(diào)和循環(huán) ..................................................................................................................................93 將pod和ReplicaSet關(guān)聯(lián)起來 ..............................................................................................94 采用現(xiàn)有容器 .................................................................................................................94 隔離容器 ..........................................................................................................................94 使用ReplicaSet進(jìn)行設(shè)計(jì) ......................................................................................................95 ReplicaSet的規(guī)范 ...................................................................................................................95 pod模板 ..........................................................................................................................96 標(biāo)簽 ..................................................................................................................................96 創(chuàng)建ReplicaSet ........................................................................................................................97 監(jiān)查ReplicaSet ........................................................................................................................97 從pod中查找ReplicaSet...............................................................................................98 查找ReplicaSet的pod集...............................................................................................98 擴(kuò)展ReplicaSet ........................................................................................................................99 使用kubectl Scale進(jìn)行命令式縮放 ...........................................................................99 使用kubectl apply進(jìn)行聲明式縮放 ....................................................................... 100 自動(dòng)調(diào)整ReplicaSet ................................................................................................... 101 刪除ReplicaSet ..................................................................................................................... 102 小結(jié) ....................................................................................................................................... 103 第9章 DaemonSet .......................................................... 104 DaemonSet調(diào)度器 ............................................................................................................. 105 創(chuàng)建DaemonSet .................................................................................................................. 105 將DaemonSet限制為特定節(jié)點(diǎn) ........................................................................................ 108 為節(jié)點(diǎn)添加標(biāo)簽 .......................................................................................................... 108 節(jié)點(diǎn)選擇器 .................................................................................................................. 109 更新DaemonSet .................................................................................................................. 110 通過刪除單個(gè)pod來更新DaemonSet ................................................................... 110 滾動(dòng)更新DaemonSet ................................................................................................. 111 刪除DaemonSet .................................................................................................................. 112 小結(jié) ....................................................................................................................................... 112 第10章 作業(yè) ................................................................... 113 Job對(duì)象 ................................................................................................................................. 113 作業(yè)模式 ............................................................................................................................... 114 一次性作業(yè) .................................................................................................................. 114 并行性 ........................................................................................................................... 120 工作隊(duì)列 ....................................................................................................................... 122 小結(jié) ....................................................................................................................................... 126 第11章 ConfigMap與Secret ........................................... 127 ConfigMap ............................................................................................................................ 127 創(chuàng)建ConfigMap ........................................................................................................... 128 ConfigMap的用法 ...................................................................................................... 129 Secret .................................................................................................................................... 132 創(chuàng)建Secret .................................................................................................................... 133 消費(fèi)secret .................................................................................................................... 134 私有Docker倉庫 ......................................................................................................... 136 命名約束 ............................................................................................................................... 137 管理ConfigMap和Secret ................................................................................................... 137 顯示 ............................................................................................................................... 138 創(chuàng)建 ............................................................................................................................... 138 更新 ............................................................................................................................... 139 小結(jié) ....................................................................................................................................... 141 第12章 Deployment ....................................................... 142 我們的第一個(gè)Deployment對(duì)象 ...................................................................................... 143 Deployment對(duì)象的運(yùn)行機(jī)制 .................................................................................. 143 創(chuàng)建Deployment對(duì)象 ........................................................................................................ 145 管理Deployment對(duì)象 ........................................................................................................ 146 更新Deployment對(duì)象 ........................................................................................................ 147 Deployment對(duì)象的縮放 ........................................................................................... 148 更新容器鏡像 .............................................................................................................. 148 更新的歷史記錄 .......................................................................................................... 150 部署策略 ............................................................................................................................... 153 Recreate策略 ............................................................................................................... 153 RollingUpdate策略..................................................................................................... 153 降低更新速度以確保服務(wù)的健康 ........................................................................... 157 刪除Deployment ................................................................................................................. 159 小結(jié) ....................................................................................................................................... 159 第13章 為Kubernetes集成存儲(chǔ)解決方案 ......................... 160 導(dǎo)入外部服務(wù) ....................................................................................................................... 161 沒有選擇器的服務(wù) .................................................................................................... 163 外部服務(wù)的局限性:健康檢查 ............................................................................... 165 運(yùn)行可靠的單例 .................................................................................................................. 165 運(yùn)行MySQL單例 .......................................................................................................... 165 動(dòng)態(tài)卷配置 .................................................................................................................. 169 帶有StatefulSet的Kubernetes-Native存儲(chǔ) .................................................................. 170 StatefulSet的特性 ....................................................................................................... 171 使用StatefulSet手動(dòng)部署備份式MongoDB ......................................................... 171 自動(dòng)創(chuàng)建MongoDB群集 ........................................................................................... 174 持久卷和有狀態(tài)集 ..................................................................................................... 177 最后一件事:準(zhǔn)備就緒探針 .................................................................................... 178 小結(jié) ....................................................................................................................................... 179 第14章 部署實(shí)際應(yīng)用程序 ............................................... 180 Parse ...................................................................................................................................... 180 先決條件 ....................................................................................................................... 181 構(gòu)建parse-server ........................................................................................................ 181 部署parse-server ........................................................................................................ 182 測(cè)試Parse ...................................................................................................................... 183 Ghost ..................................................................................................................................... 183 配置Ghost..................................................................................................................... 183 Redis ...................................................................................................................................... 187 配置Redis ...................................................................................................................... 188 創(chuàng)建Redis服務(wù) ............................................................................................................. 190 部署Redis ...................................................................................................................... 190 測(cè)試Redis群集 ............................................................................................................. 192 小結(jié) ....................................................................................................................................... 193 附錄A 利用Raspberry Pi搭建Kubernetes群集 ...................................................................... 195
你還可能感興趣
我要評(píng)論
|