报名参加CloudWeGo黑客松,奖金直推双丰收! 了解详情
写点什么

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

  • 2019-11-21
  • 本文字数:2865 字

    阅读完需:约 9 分钟

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

准备

部署

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


kubectl label namespace default istio-injection=enabled
复制代码


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


apiVersion: serving.knative.dev/v1kind: Servicemetadata:  name: details-v1  namespace: defaultspec:  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/v1kind: Servicemetadata:  name: ratings-v1  namespace: defaultspec:  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/v1kind: Servicemetadata: name: reviews-v1 namespace: defaultspec: template: spec: containers: - image: registry.cn-hangzhou.aliyuncs.com/knative-sample/examples-bookinfo-reviews-v1:v1-aliyun ports: - containerPort: 9080
---apiVersion: serving.knative.dev/v1kind: Servicemetadata: name: reviews-v2 namespace: defaultspec: 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/v1kind: Servicemetadata: name: reviews-v3 namespace: defaultspec: 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/v1kind: Servicemetadata: name: productpage-v1 namespace: defaultspec: 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 kserviceproductpage-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 相关工作。了解 ACK 容器服务,请点击。本文转载自阿里巴巴云原生微信公众号(ID:Alicloudnative),主要关注微服务、Serverless、容器、Service Mesh 等技术领域、聚焦云原生流行技术趋势、云原生大规模的落地实践。


2019-11-21 11:123270

评论

发布
暂无评论
发现更多内容

CDH5部署三部曲之二:部署和设置

爱好编程进阶

Java 程序员 后端开发

基于SVN的CICD调研方案 _

ZuccRoger

5月月更

一份让面试官满意的简历究竟要做到什么

宇宙之一粟

简历模板 简历 5月月更

数据库连接池 -Druid 源码学习(四)

wjchenge

Druid 数据库连接池

CRMEB 知识付费模版消息修改教程

CRMEB

druid 源码阅读 4——走一个单测看sql运行

张大彪

JSP标签

爱好编程进阶

Java 程序员 后端开发

在Flutter中使用WillPopScope

坚果

5月月更

2021-12-15【Codeforces Round #760 (Div

爱好编程进阶

Java 程序员 后端开发

Spring Boot MyBatis配置Druid多数据源

爱好编程进阶

Java 程序员 后端开发

SpringMVC快速入门(3)默认组件加载

爱好编程进阶

Java 程序员 后端开发

【刷题第八天】11. 盛最多水的容器

白日梦

5月月更

JAVA生成二维码图片和解析二维码图片内容代码实例

爱好编程进阶

Java 程序员 后端开发

Tomcat与JDK版本对应关系,Tomcat各版本特性

爱好编程进阶

Java 程序员 后端开发

为什么花大本钱培训后,研发团队的表现还是很差?

高山

培训 CMMI 培训效果

设计模式之原型模式

乌龟哥哥

5月月更

Druid连接池源码阅读04

石小天

FLV封装格式

Loken

音视频 5月月更

反向代理 413 Request Entity Too Large 问题

HoneyMoose

网站开发进阶(六十三)详解CSS3中的calc()

No Silver Bullet

css3 5月月更 calc()

Java stream流用法总结

爱好编程进阶

Java 程序员 后端开发

Java String类型和BigDecimal类型之间的转化及BigDecimal类型的介绍

爱好编程进阶

Java 程序员 后端开发

Cocos Creator学习の有限状态机

空城机

Cocos 5月月更

“三高”程序员谈:Mysql的“三高”集群架

爱好编程进阶

程序员 后端开发

Java市场饱和了?为什么都这么说?

爱好编程进阶

Java 程序员 后端开发

Graylog 中文手册 常用功能和问题整理

爱好编程进阶

Java 程序员 后端开发

Java对内存空间的分配与回收机制

爱好编程进阶

Java 程序员 后端开发

如何备份 WordPress 数据库

海拥(haiyong.site)

WordPress 5月月更

Docker下的OpenResty三部曲之三:OpenResty加Tomcat的服务

程序员欣宸

Kubernetes openresty 5月月更

【C 语言】指针 Two 之[定义指针变量、有效声明指针、使用指针、指针变量初始化]

謓泽

5月月更

前缀和算法

工程师日月

算法 5月月更

Knative 实战:一个微服务应用的部署_服务革新_元毅_InfoQ精选文章