本书以Kubernetes 18.6为平台,从容器云概念的理解到原理的验证,再到在企业应用,全面讲述了企业级容器云的实践技术和关键步骤。本书着重介绍了Kubernetes的核心原理知识点、应用迁移验证和Kubernetes企业线上运维实战项目,全书内容体系完整,更加侧重于应用实践与落地,书中配有大量的代码示例,方便读者学习。通过学习本书,读者将逐步扩展初始应用程序、添加特性并加深对Kubernetes架构和操作的了解,还将探索高级的主题,如监控、调优和扩容。无论是Kubernetes初学者还是有一定经验的工程师,相信都能从本书中找到一些解决实际问题的思路和方法。
本书适合系统架构师、开发和测试人员、运维人员阅读,对企业 IT 主管、系统管理员、平台管理员等同样具有参考价值,同时也可作为高等院校云计算及容器技术方向的专业教材。
随着容器技术的发展,容器编排技术应运而生,Kubernetes凭借其在Google内部十多年的发展与优化,一经开源,便得到了广泛的关注。经过激烈的竞争,Kubernetes目前已经成为容器编排领域的实际标准,大多数的企业也都在使用Kubernetes进行企业的容器化改造。但由于Kubernetes中涉及比较多的抽象知识,且Kubernetes应用在企业容器云的改造中还需要考虑很多的问题,比如,如何基于Kubernetes进行持续集成、持续部署,如何对Kubernetes中的应用进行监控与日志收集等。本书针对这些问题,将理论与实践结合,围绕着Kubernetes在生产中的使用,进行说明与演示。
本书共分为6章,既可以从头到尾连续阅读,也可针对疑惑,单独阅读。第1章主要介绍了容器云的趋势,并进行了容器与镜像的操作实战。第2章进行了Kubernetes的搭建实战,并对Kubernetes的架构与组件进行了剖析。第3章阐述了Kubernetes中核心资源对象Pod、Deployment、Service、Ingress、ConifigMap、Volume、StatefulSet的核心原理并针对性地进行应用实战。第4章围绕如何将微服务迁移到Kubernetes中的主题展开,包括如何将应用打造成镜像、如何创建私有镜像仓库,以及如何将应用抽象成Kubernetes中的资源对象等内容。第5章的目标是将Kubernetes上的应用进行持续集成与持续部署,使用Jenkins构建一套成熟的流水线,把应用打包成镜像,并将镜像推送到服务器进行自动化构建,实现企业级的Pipeline的生产模式。第6章的目标是持续化地运维与监控已经部署在Kubernetes中的应用,由此介绍了HPA技术,它可以针对应用的压力情况进行自动扩容与缩容,并对日志系统及监控工具的安装与部署进行了说明。
本书的第2、3、6章由姜秀丽编写,第1、4、5章由胡斌编写。
写书的这段时间,很少能陪伴自己的家人,在此感谢家人的支持与理解。另外,特别感谢机械工业出版社的编辑老师们,本书能够顺利出版,离不开他们的敬业与一丝不苟的精神。
由于编者水平有限,书中难免存在不妥之处,请读者谅解,并提出宝贵意见。
编者
前言
●第1章容器化技术
1.1容器云概述
1.1.1容器技术为什么会火
1.1.2容器云时代是否来临
1.1.3容器云部署演变历程
1.2认识Docker
1.2.1容器云之基石Docker
1.2.2Docker有哪些组件
1.2.3Docker架构
1.2.4Docker安装与启动
1.3镜像的基本操作
1.3.1什么是Docker镜像
1.3.2列出镜像
1.3.3搜索镜像
1.3.4拉取镜像
1.3.5删除镜像
1.4容器的基本操作
1.4.1查看容器
1.4.2创建与启动容器
1.4.3停止与启动容器
1.4.4文件复制
1.4.5目录挂载
1.4.6查看容器IP地址
1.4.7删除容器
1.5Dockerfile
1.5.1什么是Dockerfile
1.5.2常用命令
1.5.3使用脚本创建镜像
1.6容器化部署实例
1.6.1部署Tomcat
1.6.2部署MySQL
1.6.3部署Nginx
1.6.4部署Redis
1.7备份与迁移
1.8本章小结
●第2章容器编排技术Kubernetes
2.1初识Kubernetes
2.1.1Kubernetes概述
2.1.2Kubernetes能做什么
2.2Kubernetes的安装
2.2.1环境准备
2.2.2安装Docker
2.2.3安装kubeadm、kubelet 和
kubectl
2.2.4Master初始化
2.2.5安装网络插件
2.2.6Worker加入集群
2.3Kubernetes集群总览
2.4Worker节点的运行机制
2.5Master节点的运行机制
2.6Pod的创建流程
2.7本章小结
●第3章Kubernetes核心原理与
实践
3.1Pod小调度单位
3.1.1初识Pod
3.1.2Pod的生命周期
3.1.3Metrics-Server采集资源
3.1.4Pod资源配额案例
3.1.5配置liveness probe
3.1.6配置readiness probe
3.2Deployment无状态部署
3.2.1认识Deployment
3.2.2实现滚动升级
3.2.3版本回滚案例
3.3Service服务暴露
3.3.1ClusterIP Service
3.3.2Headless Service
3.3.3NodePort Service
3.3.4ExternalName Service
3.3.5LoadBalancer Service
3.4Ingress服务暴露
3.4.1什么是Ingress
3.4.2安装 Ingress 控制器
3.4.3基于路径区别Service
3.4.4基于域名区别Service
3.5ConfigMap配置
3.5.1创建ConfigMap(基于文件)
3.5.2创建ConfigMap(基于目录)
3.5.3创建ConfigMap(基于字
面值)
3.5.4在Pod中使用ConfigMap(环境
变量)
3.5.5在Pod中使用ConfigMap(数据卷
方式)
3.6Volume存储卷
3.6.1emptyDir
3.6.2hostPath
3.6.3Downward API
3.6.4持久存储卷PV
3.7StatefulSet有状态服务
3.7.1认识StatefulSet
3.7.2稳定的网络标识符
3.7.3固定的持久化存储
3.8本章小结
●第4章应用迁移到Kubernetes
4.1应用镜像整合
4.1.1Docker开启远程访问
4.1.2IDEA安装Docker插件
4.1.3IDEA配置Docker
4.1.4docker-maven-plugin
4.1.5dockerfile
4.2私有镜像仓库
4.2.1Harbor简介
4.2.2Harbor架构
4.2.3安装compose
4.2.4Harbor安装
4.2.5登录Harbor
4.2.6上传镜像
4.3应用的抽象
4.3.1应用服务的结构
4.3.2Dockerfile镜像构建
4.3.3Deployment
4.3.4Service 4层负载
4.3.5Ingress 7层负载
4.3.6HPA动态扩缩容
4.4本章小结
●第5章持续集成与持续部署
5.1持续集成、支付与部署
5.1.1持续集成
5.1.2持续交付
5.1.3持续部署
5.2DevOps的基本概念
5.3DevOps工具链
5.4Jenkins部署实践
5.4.1Jenkins是什么
5.4.2Jenkins安装
5.4.3Jenkins构建
5.4.4Jenkins镜像制作
5.4.5Jenkins-slave
5.5DevOps实践
5.5.1Jenkins私有凭证
5.5.2Harbor凭证
5.5.3Kubernetes凭证
5.5.4Pipeline
5.5.5发布到Kubernetes
5.6本章小结
●第6章基于Kubernetes的线上运维
实战
6.1水平自动伸缩HPA
6.1.1为什么用HPA
6.1.2什么是HPA
6.1.3基于CPU的HPA实践
6.1.4HPA其他特性
6.2可视化工具:Kubernetes
仪表盘
6.2.1安装Kubernetes仪表盘
6.2.2Kubernetes仪表盘之命名
空间
6.2.3Kubernetes仪表盘之监控
资源
6.2.4Kubernetes仪表盘之管理
资源
6.2.5Kubernetes仪表盘总结
6.3应用的日志收集实战
6.3.1Fluentd的安装与配置
6.3.2ElasticSearch的安装
6.3.3Kibana的安装与配置
6.3.4EFK的使用实践
6.4应用的指标监控实战
6.4.1什么是Prometheus
6.4.2Prometheus的安装文件
6.4.3Prometheus的安装配置
6.4.4Prometheus的使用实践
6.5本章小结