多应用与微服务入门
在Kubernets章节中介绍了如何构建单应用服务hello-world,对更加复杂服务需要多种应用协同工作(如:网站的前端和后台)该如何处理?本节将介绍如何使用Docker和Kubernetes分别构建多应用服务。
多应用服务
对应相对复杂服务,通常会将服务拆分为功能独立的组件,将每个组件放在单独的容器向外提供服务,这样不仅解决了单体式应用的诸多不足,也使得应用的开发、部署、测试和服务化更加方便。
详细介绍请自行了解:微服务 。
本节使用的多应用服务是Todolist应用,分为前端界面(Todo App)和后端存储(MySQL),架构图下图。前端是node.js实现的静态页面,通过该页面可以管理Todolist的内容,并将结果保存在后端MySQL数据库中。

Docker部署Todo-App
注:本节内容的Dockerfile可能会出现过时的情况,如果发现执行错误请参考docker官网的实战教程修改Dockerfile 此外,本节的容器在安装时可能存在需要代理的情况,如果发现yarn命令出错则可以根据本机的代理端口设置容器内的代理
构建Todo-App
获取前端源码
构建应用镜像
Dockerfile内容:
注意:请自行上传容器 提示:
验证应用容器
随后访问http://[IP]:3000,观察到如下页面表示应用容器构建成功

注意:请执行删除相关容器,以免导致端口冲突
运行Start MySQL
创建应用网络
启动一个MYSQL容器,将该容器连接到上一步创建的
network上面。
确认
mysql容器是否正常运行
连接到mysql之后运行
可以看到todos库:
运行Todo-App
启动Todo-App,接入MySQL
用命令
docker logs -f <container-id>查看日志,如果你看到以下内容代表启动成功:
访问http://[IP]:3000, 在页面中增加todo元素
验证Todo-App服务是否部署成功
运行命令连接到mysql
运行如下命令查看是否有新增的数据:
确认新添加的todo元素是否在数据库中。
思考:每个容器单独部署非常麻烦,是否有更简便的方案可以同时部署两个应用?
Kubernetes部署Todo-App
创建namespace
部署MySQL服务
创建持久卷(pv)
这个 yaml 文件一旦在 kubernetes 中应用,将为MySQL数据库服务Pod提供一个Persistent Volume。PV不依赖于pod的生命周期。这意味着任何时候pod由于崩溃或故障而重新启动,配置的存储都将继续存在。
创建Persistent Volume Claim(PVC)
部署MySQL服务
部署Todo-App服务
创建Todo-App的deployment和service
验证应用是否部署成功
查看所有容器的状态是否为
Running
kubectl logs查看日志
验证服务是否部署成功
请根据Docker部署中验证步骤和以下提示验证服务是否部署成功
kubectl port-forward,转发服务端口便于在minikube外部访问Todo-App的web页面
kubectl exec,进行pod内部访问对应的应用
提示:
本章节涉及很多Docker和Kubernetes新内容,请读者自行学习了解。
思考:
以上两种模式中,网络是如何管理? 不同应用间是如何通信的?
请对比两种部署模式的异同
那种部署模式更有优势?为什么?
Last updated