构建微服务应用
正常一个 web 项目通常会涉及多个组件,分为前端,后端,数据库等。不同组件可能是跨语言的(python, golang,java 等),组件之间会有各种依赖和调用。下面我们以 istio 项目中的bookinfo (opens new window) 为例,展示如何在AHS中部署。
# 前提条件
- 需要登录 LStack 应用托管服务 (opens new window) 。
- 若当前用户是子账号,请先在 IAM 访问控制中心 (opens new window) 进行授权,权限:LstackAHSFullAccess。
- 在应用托管服务 已创建好环境。
tips: 建议使用主账号 或 平台管理员 或 系统管理员 操作,可免去权限限制。
# 背景信息
bookinfo 项目架构
开始之前,先简单介绍一下 Bookinfo 示例微服务应用的架构,该应用分为四个单独的微服务:
- productpage :productpage 微服务会调用 details 和 reviews 两个微服务,用来生成页面。
- details :这个微服务包含了书籍的信息。
- reviews :这个微服务包含了书籍相关的评论,它还会调用 ratings 微服务。
- ratings :ratings 微服务中包含了由书籍评价组成的评级信息,通过环境变量控制评级信息是否从数据库获取。
reviews 微服务有 3 个版本(由于这里不涉及灰度发布,所以本实践只使用 v1):
- v1 版本不会调用 ratings 服务,因此在界面不会显示星形图标。
- v2 版本会调用 ratings 服务,并使用 1 到 5 个黑色星形图标来显示评分信息。
- v3 版本会调用 ratings 服务,并使用 1 到 5 个红色星形图标来显示评分信息。
# 操作步骤
# 创建应用
1.创建应用,点击应用列表>创建应用。
2.选择环境。
3.输入应用名称。
4.输入应用描述。
5.点击创建。
点击应用 ID,可进入应用详情。
# 创建应用编排
点击应用 ID>应用编排。
拖拽普通组件 server。
填写基本配置:
- 组件名称: productpage
- 实例数:1
容器 0:
镜像:有 3 个镜像来源(DockerHub,集群关联 Hub,其他),这里选择其他
镜像名称:docker.io/istio/examples-bookinfo-productpage-v1
版本:1.16.2
高级配置:
- 环境变量:
REVIEWS_HOSTNAME:reviews DETAILS_HOSTNAME:details RATINGS_HOSTNAME:ratings
端口: 9080
上面是创建组件productpage的例子,其他组件创建方式类似。下面表格已经列出所有组件创建的必要参数,请参照上面的例子完成其他组件的创建。
组件名称 | 镜像 | 版本 | 环境变量 | 端口 |
---|---|---|---|---|
productpage | docker.io/istio/examples-bookinfo-productpage-v1 | 1.16.2 | REVIEWS_HOSTNAME: reviews DETAILS_HOSTNAME: details RATINGS_HOSTNAME: ratings | 9080 |
reviews | docker.io/istio/examples-bookinfo-reviews-v1 | 1.16.2 | RATINGS_HOSTNAME: ratings | 9080 |
ratings | docker.io/istio/examples-bookinfo-ratings-v1 | 1.16.2 | MYSQL_DB_HOST: mysql MYSQL_DB_PORT: 3306 MYSQL_DB_USER: root DB_TYPE: mysql SERVICE_VERSION: v1 MYSQL_DB_PASSWORD: password | 9080 |
details | docker.io/istio/examples-bookinfo-details-v1 | 1.16.2 | 9080 | |
mysql | docker.io/istio/examples-bookinfo-mysqldb | 1.16.2 | MYSQL_ROOT_PASSWORD: password | 3306 |
最终编排效果:
# 部署应用
1.应用编排完成保存后,返回应用编排页面,点击 v1 版本的操作按钮部署。
2.部署应用后,可以在拓扑图中观察组件启动过程,未能正常运行的组件显示红色,正常运行的组件显示黑色。
# 创建网关
1.在左侧导航栏点击网关>网关管理>添加网关。
2.填写参数。
基本参数
参数名称 | 值 | 说明 |
---|---|---|
名称 | demo | 网关名称,名称由字母和数字组成,且字数应该在 2-20 个之间 |
实例数 | 1 | 网关运行的副本数量 |
集群 | xxx | 选择 AHS 中导入的集群 |
环境 | xxx | 选择 AHS 中已创建的环境,网关可以被某个环境独享,也可以被多个环境共享 |
访问地址 选项一:集群节点 IP
参数名称 | 值 | 说明 |
---|---|---|
访问地址 | 仅仅集群节点 IP | 对于私有云可以通过 k8s 的节点 IP 暴露网关服务 |
集群节点 IP | 填写或选中下拉框中的 IP | 没有公网 IP 地址的集群,需要在私网环境下测试网关服务 |
访问地址 选项二:负载均衡
参数名称 | 值 | 说明 |
---|---|---|
访问地址 | 请选择已有负载均衡 | 在公有云上创建的集群,可以通过 SLB+k8s 的 LoadBalancer 暴露网关 |
负载均衡 | 下拉框中选择 | 需要先在【云服务商目录】中创建好 SLB,如果要从公网访问,该 SLB 必须绑定公网 IP |
3.如果未能查询到空闲 slb,则点击跳转至云服务商目录创建。
4.点击确定。
# 创建路由
1.在左侧导航栏点击网关>路由管理>创建路由。
2.填写参数。
基本配置:
参数名称 | 值 | 说明 |
---|---|---|
名称 | bookinfo | 路由名称,名称由字母和数字组成,且字数应该在 2-20 个之间 |
环境 | xxx | 选择要访问的应用所部署的环境 |
协议 | HTTP | 枚举类型:支持 HTTP,HTTPS,TCP |
域名 | bookinfo.demo | 要访问的应用对应的域名 |
子配置:
参数名称 | 值 | 说明 |
---|---|---|
应用 | bookinfo | 从上面填写的环境 xxx 中选择已部署的应用 |
组件 | productpage | 从 demo 应用中选择组件名称 |
路径 | / | |
端口 | 9080 | productpage 的服务端口 |
3.点击创建。
# 访问效果
在路由管理查询列表中复制访问端口(IP Port),粘贴到浏览器访问。效果如下:
点击 Normal User 出现如下界面:
# 服务运维
# 组件调试
每次部署后,结果不一定会如我们期望的那样。可能因为资源原因应用的部分组件没有起来,或者由于参数设置错误,导致程序错误。这时候我们可以通过拓扑图进行调试。
- 组件拓扑概览:通过拓扑图下面的组件列表,我们可观察到组件运行时长,当前运行实例数目,以及资源申请情况。
- web shell:如果遇到访问故障,我们通常需要进入容器中执行 curl 或者其他排查命令。点击组件名称>实例列表>操作>shell,我们就可以进入容器内。
- 事件查询:当组件由于 kubernetes 的原因导致异常启停或无法调度,这时候点击组件名称>事件查询,通过分析事件信息,我们就可以得出具体原因。
# 查询日志
1.点击应用管理>应用列表>应用名称>日志中心。
2.查看容器实时日志/持久化日志。
# 组件资源监控
1.点击应用管理>应用列表>应用名称>监控。
2.查看普通组件常用指标监控。
上一篇: 路由管理 服务简介