写点什么

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:123405

评论

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

如何通过YashanDB实现更好的客户关系管理

数据库砖家

如何通过YashanDB实现数据访问的高可用性?

数据库砖家

如何通过YashanDB数据库实现数据实时同步

数据库砖家

CAD如何输出PDF多页文件

极客天地

如何通过YashanDB实现企业级数据生命周期管理

数据库砖家

如何通过YashanDB实现企业数据库持续集成和部署

数据库砖家

如何通过YashanDB实现数据备份和恢复的最佳实践?

数据库砖家

如何通过YashanDB实现数据实时同步与复制

数据库砖家

如何使用YashanDB提升企业数据管理效率和安全性

数据库砖家

如何使用YashanDB数据库进行数据分析

数据库砖家

如何使用YashanDB数据库快速构建数据服务API

数据库砖家

通过YashanDB实现多环境数据同步和管理

数据库砖家

通过YashanDB实现企业级数据一致性和隔离性的技术分析

数据库砖家

如何通过YashanDB数据库实现业务智能化

数据库砖家

CAD动态块属性文字为什么不跟随移动

极客天地

如何使用YashanDB进行实时数据分析

数据库砖家

如何使用YashanDB实现企业数据库自动扩容

数据库砖家

如何使用YashanDB提升企业数据库管理效率?

数据库砖家

如何通过YashanDB实现跨区域数据容灾备份

数据库砖家

如何通过YashanDB数据库实现智能数据管理

数据库砖家

阿里云基础设施 AI Tech Day AI 原生,智构未来——AI 原生架构与企业实践专场

阿里巴巴云原生

阿里云 AI 云原生

如何通过YashanDB实现复杂查询的高效处理?

数据库砖家

如何通过YashanDB实现企业数据的智能分析与挖掘

数据库砖家

如何使用YashanDB数据库构建实时报告系统

数据库砖家

如何通过YashanDB实现数据一致性与高可用

数据库砖家

如何通过YashanDB数据库实现高并发数据访问

数据库砖家

如何使用YashanDB进行数据库性能诊断与优化

数据库砖家

如何使用YashanDB提升移动应用的数据响应速度?

数据库砖家

如何使用YashanDB实现企业内部数据共享安全策略

数据库砖家

通过YashanDB实现分布式数据库管理

数据库砖家

如何使用YashanDB数据库提升大数据处理能力?

数据库砖家

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