写点什么

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

评论

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

LeetCode 169. Majority Element

liu_liu

算法 LeetCo

Spring Security 主要类解释

哈库拉玛塔塔

springsecurity

布式系统消息异常该何去何从

架构师修行之路

分布式 异步

浮点数的秘密

C语言与CPP编程

c c++ 编程语言 浮点数

第五周作业

Vincent

极客时间 极客大学

oeasy教您玩转 linux 010212 管道 pipe

o

SpringCloud轻松集成Dubbo实现RPC调用

Barry的异想世界

微服务 dubbo nacos RPC spring cloud alibaba

华为与第四范式,正在酝酿一个帮企业跳出AI悖论的“秘密计划”

脑极体

CString 类的线程不安全问题

C语言与CPP编程

c c++ 编程语言

Java四种引用类型:强引用、软引用、弱引用、虚引用

简爱W

【高并发】面试官:讲讲什么是缓存穿透?击穿?雪崩?如何解决?

冰河

缓存 穿透 击穿 雪崩 签约计划第二季

为什么每个微服务要有自己独立的数据库?

码猿外

数据库 架构 微服务

我理解的面向对象(ObjectiveSql 实践)

Braisdom

Java ORM框架 ORM

Go: 理解 Sync.Pool 的设计

陈思敏捷

sync sync.pool pool Go 语言

认证、授权、鉴权和权限控制

哈库拉玛塔塔

spring security 用户权限 鉴权 权限

重新学习了一遍ThreadLocal

熊斌

学习

从一段 Dubbo 源码到 CPU 分支预测的一次探险之旅

yes

dubbo cpu

week11--作业

Geek_165f3d

我们该怎么保护手机屏幕前的父母?

徐说科技

手机 短视频

不使用Raft算法,就能简单做集群leader选举

架构师修行之路

分布式 架构师

计算机的时钟(三):向量时钟

ElvinYang

Golang领域模型-实体

奔奔奔跑

架构 微服务 领域驱动设计 DDD Go 语言

金沙账号审核不通过维护不给提现风控怎么回事?怎么办

过山太阳

内容审核 提现不了

企业中台化落地:从战略分析到战术实践及架构演进过程

Barry的异想世界

架构设计 策略模式 模板方法模式 中台架构 领域驱动设计DDD

区块链应用层——生态体系的上层建筑

CECBC

区块链技术 生态体系

以大数据为依托提升基层治理效能

CECBC

大数据 信息化管理

spark总结

纯纯

一文带你了解微服务架构和设计(多图)

Phoenix

架构 分布式 微服务

HashMap将cpu打满始末

hashmap 线程安全 cpu 100% cpu飙满

区块链激励层——区块链生态建设的驱动力量

CECBC

区块链技术 驱动力量

记录问题 INSERT INTO table ... SELECT ... FROM dual WHERE not exists (...)问题

转山转水

sql SQL语法 sql查询

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