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
执行命令:
# 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等技术领域、聚焦云原生流行技术趋势、云原生大规模的落地实践,做最懂云原生开发者的技术公众号。”
- 微服务云中部署应用与服务实战课程 微服务架构核心-容器新技术微服务系统实战课程
- 最新微服务云中部署应用与服务实战课程 微服务架构核心-容器新技术微服务系统实战课程
- docker实战2 (docker swarm的应用,docker集群的构建,在docker集群中部署服务的创建与更新)
- Linux入职基础-5.24_可执行程序arpwatch做成系统一个服务(应用实战8)
- 如何在Visual Studio 2017中使用C# 7+语法 构建NetCore应用框架之实战篇(二):BitAdminCore框架定位及架构 构建NetCore应用框架之实战篇系列 构建NetCore应用框架之实战篇(一):什么是框架,如何设计一个框架 NetCore入门篇:(十二)在IIS中部署Net Core程序
- 2018年微服务云中部署应用与服务实战课程
- 云星数据---mesos实战系列003】:marathon实战001--使用marathon部署一个最简单的容器服务
- 【云星数据---mesos实战系列003】:marathon实战009--marathon部署一个springboot应用
- 一个服务器上部署两个FTP服务 分类: 软件插件学习 2014-12-25 11:05 129人阅读 评论(0) 收藏
- 用python创建一个简单的restful风格的web服务应用
- docker - 从安装到部署一个web应用(go、java)
- JBoss EAP应用服务器部署方法和JBoss 开发JMS消息服务小例子
- 20170825L08-05老男孩linux实战运维培训-Lamp系列之-Apache服务生产实战应用指南02
- 微服务实战(六):选择微服务部署策略
- Kubernetes部署服务 - ReplicationController多副本负载均衡实战
- 为一个 iOS 应用编写一个简单的 Node.js/MongoDB Web 服务
- 应用集成实战系列:服务总线中同步交互服务接口的定义规范
- jeesite应用实战(数据增删改查),认真读完后10分钟就能开发一个模块
- 一个tomcat部署多个应用实例总结
- 【Linux 操作系统】阿里云服务器 操作实战 部署C语言开发环境(vim配置,gcc) 部署J2EE网站(jdk,tomcat)