Knative 实战:一个微服务应用的部署

网友投稿 294 2022-10-31

Knative 实战:一个微服务应用的部署

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

在 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 个红色星星

准备

已部署 Knative。可参考:阿里云容器服务部署 Knative 已开启链路追踪 Tracing Analysis服务,可参考:在Knative 上实现 Tracing 分布式追踪

部署

首先开启 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 productpage-v1-s4drn productpage-v1-s4drn True ratings-v1 ratings-v1-bsvb2 ratings-v1-bsvb2 True details-v1 details-v1-dj47j details-v1-dj47j True reviews-v1 reviews-v1-q5wz4 reviews-v1-q5wz4 True reviews-v2 reviews-v2-5r7mm reviews-v2-5r7mm True reviews-v3 reviews-v3-s2v6j reviews-v3-s2v6j True

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

微服务调用链

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

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

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

结论

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

欢迎加入 Knative 交流群

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

了解 ACK 容器服务,请查看:阿里巴巴云×××icloudnative×××erverless、容器、Service Mesh等技术领域、聚焦云原生流行技术趋势、云原生大规模的落地实践,做最懂云原生开发×××

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:基于Proteus的Arm处理器的SPI接口实现
下一篇:java中有无参数和返回值的方法详解
相关文章

 发表评论

暂时没有评论,来抢沙发吧~