多应用与微服务入门

Kubernets章节中介绍了如何构建单应用服务hello-world,对更加复杂服务需要多种应用协同工作(如:网站的前端和后台)该如何处理?本节将介绍如何使用Docker和Kubernetes分别构建多应用服务。

多应用服务

对应相对复杂服务,通常会将服务拆分为功能独立的组件,将每个组件放在单独的容器向外提供服务,这样不仅解决了单体式应用的诸多不足,也使得应用的开发、部署、测试和服务化更加方便。

详细介绍请自行了解:微服务 。

本节使用的多应用服务是Todolist应用,分为前端界面(Todo App)和后端存储(MySQL),架构图下图。前端是node.js实现的静态页面,通过该页面可以管理Todolist的内容,并将结果保存在后端MySQL数据库中。

multi-app

Docker部署Todo-App

注:本节内容的Dockerfile可能会出现过时的情况,如果发现执行错误请参考docker官网的实战教程arrow-up-right修改Dockerfile 此外,本节的容器在安装时可能存在需要代理的情况,如果发现yarn命令出错则可以根据本机的代理端口设置容器内的代理arrow-up-right

构建Todo-App

  1. 获取前端源码

  1. 构建应用镜像

Dockerfile内容:

注意:请自行上传容器 提示:

  1. 验证应用容器

随后访问http://[IP]:3000,观察到如下页面表示应用容器构建成功

docker_build_success

注意:请执行删除相关容器,以免导致端口冲突

运行Start MySQL

  1. 创建应用网络

  1. 启动一个MYSQL容器,将该容器连接到上一步创建的network上面。

  1. 确认mysql容器是否正常运行

连接到mysql之后运行

可以看到todos库:

运行Todo-App

  1. 启动Todo-App,接入MySQL

  1. 用命令docker logs -f <container-id> 查看日志,如果你看到以下内容代表启动成功:

  1. 访问http://[IP]:3000, 在页面中增加todo元素

  2. 验证Todo-App服务是否部署成功

运行命令连接到mysql

运行如下命令查看是否有新增的数据:

确认新添加的todo元素是否在数据库中。

思考:每个容器单独部署非常麻烦,是否有更简便的方案可以同时部署两个应用?

Kubernetes部署Todo-App

  1. 创建namespace

部署MySQL服务

  1. 创建持久卷(pv)

这个 yaml 文件一旦在 kubernetes 中应用,将为MySQL数据库服务Pod提供一个Persistent Volume。PV不依赖于pod的生命周期。这意味着任何时候pod由于崩溃或故障而重新启动,配置的存储都将继续存在。

  1. 创建Persistent Volume Claim(PVC)

  1. 部署MySQL服务

部署Todo-App服务

创建Todo-App的deployment和service

验证应用是否部署成功

  1. 查看所有容器的状态是否为Running

  1. kubectl logs查看日志

  1. 验证服务是否部署成功

请根据Docker部署中验证步骤和以下提示验证服务是否部署成功

  • kubectl port-forward,转发服务端口便于在minikube外部访问Todo-App的web页面

  • kubectl exec,进行pod内部访问对应的应用

提示:

  1. 本章节涉及很多Docker和Kubernetes新内容,请读者自行学习了解。

思考:

  1. 以上两种模式中,网络是如何管理? 不同应用间是如何通信的?

  2. 请对比两种部署模式的异同

  3. 那种部署模式更有优势?为什么?

Last updated