第1 部分 基础概念
: l; X- m& Z5 m2 i3 [9 N第1 章 容器集群综述 2
+ p/ A' p2 q9 S' s ? D- r, L/ `1.1 虚拟化与容器 25 ]" e: G1 |4 C4 L9 @+ \2 c& k, P
1.1.1 计算资源虚拟化 2, c4 Q. l# l5 Z! k8 m
1.1.2 容器技术的本质 4. \6 s( H; Q1 L1 j
1.1.3 基于容器的软件交付 13" m* y- O/ J. ?+ X/ Q. Q
1.2 容器集群与分布式服务 16) Q# e# _9 |) M% I
1.2.1 微服务架构 16# V6 Q" \& v' l3 ]9 u' ~
1.2.2 容器集群生态圈 18
0 c( y, F6 r7 H4 H4 ?4 k. B! N1.3 容器即服务 26
, S+ T5 m p0 ?3 U1.3.1 从基础设施到平台 26
7 L2 \6 q f" w+ }3 L1.3.2 数据中心操作系统 29
, T$ t C6 t1 E6 N# E# j/ ]( W& ]1.4 本章小结 31
; ~+ N2 p7 W4 |, O第2 部分 解决方案! c0 [* @- h3 v; @ r; o/ ^
第2 章 SwarmKit 集群解决方案 359 T+ e& W6 j1 {1 k/ A
2.1 开源容器集群方案 35$ m8 {" i1 N1 x/ i4 j9 l9 F
2.1.1 容器社区的“四朵金花” 35
- \4 D5 i9 ]9 G; X& k2.1.2 经典Swarm、SwarmKit 和Swarm Mode 36; r# R4 H- h% n, D6 k# k4 k
2.2 使用SwarmKit 37
/ X& H, A S7 C8 {" t1 o4 X2.2.1 SwarmKit 综述 379 q2 X& v* p: k; |5 v
2.2.2 创建SwarmKit 集群 40' X; e. r, D1 A5 P% [
2.2.3 在SwarmKit 集群上运行服务 43
5 N/ z* P5 i, u' U. {4 F" O2.2.4 SwarmKit 集群的其他功能 45# {2 M* |1 w2 N7 {$ q7 b
2.3 Docker Swarm Mode 45
& G+ w: r, N# A) K" a2.3.1 Swarm Mode 综述 45
( G% o5 d) o. a; u2.3.2 集群的创建与销毁 46+ }. j! {( W5 |+ b0 n' w8 @
2.3.3 节点管理 48
0 w7 K; \) z& Z6 g& m) U2 A2.3.4 服务管理 51
. }; `6 C" e5 S- v& C3 ?2.3.5 服务编排 56
4 D( E/ A2 }$ _. K2.3.6 应用栈的管理 63* F3 j5 f9 `" ~% k1 O3 ~8 P
2.3.7 外置配置和密文管理 66
( T& x: F7 n* j2.4 Swarm Mode 的图形界面 69
- o) h6 @, v, ] X: A9 Z5 j2.4.1 Swarm Mode UI 现状 69
, B8 e+ S, G& M# _# X2.4.2 Portainer 71! S* }/ F: a- t/ f- n
2.5 本章小结 74
2 x m+ V/ I# t4 Z" r7 ^ n第3 章 Kubernetes 集群解决方案 75
1 ?! q3 X+ a# G3.1 Kubernetes 集群概述 75
+ j& Z' p0 ]; l/ U6 N3.1.1 Kubernetes 项目的起源 75/ C {- Q$ L* D, e, M, P+ `
3.1.2 Kubernetes 的结构 76# o, c' @8 B4 Q
3.1.3 基本概念 78
8 G5 w4 q1 o- F1 E/ Q7 M- g3.2 部署Kubernetes 集群 82
/ |+ V, X$ U/ y. `2 E% f A) t3.2.1 使用Minikube 82
) d0 S9 c' Q7 l5 s4 p3.2.2 使用kubeadm 83 z @2 V2 j. ~. K3 r2 T+ e4 X
3.2.3 理解Kubernetes 集群的部署过程 87 v7 y! k1 f6 [! h! [+ x
3.2.4 验证集群可用性 96
: s3 l" A7 z0 v' b) _, H, T. H- S3.3 使用Kubernetes 988 a* W* }6 c( \7 V3 ]5 K
3.3.1 通过Kubernetes 部署服务 98
$ [; |) j! a" M, K( F; s, C3.3.2 服务的在线更新和回滚 103. F. [! b" s" S/ s! }- V7 D
3.3.3 单次任务、定时任务和全局服务 1094 h2 A, k9 H& e( z3 l' U, `6 B
3.3.4 持久化存储 113
: z5 [* U0 ^% @) P9 X; l# R3.3.5 配置存储 116, n+ {( c! R5 x( s e# @% ?: G
3.3.6 管理有状态的服务 122
& i: |7 L9 a; p0 B: C: O8 g3.3.7 健康检查 126
0 s/ v! J9 `& o" n8 e; F- y3.3.8 提供对外服务 127
1 v# m! J( i7 @3.3.9 多租户隔离和配额 131* o6 g; B) u' U1 W0 r, H
3.3.10 集群的节点管理 135$ O3 r/ W7 z' \0 G& a# p
3.4 Kubernetes 包管理工具Helm 137
* W4 P, c" S- |9 }3 R3 p3.4.1 Helm 简介 137
) T" o" e! }% a, R- U3.4.2 使用Helm 管理服务 137 [4 ]& ~ O' n, X% Z% {8 S2 I5 ^
3.4.3 自定义Chart 142
t2 m& ~5 C, V F& L P" E3.4.4 Chart 仓库 146" F5 P+ _$ z% f
3.5 本章小结 147
! o6 }9 }% D; i6 N2 k/ r第4 章 Mesos 集群解决方案 148
3 x" m" q( P2 w4 R0 x* K5 ]4.1 Mesos 和DC/OS 概述 148
1 n& G0 l8 `$ e5 B: |) P4.1.1 Mesos 项目的起源 148
* |3 y) I9 V7 k3 |4.1.2 Mesos 的结构 149
. X! v0 _5 m0 P4.1.3 Mesos 的内部构成 151
9 Y9 k( \( ^. Q! j4.1.4 DC/OS 数据中心操作系统 152: T. T" z& p, I1 \; S
4.2 部署Mesos 集群 1536 }5 O# N- ^+ G4 c; R
4.2.1 部署ZooKeeper 153
& W8 f# R% H; v- h: v5 ^4.2.2 部署Mesos 157
. o; K9 J6 @: D' F! Z+ ] Y4.2.3 启动Master 节点 158' j* W T8 r' \, I A
4.2.4 添加Agent 节点 161
2 m1 p4 f) U' {; ~9 z( r4.2.5 Mesos 服务的启动参数 164
# w9 x% P$ s: o( a# n. a4.3 使用Marathon 管理服务 1707 n) v1 Q+ Z: C
4.3.1 部署Marathon 1706 v2 ]" q5 t4 Q. T
4.3.2 添加一个应用 172 6 D3 `3 B) q8 g" t w r
4.3.3 使用DC/OS 命令行工具 177
, X! a$ [ t1 N' \4.3.4 使用Docker 容器 177) f0 I G2 o8 w) D) s% p; j
4.3.5 使用Unified Container 179
" c9 x' h( ~; |8 U2 ]4.3.6 持久化卷存储 182% e0 y' K- o/ j3 T
4.3.7 Marathon-LB 负载均衡 1849 X c% Z% K0 y' p( ^5 {, l% T
4.3.8 Mesos-DNS 域名服务 188
/ E5 O- T0 q9 s) H( E4.3.9 服务依赖和编组 191- K Z8 D r4 l6 B& B2 s
4.3.10 应用升级 194
" [+ V) l* ]- o# @4.3.11 调度约束 199
! |$ Y# Q) i$ ~( p4.3.12 健康检查 2010 a2 x! m' L$ g/ E- c' T
4.4 使用Chronos 203
) N0 p( F z# R: o3 |4.4.1 部署Chronos 203
& u: Q" n- j0 R) Y" l3 o; S! }4.4.2 定时表达式 204" n% X8 H9 R' `
4.4.3 创建定时任务 2056 J$ w9 [# o9 k7 l6 n
4.4.4 定时任务的依赖 208. I/ T1 W' A& }
4.5 更多的Mesos 服务框架 209% |, }9 i R1 Q9 D/ Y
4.5.1 Mesos 服务框架的本质 209
! K: O# H% i5 t4 v4.5.2 编写自己的Mesos 服务框架 211
) v. a8 [, _, T8 u: w7 K4.5.3 其他常见服务框架 2166 _+ d% q( U! j( }6 W- d+ U$ q& I
4.6 DC/OS 218
% _1 `2 x. z. W0 k; k+ s9 @* h y' K4.6.1 DC/OS 简介 218- E* I: n4 z) z M
4.6.2 部署DC/OS 219. \+ q# ?) a4 B( i6 Q# t* m, K
4.6.3 DC/OS 的操作 228
* T9 c1 f, u$ L2 R. ]4.6.4 DC/OS 命令行工具 2305 j$ i" C* N9 M; Y4 E: Q
4.6.5 DC/OS 的应用仓库 231
& M' {" W) M! y& \# d9 j& [% B4.7 本章小结 234" R; P7 |! C4 f+ r' a; h8 v0 h+ q
第5 章 Rancher 集群解决方案 235
* Y+ h' K. G/ O* p+ b5.1 Rancher 集群概述 235; \( a9 t4 T- Z$ [! @
5.1.1 Rancher 项目的起源 235
- _$ d1 w2 [0 u4 f) u6 _5.1.2 Rancher 的结构 236
4 S- c* S# R a$ e' `2 B3 y. g* Z' g2 _5.1.3 相关概念 237
* y3 D5 v9 x: G; P8 j& E3 |5 `+ N; s# M5.2 构建Rancher 集群 239
: a$ X0 \( r* q5.2.1 部署Server 节点 239
; o; g2 G2 o* S" n6 s# L& N, h5.2.2 Server 节点的高可用部署方式 2404 _/ z- d! @: I% C8 H
5.2.3 添加Agent 节点 241
/ `6 K `% N3 c6 ~3 V5.3 Rancher 的服务管理 243
: d7 ]2 o. f7 l6 p1 [: a( H5.3.1 使用Rancher Web UI 创建服务 243
. t9 Z& s F( V9 y$ O* ~* H1 _5.3.2 从容器 245' t X y/ k6 l- f4 n
5.3.3 特殊类型的服务 247
2 m, k. I$ D) q: N* Z5 }8 U5.3.4 使用应用商店 251
' t+ s" v: x* T7 [3 P5.3.5 服务编排 252
$ F9 ^. o0 q) C$ H: d5.3.6 服务的升级和回滚 254
1 ~! b& K% c \# F+ j5.4 Rancher 使用进阶 2560 H J# \3 B' z
5.4.1 Rancher 的标签 2567 H3 [& h& L& I- Q
5.4.2 调度选项 257+ b7 J4 `+ N, \$ B
5.4.3 服务健康检查 2588 x$ R& e1 c+ P! b. y& I5 Z
5.4.4 Rancher 的元数据服务 2604 R1 O, ^9 `& P# A0 M+ `+ n, x
5.4.5 Rancher 的DNS 服务 262) Y4 o3 r& e4 \& `0 P' [
5.4.6 使用私有镜像仓库 263
' s: B# x% z- X6 \( T0 p% v5.4.7 Rancher 的Secret 服务 264
$ P$ D2 n. u& m8 F) {1 K5.4.8 在应用商店添加自定义应用 265
& I$ r1 M4 A/ p3 r% K' H) Z8 u$ g5.5 Rancher 的命令行工具 268
& T7 ?9 r$ h) r1 U5.5.1 配置Rancher 命令行工具 268
- `" T" q) W( G/ I/ |$ I5.5.2 命令工具的基本使用 270
g$ ^/ i) b5 q5.5.3 通过命令行进行服务编排 273
% y8 R+ o3 Z: A6 Q' M$ U2 U5.5.4 通过命令行进行服务升级 273# N- A$ N8 b/ u# p+ X
5.6 使用Rancher 安装Kubernetes 274
! u! Z ^0 C0 {3 L5.6.1 Rancher 的环境管理 274# w9 x7 P, ]1 \! F+ |3 i# d, n
5.6.2 在Rancher 中添加Kubernetes 环境 276" f! S+ ?( h# p# d& ?
5.6.3 在Rancher 中使用Kubernetes 279
1 q2 I: k+ l* c, k M1 @5.7 本章小结 282
$ P$ Z7 e! o: F$ r5 i# W& H第3 部分 技术周边( N7 M) d! H: s! x+ D5 w1 R
第6 章 容器集群的网络和存储 284
4 b1 U; B- W1 C* G. D6.1 容器网络 284) s9 s0 r, ~6 m& G/ {+ O
6.1.1 容器网络标准 284
2 I; G, L) [4 n# T1 a6.1.2 本地网络 288# l* d2 N. v B3 I' q: X3 q8 ]
6.1.3 跨节点网络 293
8 j! P& }( I4 m) n8 n6.1.4 使用Docker 内置的Overlay 类型网络 3008 d2 n' c: P5 k6 x
6.1.5 构建基于Flannel 的覆盖网络 301
7 R$ Q# b5 N- o/ O' C7 c5 O6.1.6 构建基于Calico 的BGP 路由网络 306 {+ f/ O* \0 M$ K( R5 [+ [
6.2 容器存储 3102 @5 L# m7 s: B
6.2.1 容器实例和镜像的存储 310
4 O1 l- m: w2 d; g7 `+ s5 Z6.2.2 容器卷的存储 312
$ A/ D. N7 M* \2 P6.2.3 容器卷存储标准 3169 `% q# [: T0 ~! @/ ]
6.2.4 基于NFS 的卷存储 317
/ H; I, e9 V- i. ^6.2.5 基于Ceph 的卷存储 320
6 Z2 {, o2 P9 Y0 P0 T5 n2 j6.2.6 使用公有云存储 330
7 S: v% b' n( T6 p9 V6.3 本章小结 332" g% w ~: C: O8 T% u8 G
第7 章 容器服务的基础设施 333
" N, X: r8 c7 Z; H' Q7.1 集群性能监控 333
+ }* @/ d) @1 c2 W/ `7.1.1 常见的开源性能监控方案 333
& ?3 v4 z3 j5 X+ v7.1.2 基于TICK Stack 的性能监控 335" P g, P* \8 F' K( \/ |- y; r
7.1.3 TICK Stack 的部署和使用 336
. {0 x. r5 u2 P8 k* c* f7 t# v7.1.4 基于Prometheus 的性能监控 341
0 E9 E. |1 g8 | V u3 a( M8 f7.1.5 Prometheus 的部署 3430 R' z, r( h- ^# @" [8 F; ~2 p
7.1.6 Prometheus 的使用 353
, n1 @# S0 j6 x1 _7.2 集群日志管理 361
' w/ K9 w- z; d) F7.2.1 常见的开源日志管理方案 361
& Q; k O) u& q5 o3 ]" y$ ^/ t) |0 c7.2.2 基于Elastic Stack 的日志管理 363
% Y1 n! _* X, _1 T u* W; d# i( R7.2.3 基于Fluentd 的日志管理 372
" v+ m( N# r! T! H9 U" L/ A( Y n' D7.3 服务发现 377# B# _# z) Q: T. C) D1 k3 I
7.3.1 常见的服务发现方案 377+ ], @4 O5 J; @% {; n/ o
7.3.2 Etcd 379) c1 S5 x2 J% s/ p" \7 [, V3 n6 S
7.3.3 Consul 3902 S1 W+ E1 I) T5 ^4 T
7.4 镜像仓库 398% \; @% }6 Q& q% t- c9 A5 N
7.4.1 容器镜像仓库概述 398
) w6 H @5 ]1 O- h7.4.2 Registry 399( z# Q. v& _+ e5 V8 M; v! v
7.4.3 Harbor 405% N% b( `, T6 H) T0 f; ~) K" Z
7.5 本章小结 412
* N" K# R0 d8 g" \* l第8 章 容器技术新风向 4132 I# U6 ?! X/ E/ u9 D
8.1 安全的集群操作系统:Container Linux 413, ?1 X- T% j A" w @- q9 T
8.1.1 Container Linux 概述 413
: P1 n- C# S3 Y* F* g( D8.1.2 Container Linux 的部署 416
2 }( x" @: H0 \! Y! U8 c5 I7 s8.1.3 Container Linux 的使用 418
% _" t# C. T# @8 F8.2 基于容器的操作系统:RancherOS 419
# Q9 k' _0 |% x: T8.2.1 RancherOS 概述 419
- C" f5 w: c. g+ g# s% M8.2.2 部署RancherOS 421! N( w+ A! z$ N p9 W
8.2.3 RancherOS 的使用 422
$ b J. f u: g( O8.2.4 使用ros 工具管理系统 424
0 e. ]/ |! r& ~ X8.3 容器式的虚拟机:Hyper 4295 _9 z% V4 U/ R* K! j) l% t: }2 T! _
8.3.1 Hyper 概述 4298 J) s# h2 D! ~$ W
8.3.2 部署Hyper 4308 ]9 Y; A7 I+ r# Q' v
8.3.3 Hyper 的使用 431
+ y+ U, G0 k+ n8.4 虚拟机式的容器:LXD 434
O* l8 H+ ^/ ^) |1 G8 L' x8.4.1 LXD 概述 434
2 d6 h% ?$ i0 g' K/ N' J1 k1 ]8.4.2 LXD 的安装和使用 435
: {6 f) g6 |. A3 F, _8.4.3 服务热迁移 440
, z/ d: J2 a" o) f$ H0 ?( q8.5 容器与虚拟机的统一:Rkt 442
2 J/ P4 [" j2 M8.5.1 Rkt 概述 442 java8.com$ }. D; W! k! K
8.5.2 Rkt 的安装和使用 444' H( y" j* Z* Y' ?% b: d3 P, Z
8.6 企业级定制容器:Pouch450
1 r) R8 X x+ W; z8.6.1 Pouch 概述 450( c4 G+ T& n5 W: W1 V- y+ C0 a/ W
8.6.2 Pouch 的开源生态 453; Z% U: i; `/ K% s( S0 H
8.6.3 体验Pouch 455
9 m0 u" z; Z5 z9 b8.7 微内核操作系统:Unikernel 458- H" B! W4 N, a8 K) N
8.7.1 Unikernel 概述 458
- n: {& I5 {, J. n3 Q- X7 J% U6 }8.7.2 Unikernel 的发展 460' W# o+ Y6 v) j: z
8.7.3 体验Unikernel 462
- I: d% F& z. M) o; K7 x' V8.8 本章小结 465
- M) \/ m/ A* i& D% {* X3 i
* A/ Y+ m0 v# H4 ^* g8 ]; i; f
. a R7 d; c5 m0 ?