正常一个 web 项目通常会涉及多个组件,分为前端,后端,数据库等。不同组件可能是跨语言的(python, golang,java 等),组件之间会有各种依赖和调用。下面我们以 istio 项目中的bookinfo (opens new window) 为例,展示如何在AHS中部署。

# 前提条件

  1. 需要登录 LStack 应用托管服务 (opens new window)
  2. 若当前用户是子账号,请先在 IAM 访问控制中心 (opens new window) 进行授权,权限:LstackAHSFullAccess。
  3. 应用托管服务 已创建好环境

tips: 建议使用主账号 或 平台管理员 或 系统管理员 操作,可免去权限限制。

# 背景信息

bookinfo 项目架构

image-20210728142348714

开始之前,先简单介绍一下 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,可进入应用详情。

# 创建应用编排

  1. 点击应用 ID>应用编排

  2. 拖拽普通组件 server。

  3. 填写基本配置:

    • 组件名称: productpage
    • 实例数:1
  4. 容器 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

最终编排效果:

img.png

# 部署应用

1.应用编排完成保存后,返回应用编排页面,点击 v1 版本的操作按钮部署

2.部署应用后,可以在拓扑图中观察组件启动过程,未能正常运行的组件显示红色,正常运行的组件显示黑色。

img.png

# 创建网关

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 的服务端口

img.png

3.点击创建

# 访问效果

在路由管理查询列表中复制访问端口(IP Port),粘贴到浏览器访问。效果如下:

image-20210607164655554

点击 Normal User 出现如下界面:

image-20210607164736667

# 服务运维

# 组件调试

每次部署后,结果不一定会如我们期望的那样。可能因为资源原因应用的部分组件没有起来,或者由于参数设置错误,导致程序错误。这时候我们可以通过拓扑图进行调试。

  • 组件拓扑概览:通过拓扑图下面的组件列表,我们可观察到组件运行时长,当前运行实例数目,以及资源申请情况。

  • web shell:如果遇到访问故障,我们通常需要进入容器中执行 curl 或者其他排查命令。点击组件名称>实例列表>操作>shell,我们就可以进入容器内。

img.png

  • 事件查询:当组件由于 kubernetes 的原因导致异常启停或无法调度,这时候点击组件名称>事件查询,通过分析事件信息,我们就可以得出具体原因。

img.png

# 查询日志

1.点击应用管理>应用列表>应用名称>日志中心

2.查看容器实时日志/持久化日志。

# 组件资源监控

1.点击应用管理>应用列表>应用名称>监控

2.查看普通组件常用指标监控。

img.png