出版说明
前言
第1章 云原生架构1
1.1 云计算的演化1
1.2 什么是云原生3
1.3 云原生基础架构4
1.4 云原生应用5
1.4.1 微服务5
1.4.2 健康状况报告6
1.4.3 自动测量数据7
1.4.4 弹性处理故障7
1.4.5 声明式通信8
1.5 十二要素应用8
1.6 实现云原生模式12
1.7 何时采用云原生12
1.8 云设计模式13
1.9 服务网格(Service Mesh)15
1.10 云原生的未来16
第2章 Kubernetes核心对象17
2.1 Kubernetes架构17
2.1.1 节点18
2.1.2 Master节点18
2.1.3 Docker镜像库19
2.2 命名空间19
2.3 Pod20
2.3.1 创建Pod20
2.3.2 Pod 内部多个容器21
2.3.3 初始化容器21
2.3.4 状态探针22
2.3.5 测试工具23
2.4 部署24
2.4.1 ReplicaSet24
2.4.2 部署26
2.4.3 有状态部署28
2.4.4 DaemonSet30
2.5 服务30
2.5.1 关于服务30
2.5.2 Ingress32
2.6 存储35
2.6.1 存储类型35
2.6.2 使用subPath37
2.7 RBAC38
2.7.1 角色和集群角色38
2.7.2 角色绑定和集群角色绑定38
第3章 敏捷基础架构40
3.1 部署本地Repository40
3.1.1 准备CentOS41
3.1.2 部署nginx和sonatype/nexus343
3.1.3 配置Nexus46
3.1.4 创建并使用NPM Registry47
3.1.5 创建并使用 Docker Repository49
3.1.6 创建Maven2 Local Repository52
3.1.7 总结54
3.2 部署Kubernetes54
3.2.1 环境准备54
3.2.2 安装Docker CE56
3.2.3 安装kube工具58
3.2.4 构建Master节点58
3.2.5 在客户端设置环境59
3.2.6 部署Flannel网络59
3.2.7 加入工作节点59
3.2.8 部署Dashboard60
3.3 MetalLB62
3.3.1 安装MetalLB63
3.3.2 配置IP地址池63
3.3.3 使用MetalLB64
3.3.4 流量策略65
3.3.5 IP共享65
3.4 部署GlusterFS66
3.4.1 卷类型66
3.4.2 GlusterFS部署方法69
3.4.3 GlusterFS要求69
3.4.4 创建磁盘分区69
3.4.5 安装软件70
3.4.6 配置防火墙71
3.4.7 配置信任池72
3.4.8 创建GlusterFS卷72
3.4.9 GlusterFS卷安全73
3.4.10 GlusterFS快照73
3.4.11 vSAN与GlusterFS的比较73
3.5 使用GlusterFS卷74
3.5.1 静态卷的使用74
3.5.2 动态卷的使用77
3.6 使用NFS卷83
3.6.1 前提条件83
3.6.2 授权83
3.6.3 创建 provisioner 和 StorageClass85
3.6.4 测试87
3.7 升级Kubernetes88
3.7.1 升级Master节点89
3.7.2 升级工作节点89
3.7.3 查看升级结果90
第4章 DevOps实战91
4.1 DevOps简介91
4.1.1 DevOps流程91
4.1.2 云原生下的DevOps92
4.2 软件部署策略93
4.2.1 实践准备93
4.2.2 重建部署(Recreate)95
4.2.3 滚动部署(RollUpdate)96
4.2.4 蓝绿部署(Blue/Green)98
4.2.5 金丝雀部署(Canary)100
4.2.6 A/B测试102
4.2.7 影子部署105
4.2.8 总结107
4.3 部署GitLab107
4.3.1 GitLab 简介107
4.3.2 在CentOS 7.x中部署GitLab108
4.3.3 使用Docker部署GitLab109
4.3.4 在Kubernetes集群中运行GitLab110
4.3.5 GitLab Runner111
4.4 GitLab 集成自动CI/CD112
4.4.1 GitLab自动CI/CD113
4.4.2 .gitlab-ci.yml114
4.4.3 变量注册115
4.5 容器部署模式116
4.5.1 什么是sidecar模式117
4.5.2 sidecar模式的优势117
4.5.3 sidecar模式的适用场景118
4.5.4 采用sidecar模式的事例118
第5章 日志记录119
5.1 模式119
5.1.1 伴生模式119
5.1.2 DaemonSet模式120
5.2 日志采集120
5.2.1 具有日志代理功能的伴生容器120
5.2.2 DaemonSet模式下配置Fluentd123
5.3 部署Elasticsearch126
5.3.1 Elasticsearch简介126
5.3.2 在Docker Swarm中部署Elasticsearch127
5.3.3 在Kubernetes上创建Elasticsearch集群128
5.4 部署Kibana139
5.4.1 在Docker中部署Kibana139
5.4.2 在Kubernetes上部署Kibana应用143
5.5 部署fluentd作为syslog server145
5.5.1 创建 fluentd 服务145
5.5.2 创建 fluentd 应用146
5.5.3 测试148
第6章 云原生下的监控149
6.1 Prometheus简介149
6.1.1 Prometheus 组成及架构150
6.1.2 使用Prometheus的场景150
6.1.3 Prometheus 相关概念151
6.2 使用Exporter采集数据153
6.2.1 常用Exporter153
6.2.2 Exporter的运行方式154
6.2.3 Node Exporter154
6.2.4 容器监控cAdvisor155
6.2.5 黑盒监控Blackbox Exporter159
6.3 在Kubernetes中部署Prometheus161
6.3.1 创建RBAC文件161
6.3.2 创建服务162
6.3.3 创建配置文件163
6.3.4 部署Prometheus167
6.4 部署 Blackbox exporter169
6.4.1 Blackbox exporter配置文件169
6.4.2 Blackbox exporter部署文件170
6.5 Node exporter172
6.5.1 创建node exporter服务172
6.5.2 创建Node exporter DaemonSet172
6.6 Grafana174
6.7 在Kubernetes中部署Grafana176
6.7.1 创建持久卷声明176
6.7.2 部署Grafana176
6.7.3 grafana配置文件178
6.7.4 创建Service178
6.8 案例:监控Dr