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

在 Istio 中提供了一个 Bookinfo 的示例,用于演示微服务之间的调用,那么如何在 Knative 中部署这个示例呢?本文将会介绍一下在 Knative 中部署 Bookinfo 微服务以及查看调用链追踪信息。html

背景

Bookinfo 这个示例应用由 4 个微服务组成。 Bookinfo 应用架构图以下:
imageapi

  • 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:app

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

这里须要说明几点:ide

  • 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

执行命令:spa

# kubectl apply -f bookinfo.yaml

查看执行结果:code

# 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

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

微服务调用链

通常状况下,用户比较关注微服务中的调用链信息,经过 Tracing Analysis服务,咱们能够方便的查看服务调用链。
首先咱们进行一次服务访问,在productpage页面,点击Normal user
image

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

接下来登陆 Tracing Analysis 服务控制台,选择【应用列表】,点击 productpage.default.
image

选择 调用链分析 页签,能够查看服务调用链信息
tracing

结论

经过上面的介绍,咱们能够看到在 Knative 中轻松实现微服务部署,而且结合 Tracing Analysis 服务能够知足部署生产级别服务诉求。

 

阅读原文

本文为云栖社区原创内容,未经容许不得转载。

相关文章
相关标签/搜索