作者 | 元毅 阿里云智能事业群高级开发工程师

在 Istio 中提供了一个 Bookinfo 的示例,用于演示微服务之间的调用,那么如何在 Knative 中部署这个示例呢?本文将会给大家介绍一下在 Knative 中部署 Bookinfo 微服务以及查看调用链追踪信息。

背景

Bookinfo 这个示例应用由 4 个微服务组成。 Bookinfo 应用架构图如下:

  • productpage 微服务: 调用 details 微服务和 reviews 微服务来生成页面
  • details 微服务: 包含图书的详细信息
  • reviews 微服务: 提供图书的评论功能,也可以调用 rating 微服务给图书评分
  • ratings 微服务: 提供图书的评分功能

另外 reviews 微服务目前有 3 个版本:

  • v1 不会调用 ratings 微服务
  • v2 调用 ratings 微服务,并将评分显示 1~5 个黑色星星
  • v3 调用 ratings 微服务,并将每个评分显示为 1~5 个红色星星

准备

部署

首先开启 Istio Sidecar 注入,我们在 default 命名空间打上 istio-injection=enabled 的 Label:

kubectl label namespace default istio-injection=enabled

部署 Bookinfo Knative Service 服务, 简单直接通过 yaml 文件一键拉起来,bookinfo.yaml:

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: details-v1
namespace: default
spec:
template:
spec:
containers:
- image: registry.cn-hangzhou.aliyuncs.com/knative-sample/examples-bookinfo-details-v1:1.15.0
ports:
- containerPort: 9080
---
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: ratings-v1
namespace: default
spec:
template:
spec:
containers:
- image: registry.cn-hangzhou.aliyuncs.com/knative-sample/examples-bookinfo-ratings-v1:1.15.0
ports:
- containerPort: 9080 ---
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: reviews-v1
namespace: default
spec:
template:
spec:
containers:
- image: registry.cn-hangzhou.aliyuncs.com/knative-sample/examples-bookinfo-reviews-v1:v1-aliyun
ports:
- containerPort: 9080 ---
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: reviews-v2
namespace: default
spec:
template:
spec:
containers:
- image: registry.cn-hangzhou.aliyuncs.com/knative-sample/examples-bookinfo-reviews-v2:v1-aliyun
ports:
- containerPort: 9080
env:
- name: SERVICES_DOMAIN
value: default.svc.cluster.local
- name: RATINGS_HOSTNAME
value: ratings-v1
---
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: reviews-v3
namespace: default
spec:
template:
spec:
containers:
- image: registry.cn-hangzhou.aliyuncs.com/knative-sample/examples-bookinfo-reviews-v3:v1-aliyun
ports:
- containerPort: 9080
env:
- name: SERVICES_DOMAIN
value: default.svc.cluster.local
- name: RATINGS_HOSTNAME
value: ratings-v1
---
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: productpage-v1
namespace: default
spec:
template:
spec:
containers:
- image: registry.cn-hangzhou.aliyuncs.com/knative-sample/productpage:v1-aliyun
ports:
- containerPort: 9080
env:
- name: SERVICES_DOMAIN
value: default.svc.cluster.local
- name: DETAILS_HOSTNAME
value: details-v1
- name: RATINGS_HOSTNAME
value: ratings-v1
- name: REVIEWS_HOSTNAME
value: reviews-v2

这里需要说明几点:

  • productpage 环境变量设置:

    • SERVICES_DOMAIN:微服务直接通过内部访问域名进行访问,这里设置域名后缀为:default.svc.cluster.local
    • DETAILS_HOSTNAME:设置为 details-v1
    • RATINGS_HOSTNAME:设置为 ratings-v1
    • REVIEWS_HOSTNAME: 这里设置 reviews-v2
  • reviews v2, v3 环境变量设置。由于 v2 和 v3 需要访问 rate 进行评分, 因此需要设置对应的环境变量:

    • SERVICES_DOMAIN:微服务直接通过内部访问域名进行访问,这里设置域名后缀为:default.svc.cluster.local
    • RATINGS_HOSTNAME:设置为 ratings-v1

执行命令:

# kubectl apply -f bookinfo.yaml

查看执行结果:

# kubectl get kservice
productpage-v1 http://productpage-v1.default.knative.kuberun.com productpage-v1-s4drn productpage-v1-s4drn True
ratings-v1 http://ratings-v1.default.knative.kuberun.com ratings-v1-bsvb2 ratings-v1-bsvb2 True
details-v1 http://details-v1.default.knative.kuberun.com details-v1-dj47j details-v1-dj47j True
reviews-v1 http://reviews-v1.default.knative.kuberun.com reviews-v1-q5wz4 reviews-v1-q5wz4 True
reviews-v2 http://reviews-v2.default.knative.kuberun.com reviews-v2-5r7mm reviews-v2-5r7mm True
reviews-v3 http://reviews-v3.default.knative.kuberun.com reviews-v3-s2v6j reviews-v3-s2v6j True

通过页面进行访问,说明服务访问正常:

微服务调用链

一般情况下,用户比较关注微服务中的调用链信息,通过 Tracing Analysis 服务,我们可以方便的查看服务调用链。

首先我们进行一次服务访问,在 productpage 页面,点击 Normal user

可以看到 Book Details  和 Book Reviews 信息。productpage 服务依次会调用:details、reviews 和 ratings 服务。

接下来登录 Tracing Analysis 服务控制台,选择【应用列表】,点击 productpage.default

选择 调用链分析 页签,可以查看服务调用链信息。

结论

通过上面的介绍,我们可以在 Knative 中轻松实现微服务部署,并且结合 Tracing Analysis 服务可以满足部署生产级别服务诉求。

欢迎加入 Knative 交流群

作者简介:元毅,阿里云容器平台高级开发工程师,负责阿里云容器平台 Knative 相关工作。

了解 ACK 容器服务,请查看:https : //www.aliyun.com/product/kubernetes

“ 阿里巴巴云原生微信公众号(ID:Alicloudnative)关注微服务、Serverless、容器、Service Mesh等技术领域、聚焦云原生流行技术趋势、云原生大规模的落地实践,做最懂云原生开发者的技术公众号。”

Knative 实战:一个微服务应用的部署的更多相关文章

  1. 从 1.5 开始搭建一个微服务框架——日志追踪 traceId

    你好,我是悟空. 前言 最近在搭一个基础版的项目框架,基于 SpringCloud 微服务框架. 如果把 SpringCloud 这个框架当做 1,那么现在已经有的基础组件比如 swagger/log ...

  2. 在微服务系统开发部署中使用Azure RBAC自定义角色

    Azure的官方文档介绍了如何创建用于Azure基于角色的访问控制的自定义角色(RBAC Role). 我们也可以根据同样的原理把RBAC细粒度资源管理运用于微服务产品的开发部署中.(https:// ...

  3. .NET Core 微服务架构-Docker部署

    本文主要介绍通过Docker来部署通过.NET Core开发的微服务架构,部署的微服务主要包括统一网关(使用Ocelot开发).统一认证(IdentityServer4).应用服务(ASP.NET C ...

  4. 一个微服务+DDD(领域驱动设计)的代码结构示例

    前有幸拜读过诸多大神关于DDD的实现落地等文章,学习较多,受益匪浅,在此推荐 : https://www.cnblogs.com/hafiz/p/9388334.htmlhttps://blog.cs ...

  5. Spring Cloud微服务安全实战_4-1_微服务网关安全_概述&微服务安全面临的挑战

      第四章  网关安全 这一章从简单的API的场景过渡到复杂的微服务的场景 4.1 概述 微服务安全面临的挑战:介绍中小企业的一个微服务架构,相比第三章的单体应用的简单的API所面临的哪些挑战 OAu ...

  6. Devops 开发运维高级篇之Jenkins+Docker+SpringCloud微服务持续集成——部署方案优化

    Devops 开发运维高级篇之Jenkins+Docker+SpringCloud微服务持续集成--部署方案优化 之前我们做的方案部署都是只能选择一个微服务部署并只有一台生产服务器,每个微服务只有一个 ...

  7. spring cloud 入门,看一个微服务框架的「五脏六腑」

    Spring Cloud 是一个基于 Spring Boot 实现的微服务框架,它包含了实现微服务架构所需的各种组件. 注:Spring Boot 简单理解就是简化 Spring 项目的搭建.配置.组 ...

  8. 从 Spring Cloud 看一个微服务框架的「五脏六腑」

    原文:https://webfe.kujiale.com/spring-could-heart/ Spring Cloud 是一个基于 Spring Boot 实现的微服务框架,它包含了实现微服务架构 ...

  9. 也谈SpringCloud:假如 《复仇者联盟4》是一个微服务

    前言   <复仇者联盟4>(下文<妇联4>) 将于4月24号上映了,漫威迷们是不是迫不及待了.我虽然不是漫威迷,没有看过相关漫画,但是电影确实一步都不落.不过我在想一个问题:假 ...

随机推荐

  1. 编辑器之神vim的一些常用快捷键整理

    yy:复制 光标所在的这一行 4yy:复制 光标所在行开始向下的4行 p:粘贴 dd:剪切(删除) 光标所在的这一行 4dd:剪切(删除) 光标所在行向下的4行 D:从当前的光标开始向后剪切,一直到行 ...

  2. javascript地址引用

    javascript地址引用 var a = new Object(); a.price = ; var b = a; b.price = ; //b更改了属性值,a的属性值一起会被改变 alert( ...

  3. C#中获取指定路径下特定开头和后缀的所有文件

    场景 指定一个文件路径,获取当前路径下所有文件,并筛选出以指定内容开头和结尾的文件. 注: 博客主页: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 ...

  4. Sql sever DateDiff 函数

    函数: DATEDIFF(datepart,startdate,enddate) 具体实例: --相差年数 结果0 SELECT DATEDIFF(yy,'2008-12-29','2008-12-1 ...

  5. 【C#】学习笔记 abstract、virtual、interface使用的一些栗子

  6. git找回丢失的代码

    多人开发时找回丢失的代码 1.先保证所有分支的代码都已经提交并拉取到最新状态. 2.最重要的是需要找到最近一条自己代码还存在的记录,然后复制到最近的更早一条的提交记录的id,比如e36e9e76da1 ...

  7. opencv-python图像处理基础(一)

    #一.读取图像数据 import cv2 img=cv2.imread("d:/image0.JPG") #读取图片数据 print(img) cv2.imshow('image' ...

  8. mysql数据库相关流程图/原理图

    mysql数据库相关流程图/原理图 1.mysql主从复制原理图 mysql主从复制原理是大厂后端的高频面试题,了解mysql主从复制原理非常有必要. 主从复制原理,简言之,就三步曲,如下: 主数据库 ...

  9. 中缀表达式转换为后缀表达式(python实现)

    中缀表示式转换为后缀表达式 需要一个存放操作符的栈op_stack,输出结果的列表output 步骤: 从左到右遍历表达式: 1. 若是数字,直接加入到output 2. 若是操作符,比较该操作符和o ...

  10. 使用VSCode创建一个Vue项目

    vue-cli 是vue.js的脚手架,用于自动生成vue.js模板工程的. 安装vue-cli之前,需要先安装了vue和webpack · node -v          //(版本低引起:bas ...