![]()
作者简介 "龚正 / HPE不错顾问,拥有近20年IT从业经历,在云计算、大数据、大型企业级应用等领域拥有丰富的咨询规划、架构设计和实施经验,负责过多个大型云平台的规划和建设,是电信、金融、互联网等领域的资深专家,也是《Kubernetes非常不错指南:企业级容器云实战》等书作者。 吴治辉 / HPE资深架构师,拥有近20年软件研发经验,专注于电信软件和云计算方面的软件研发,拥有丰富的大型项目架构设计经验,是业界少有的具备很强Coding能力的资深架构师,也是《ZeroC Ice非常不错指南》《架构解密:从分布式到微服务》《Kubernetes非常不错指南:企业级容器云实战》《区块链轻松上手》等书作者。 崔秀龙 / Istio、Kubernetes项目成员;Istio.io主要贡献者之一;《Kubernetes非常不错指南:企业级容器云实战》《深入浅出Istio:Service Mesh快速入门与实践》等书作者;自动化、马拉松爱好者。 闫健勇 / HPE不错项目经理、总架构师,拥有近20年电信行业系统建设经验,了多项电信大型系统的架构设计和管理,对于云计算和大数据在电信行业中的应用拥有丰富的经验,也是《Kubernetes非常不错指南:企业级容器云实战》等书作者。 " 目录 章 Kubernetes入门\t1 1.1 Kubernetes是什么\t2 1.2 为什么要用Kubernetes\t5 1.3 从一个简单的例子开始\t6 1.3.1 环境准备\t7 1.3.2 启动MySQL服务\t7 1.3.3 启动Tomcat应用\t10 1.3.4 通过浏览器访问网页\t12 1.4 Kubernetes的基本概念和术语\t13 1.4.1 Master\t16 1.4.2 Node\t16 1.4.3 Pod\t19 1.4.4 Label\t24 1.4.5 Replication Controller\t28 1.4.6 Deployment\t31 1.4.7 Horizontal Pod Autoscaler\t34 1.4.8 StatefulSet\t36 1.4.9 Service\t37 1.4.10 Job\t45 1.4.11 Volume\t45 1.4.12 Persistent Volume\t49 1.4.13 Namespace\t51 1.4.14 Annotation\t52 1.4.15 ConfigMap\t53 1.4.16 小结\t54 第2章 Kubernetes安装配置指南\t55 2.1 系统要求\t56 2.2 使用kubeadm工具快速安装Kubernetes集群\t57 2.2.1 安装kubeadm和相关工具\t57 2.2.2 kubeadm config\t58 2.2.3 下载Kubernetes的相关镜像\t59 2.2.4 运行kubeadm init命令安装Master\t59 2.2.5 安装Node,加入集群\t61 2.2.6 安装网络插件\t62 2.2.7 验证Kubernetes集群是否安装完成\t63 2.3 以二进制文件方式安装Kubernetes集群\t64 2.3.1 Master上的etcd、kube-apiserver、kube-controller-manager、kube-scheduler服务\t66 2.3.2 Node上的kubelet、kube-proxy服务\t71 2.4 Kubernetes集群的安全设置\t73 2.4.1 基于CA签名的双向数字证书认证方式\t73 2.4.2 基于HTTP Base或Token的简单认证方式\t78 2.5 Kubernetes集群的网络配置\t80 2.6 内网中的Kubernetes相关配置\t80 2.6.1 Docker Private Registry(私有Docker镜像库)\t80 2.6.2 kubelet配置\t81 2.7 Kubernetes的版本升级\t81 2.7.1 二进制升级\t81 2.7.2 使用kubeadm进行集群升级\t82 2.8 Kubernetes核心服务配置详解\t84 2.8.1 公共配置参数\t84 2.8.2 kube-apiserver启动参数\t85 2.8.3 kube-controller-manager启动参数\t97 2.8.4 kube-scheduler启动参数\t107 2.8.5 kubelet启动参数\t113 2.8.6 kube-proxy启动参数\t128 2.9 CRI(容器运行时接口)详解\t132 2.9.1 CRI概述\t132 2.9.2 CRI的主要组件\t133 2.9.3 Pod和容器的生命周期管理\t133 2.9.4 面向容器级别的设计思路\t135 2.9.5 尝试使用新的Docker-CRI来创建容器\t136 2.9.6 CRI的进展\t137 2.10 kubectl命令行工具用法详解\t137 2.10.1 kubectl用法概述\t137 2.10.2 kubectl子命令详解\t139 2.10.3 kubectl参数列表\t142 2.10.4 kubectl输出格式\t143 2.10.5 kubectl操作示例\t145 第3章 深入掌握Pod\t149 3.1 Pod定义详解\t150 3.2 Pod的基本用法\t156 3.3 静态Pod\t161 3.4 Pod容器共享Volume\t162 3.5 Pod的配置管理\t165 3.5.1 ConfigMap概述\t165 3.5.2 创建ConfigMap资源对象\t165 3.5.3 在Pod中使用ConfigMap\t173 3.5.4 使用ConfigMap的限制条件\t179 3.6 在容器内获取Pod信息(Downward API)\t180 3.6.1 环境变量方式:将Pod信息注入为环境变量\t180 3.6.2 环境变量方式:将容器资源信息注入为环境变量\t182 3.6.3 Volume挂载方式\t184 3.7 Pod生命周期和重启策略\t186 3.8 Pod健康检查和服务可用性检查\t187 3.9 玩转Pod调度\t190 3.9.1 Deployment或RC:全自动调度\t193 3.9.2 NodeSelector:定向调度\t194 3.9.3 NodeAffinity:Node亲和性调度\t197 3.9.4 PodAffinity:Pod亲和与互斥调度策略\t198 3.9.5 Taints和Tolerations(污点和容忍)\t202 3.9.6 Pod Priority Preemption:Pod优先级调度\t206 3.9.7 DaemonSet:在每个Node上都调度一个Pod\t209 3.9.8 Job:批处理调度\t211 3.9.9 Cronjob:定时任务\t215 3.9.10 自定义调度器\t219 3.10 Init Container(初始化容器)\t220 3.11 Pod的升级和回滚\t224 3.11.1 Deployment的升级\t225 3.11.2 Deployment的回滚\t231 3.11.3 暂停和恢复Deployment的部署操作,以完成复杂的修改\t234 3.11.4 使用kubectl rolling-update命令完成RC的滚动升级\t236 3.11.5 其他管理对象的更新策略\t239 3.12 Pod的扩缩容\t240 3.12.1 手动扩缩容机制\t240 3.12.2 自动扩缩容机制\t241 3.13 使用StatefulSet搭建MongoDB集群\t264 3.13.1 前提条件\t264 3.13.2 创建StatefulSet\t265 3.13.3 查看MongoDB集群的状态\t269 3.13.4 StatefulSet的常见应用场景\t271 第4章 深入掌握Service\t276 4.1 Service定义详解\t277 4.2 Service的基本用法\t279 4.2.1 多端口Service\t282 4.2.2 外部服务Service\t283 4.3 Headless Service\t284 4.3.1 自定义SeedProvider\t285 4.3.2 通过Service动态查找Pod\t286 4.3.3 Cassandra集群中新节点的自动添加\t289 4.4 从集群外部访问Pod或Service\t291 4.4.1 将容器应用的端口号映射到物理机\t291 4.4.2 将Service的端口号映射到物理机\t292 4.5 DNS服务搭建和配置指南\t294 4.5.1 在创建DNS服务之前修改每个Node上kubelet的启动参数\t296 4.5.2 创建CoreDNS应用\t297 4.5.3 服务名的DNS解析\t301 4.5.4 CoreDNS的配置说明\t302 4.5.5 Pod级别的DNS配置说明\t304 4.6 Ingress:HTTP 7层路由机制\t306 4.6.1 创建Ingress Controller和默认的backend服务\t307 4.6.2 定义Ingress策略\t311 4.6.3 客户端访问http://mywebsite.com/demo\t313 4.6.4 Ingress的策略配置技巧\t316 4.6.5 Ingress的TLS安全设置\t320 第5章 核心组件运行机制\t326 5.1 Kubernetes API Server原理解析\t327 5.1.1 Kubernetes API Server概述\t327 5.1.2 API Server架构解析\t330 5.1.3 独特的Kubernetes Proxy API接口\t334 5.1.4 集群功能模块之间的通信\t336 5.2 Controller Manager原理解析\t337 5.2.1 Replication Controller\t338 5.2.2 Node Controller\t339 5.2.3 ResourceQuota Controller\t341 5.2.4 Namespace Controller\t343 5.2.5 Service Controller与Endpoints Controller\t343 5.3 Scheduler原理解析\t344 5.4 kubelet运行机制解析\t348 5.4.1 节点管理\t349 5.4.2 Pod管理\t349 5.4.3 容器健康检查\t351 5.4.4 cAdvisor资源监控\t352 5.5 kube-proxy运行机制解析\t354 第6章 深入分析集群安全机制\t358 6.1 API Server认证管理\t359 6.2 API Server授权管理\t361 6.2.1 ABAC授权模式详解\t362 6.2.2 Webhook授权模式详解\t365 6.2.3 RBAC授权模式详解\t368 6.3 Admission Control\t384 6.4 Service Account\t388 6.5 Secret私密凭据\t393 6.6 Pod的安全策略配置\t396 6.6.1 PodSecurityPolicy的工作机制\t397 6.6.2 PodSecurityPolicy配置详解\t399 6.6.3 Pod的安全设置详解\t406 第7章 网络原理\t410 7.1 Kubernetes网络模型\t411 7.2 Docker网络基础\t413 7.2.1 网络命名空间\t413 7.2.2 Veth设备对\t416 7.2.3 网桥\t419 7.2.4 iptables和Netfilter\t421 7.2.5 路由\t424 7.3 Docker的网络实现\t426 7.4 Kubernetes的网络实现\t435 7.4.1 容器到容器的通信\t435 7.4.2 Pod之间的通信\t436 7.5 Pod和Service网络实战\t439 7.6 CNI网络模型\t454 7.6.1 CNM模型\t454 7.6.2 CNI模型\t455 7.6.3 在Kubernetes中使用网络插件\t467 7.7 Kubernetes网络策略\t467 7.7.1 网络策略配置说明\t468 7.7.2 在Namespace级别设置默认的网络策略\t470 7.7.3 NetworkPolicy的发展\t472 7.8 开源的网络组件\t472 7.8.1 Flannel\t472 7.8.2 Open vSwitch\t477 7.8.3 直接路由\t483 7.8.4 Calico容器网络和网络策略实战\t486 第8章 共享存储原理\t508 8.1 共享存储机制概述\t509 8.2 PV详解\t510 8.2.1 PV的关键配置参数\t511 8.2.2 PV生命周期的各个阶段\t515 8.3 PVC详解\t516 8.4 PV和PVC的生命周期\t518 8.4.1 资源供应\t518 8.4.2 资源绑定\t519 8.4.3 资源使用\t519 8.4.4 资源释放\t519 8.4.5 资源回收\t519 8.5 StorageClass详解\t521 8.5.1 StorageClass的关键配置参数\t521 8.5.2 设置默认的StorageClass\t524 8.6 动态存储管理实战:GlusterFS\t524 8.6.1 准备工作\t525 8.6.2 创建GlusterFS管理服务容器集群\t525 8.6.3 创建Heketi服务\t528 8.6.4 为Heketi设置GlusterFS集群\t530 8.6.5 定义StorageClass\t533 8.6.6 定义PVC\t534 8.6.7 Pod使用PVC的存储资源\t536 8.7 CSI存储机制详解\t537 8.7.1 CSI的设计背景\t538 8.7.2 CSI存储插件的关键组件和部署架构\t539 8.7.3 CSI存储插件的使用示例\t540 8.7.4 CSI的发展\t556 第9章 Kubernetes开发指南\t560 9.1 REST简述\t561 9.2 Kubernetes API详解\t563 9.2.1 Kubernetes API概述\t563 9.2.2 Kubernetes API版本的演进策略\t570 9.2.3 API Groups(API组)\t571 9.2.4 API REST的方法说明\t573 9.2.5 API Server响应说明\t575 9.3 使用Java程序访问Kubernetes API\t577 9.3.1 Jersey\t577 9.3.2 Fabric8\t590 9.3.3 使用说明\t591 9.3.4 其他客户端库\t615 9.4 Kubernetes API的扩展\t616 9.4.1 使用CRD扩展API资源\t617 9.4.2 使用API聚合机制扩展API资源\t626 0章 Kubernetes集群管理\t635 10.1 Node的管理\t636 10.1.1 Node的隔离与恢复\t636 10.1.2 Node的扩容\t637 10.2 更新资源对象的Label\t638 10.3 Namespace:集群环境共享与隔离\t639 10.3.1 创建Namespace\t639 10.3.2 定义Context(运行环境)\t640 10.3.3 设置工作组在特定Context环境下工作\t641 10.4 Kubernetes资源管理\t643 10.4.1 计算资源管理\t645 10.4.2 资源配置范围管理(LimitRange)\t655 10.4.3 资源服务质量管理(Resource QoS)\t662 10.4.4 资源配额管理(Resource Quotas)\t670 10.4.5 ResourceQuota和LimitRange实践\t676 10.4.6 资源管理总结\t685 10.5 资源紧缺时的Pod驱逐机制\t686 10.5.1 驱逐策略\t686 10.5.2 驱逐信号\t686 10.5.3 驱逐阈值\t688 10.5.4 驱逐监控频率\t689 10.5.5 节点的状况\t689 10.5.6 节点状况的抖动\t690 10.5.7 回收Node级别的资源\t690 10.5.8 驱逐用户的Pod\t691 10.5.9 资源最少回收量\t692 10.5.10 节点资源紧缺情况下的系统行为\t692 10.5.11 可调度的资源和驱逐策略实践\t694 10.5.12 现阶段的问题\t694 10.6 Pod Disruption Budget(主动驱逐保护)\t695 10.7 Kubernetes集群的高可用部署方案\t697 10.7.1 手工方式的高可用部署方案\t698 10.7.2 使用kubeadm的高可用部署方案\t709 10.8 Kubernetes集群监控\t717 10.8.1 通过Metrics Server监控Pod和Node的CPU和内存资源使用数据\t717 10.8.2 Prometheus+Grafana集群性能监控平台搭建\t720 10.9 集群统一日志管理\t732 10.9.1 系统部署架构\t733 10.9.2 创建Elasticsearch RC和Service\t733 10.9.3 在每个Node上启动Fluentd\t736 10.9.4 运行Kibana\t738 10.10 Kubernetes的审计机制\t742 10.11 使用Web UI(Dashboard)管理集群\t746 10.12 Helm:Kubernetes应用包管理工具\t750 10.12.1 Helm概述\t750 10.12.2 Helm的主要概念\t751 10.12.3 安装Helm\t751 10.12.4 Helm的常见用法\t752 10.12.5 --set的格式和限制\t756 10.12.6 更多的安装方法\t757 10.12.7 helm upgrade和helm rollback:应用的更新或回滚\t757 10.12.8 helm install/upgrade/rollback命令的常用参数\t758 10.12.9 helm delete:删除一个Release\t759 10.12.10 helm repo:仓库的使用\t759 10.12.11 自定义Chart\t759 10.12.12 对Chart目录结构和配置文件的说明\t759 10.12.13 对Chart.yaml文件的说明\t760 10.12.14 快速制作自定义的Chart\t761 10.12.15 搭建私有Repository\t761 1章 Trouble Shooting指导\t763 11.1 查看系统Event\t764 11.2 查看容器日志\t766 11.3 查看Kubernetes服务日志\t767 11.4 常见问题\t769 11.4.1 由于无法下载pause镜像导致Pod一直处于Pending状态\t769 11.4.2 Pod创建成功,但RESTARTS数量持续增加\t771 11.4.3 通过服务名无法访问服务\t772 11.5 寻求帮助\t773 2章 Kubernetes开发中的新功能\t777 12.1 对Windows容器的支持\t778 12.1.1 Windows Node部署\t778 12.1.2 Windows容器支持的Kubernetes特性和发展趋势\t790 12.2 对GPU的支持\t791 12.2.1 环境准备\t792 12.2.2 在容器中使用GPU资源\t795 12.2.3 发展趋势\t797 12.3 Pod的垂直扩缩容\t797 12.3.1 前提条件\t798 12.3.2 安装Vertical Pod Autoscaler\t798 12.3.3 为Pod设置垂直扩缩容\t798 12.3.4 注意事项\t800 12.4 Kubernetes的演进路线和开发模式\t801 内容推荐 Kubernetes是由谷歌开源的Docker容器集群管理系统,为容器化的应用提供了资源调度、部署运行、服务发现、扩容及缩容等一整套功能。《Kubernetes权威指南:从Docker到Kubernetes实践全接触(纪念版)》从架构师、开发人员和运维人员的角度,阐述了Kubernetes的基本概念、实践指 |