本書以實踐為主, 內(nèi)容涵蓋容器技術(shù)、Kubernetes核心資源以及基于Kubernetes的企業(yè)級實踐。從容器基礎(chǔ)知識開始, 由淺入深, 向讀者介紹Kubernetes各個方面的知識, 并提供許多實際項目和應(yīng)用場景, 以幫助讀者更好地理解和掌握這些概念。全書分為3部分, 第1部分講解容器技術(shù), 這是理解Kubernetes的必要基礎(chǔ), 主要介紹容器的定義、創(chuàng)建和管理容器、容器的網(wǎng)絡(luò)和存儲等方面的知識。第2部分深入講解Kubernetes的核心資源, 包括Pod、Deployment、Service、Ingress等, 將逐步介紹這些資源的定義、使用和管理方法, 并提供實際場景來說明這些概念。第3部分是基于Kubernetes的企業(yè)實踐, 將通過實際的企業(yè)案例, 向讀者介紹如何使用Kubernetes解決實際問題, 包括如何使用Kubernetes進(jìn)行應(yīng)用程序部署、監(jiān)控、自動化擴縮容和灰度發(fā)布等操作。
親愛的讀者,很高興向你介紹我的新書《Kubernetes從入門到DevOps企業(yè)應(yīng)用實戰(zhàn)》。在過去的幾年中,我一直從事容器和Kubernetes的相關(guān)工作,通過實踐和培訓(xùn),我意識到學(xué)習(xí)Kubernetes對于企業(yè)的發(fā)展至關(guān)重要。
從2013年Docker容器推出到2014年Kubernetes開源項目推出至今,我接觸容器技術(shù)也有了差不多十年時間,在學(xué)習(xí)和實踐期間,深刻感受到Kubernetes這個工具如果完全靠自學(xué),還是有一定難度的,為了使讀者盡快掌握這個工具,我推出了Kubernetes系列視頻課程,受到了廣大學(xué)員的歡迎,并入選了工信部人才交流中心認(rèn)證課程,本書就是在系列課程的基礎(chǔ)上編撰完成的。
本書的特點是以實踐為主,內(nèi)容涵蓋容器技術(shù)、Kubernetes核心資源以及基于Kubernetes的企業(yè)實踐。我將使用循序漸進(jìn)、逐步深入的方式,從容器的基礎(chǔ)知識開始,向讀者介紹Kubernetes各個方面的知識,并輔之以操作范例和應(yīng)用場景,書中還給出了大量有實用價值的案例和項目,既可以幫助讀者深入理解Kubernetes的概念和原理,又能夠在實際工作中進(jìn)行 實踐。
第1~3章講解容器技術(shù),這是理解Kubernetes的必要基礎(chǔ),重點介紹容器的定義、創(chuàng)建和管理容器、容器網(wǎng)絡(luò)和存儲等方面的知識。
第4章講解如何使用Kubeadm和二進(jìn)制文件安裝高可用Kubernetes集群。
第5~12章講解Kubernetes的核心資源,包括Pod、Deployment、Service、Ingress等資源的定義、使用和管理方法,以及實際應(yīng)用場景。
第13~20章講解基于Kubernetes的企業(yè)實踐,主要通過實際項目或案例介紹如何使用Kubernetes解決實際問題,包括使用Kubernetes進(jìn)行應(yīng)用程序的部署、容器云平臺的構(gòu)建、流量治理、監(jiān)控、自動化擴縮容和灰度發(fā)布等。
本書提供了豐富的資源文件,包括Kubernetes的官方文檔、Kubernetes的學(xué)習(xí)資源、Kubernetes的工具和插件等。這些資源可以幫助讀者更好地學(xué)習(xí)和理解Kubernetes,可掃描以下二維碼獲。
Kubernetes配書資源.part1 Kubernetes配書資源.part2 Kubernetes配書資源.part3 配書資源使用說明
本書基于Kubernetes 1.27新版本編寫(本書的內(nèi)容也適合1.20之后的所有版本),從零基礎(chǔ)開始,涵蓋理論知識、企業(yè)案例,以及自動化運維DevOps體系和一些大廠架構(gòu)設(shè)計思路,適合云原生領(lǐng)域的從業(yè)者、Kubernetest初學(xué)者、運維和開發(fā)人員使用,也可作為企業(yè)內(nèi)訓(xùn)、培訓(xùn)機構(gòu)和大中專院校的教學(xué)用書。
如果你對Kubernetes和本書有任何問題或建議,請隨時聯(lián)系我,你還可以在Gitee上找到我做的項目(聯(lián)系方式參見下載文件)。
最后,感謝清華大學(xué)出版社的編輯王金柱老師的全力支持和指導(dǎo),以及我的妻子王靜女士和各位技術(shù)同行的支持和鼓勵。希望這本書能夠幫助各位讀者學(xué)習(xí)和使用Kubernetes,從而推動企業(yè)的發(fā)展和進(jìn)步。
韓先超
2023年5月
第1章 Docker初探 1
1.1 Docker概述 1
1.1.1 Docker是什么 1
1.1.2 Docker的版本 2
1.1.3 學(xué)習(xí)Docker的方式 2
1.2 Docker的組成與特點 2
1.2.1 Docker的組成 2
1.2.2 Docker的特點 4
1.3 安裝和配置Docker 5
1.3.1 配置主機名 5
1.3.2 關(guān)閉Firewalld防火墻 6
1.3.3 關(guān)閉SELinux 6
1.3.4 配置時間同步 7
1.3.5 編寫計劃任務(wù) 7
1.3.6 重啟crond服務(wù)使計劃任務(wù)生效 8
1.3.7 安裝基礎(chǔ)軟件包 8
1.3.8 安裝Docker-CE 9
1.3.9 修改內(nèi)核參數(shù) 11
1.3.10 配置Docker鏡像加速器 13
1.4 Docker鏡像與容器 14
1.4.1 Docker鏡像 14
1.4.2 Docker容器 17
1.5 案例:通過Docker部署Nginx服務(wù) 24
1.5.1 基于CentOS鏡像運行一個Docker容器 24
1.5.2 查看Docker容器是否正常運行 24
1.5.3 在Docker中安裝Nginx容器 25
1.5.4 在Docker容器中通過yum安裝Nginx 26
1.6 本章小結(jié) 28
第2章 Dockerfile構(gòu)建企業(yè)級鏡像 29
2.1 Dockerfile語法詳解 29
2.2 Dockerfile構(gòu)建企業(yè)級鏡像 43
2.2.1 案例:Dockerfile構(gòu)建Nginx鏡像 43
2.2.2 案例:Dockerfile構(gòu)建Tomcat鏡像 48
2.3 本章小結(jié) 50
第3章 Docker私有鏡像倉庫Harbor 51
3.1 Harbor的概念及證書簽發(fā) 51
3.2 安裝Harbor 53
3.3 Harbor圖形界面使用說明 57
3.4 測試使用Harbor私有鏡像倉庫 59
3.5 Harbor高可用 62
3.6 本章小結(jié) 63
第4章 Kubeadm快速搭建Kubernetes集群 64
4.1 初始化實驗環(huán)境 65
4.1.1 配置靜態(tài)IP地址 67
4.1.2 配置機器主機名 68
4.1.3 配置主機hosts文件 68
4.1.4 配置控制節(jié)點到工作節(jié)點無密碼登錄 68
4.1.5 關(guān)閉交換分區(qū) 69
4.1.6 修改機器內(nèi)核參數(shù) 70
4.1.7 關(guān)閉Firewalld防火墻 72
4.1.8 關(guān)閉SELinux 72
4.1.9 配置安裝Docker和Containerd需要的阿里云的在線yum源 73
4.1.10 配置安裝Kubernetes組件需要的阿里云的在線yum源 74
4.1.11 配置時間同步 75
4.1.12 安裝Docker-CE和Containerd服務(wù) 76
4.2 安裝Kubernetes集群 80
4.2.1 安裝初始化Kubernetes集群需要的軟件包 80
4.2.2 Kubeadm初始化Kubernetes集群 81
4.2.3 配置Kubectl的配置文件config 83
4.3 擴容Kubernetes集群 85
4.3.1 添加第一個工作節(jié)點 85
4.3.2 添加第二個工作節(jié)點 86
4.4 安裝Kubernetes網(wǎng)絡(luò)插件Calico 88
4.4.1 安裝Calico 88
4.4.2 Calico的配置 89
4.4.3 calico-kube-controllers解析 94
4.5 測試Kubernetes集群是否健康 95
4.5.1 測試在Kubernetes中創(chuàng)建的Pod是否可以正常訪問網(wǎng)絡(luò) 95
4.5.2 測試CoreDNS是否正常 96
4.5.3 延長證書 96
4.6 本章小結(jié) 99
第5章 Kubernetes核心資源Pod 100
5.1 Pod是什么 100
5.1.1 Pod基本介紹 100
5.1.2 Pod如何管理多個容器 101
5.1.3 Pod網(wǎng)絡(luò) 102
5.1.4 Pod存儲 102
5.2 Pod的工作方式 103
5.2.1 自主式Pod 103
5.2.2 控制器管理的Pod 107
5.3 如何創(chuàng)建一個Pod資源 111
5.3.1 通過YAML文件創(chuàng)建Pod資源 112
5.3.2 Pod資源清單編寫技巧 113
5.3.3 創(chuàng)建一個完整的Pod資源 141
5.3.4 和Pod相關(guān)的命令解讀 144
5.4 nodeName和nodeSelector 146
5.4.1 nodeName實例 147
5.4.2 nodeSelector實例 148
5.5 親和性、污點和容忍度 149
5.5.1 節(jié)點親和性 149
5.5.2 Pod親和性和反親和性 154
5.5.3 污點和容忍度 160
5.6 Pod生命周期和健康探測 165
5.6.1 初始化容器initcontainer 166
5.6.2 存活探測 167
5.6.3 就緒探測 170
5.6.4 容器鉤子 172
5.7 本章小結(jié) 174
第6章 ReplicaSet和Deployment控制器管理Pod 175
6.1 ReplicaSet如何管理Pod 176
6.1.1 ReplicaSet概述 176
6.1.2 ReplicaSet資源清單文件的編寫技巧 176
6.2 ReplicaSet管理Pod案例:部署Guestbook留言板 178
6.3 ReplicaSet管理Pod實例:擴容、縮容、更新 180
6.4 Deployment如何管理Pod 183
6.4.1 Deployment概述 183
6.4.2 Deployment如何管理ReplicaSet和Pod 184
6.5 Deployment資源清單文件的編寫技巧 185
6.5.1 查看Deployment資源對象YAML文件的組成 186
6.5.2 查看Deployment下的spec字段 186
6.6 Deployment管理Pod案例解析 188
6.7 Deployment管理Pod:擴容和縮容 190
6.7.1 電商網(wǎng)站訪問量急增——擴容Pod 190
6.7.2 電商網(wǎng)站淡季或業(yè)務(wù)低峰期——縮容Pod 191
6.8 基于Deployment實現(xiàn)Pod滾動更新——WebApp應(yīng)用版本升級 192
6.9 本章小結(jié) 195
第7章 Service四層負(fù)載均衡 197
7.1 Service的概念與原理 197
7.1.1 Service基本介紹 197
7.1.2 Kubernetes集群中的3類IP地址 198
7.2 創(chuàng)建Service資源 200
7.2.1 創(chuàng)建Service資源的方法 200
7.2.2 案例:用YAML文件創(chuàng)建Service資源 200
7.2.3 查看定義Service資源需要的字段 202
7.2.4 Service的4種Type類型 203
7.2.5 Service的端口定義 206
7.2.6 創(chuàng)建Service:類型是ClusterIP 207
7.2.7 創(chuàng)建Service:類型是NodePort 209
7.2.8 創(chuàng)建Service:類型是ExternalName 212
7.3 本章小結(jié) 215