zoukankan      html  css  js  c++  java
  • Knative 实战:一个微服务应用的部署

    file

    作者 | 元毅 阿里云智能事业群高级开发工程师

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

    背景

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

    file

    • 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/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
      • RATINGS_HOSTNAME:设置为 ratings-v1

    执行命令:

    # 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
    

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

    file

    微服务调用链

    一般情况下,用户比较关注微服务中的调用链信息,通过 Tracing Analysis 服务,我们可以方便的查看服务调用链。

    首先我们进行一次服务访问,在 productpage 页面,点击 Normal user

    file

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

    file

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

    file

    选择 调用链分析 页签,可以查看服务调用链信息。

    file

    结论

    通过上面的介绍,我们可以在 Knative 中轻松实现微服务部署,并且结合 Tracing Analysis 服务可以满足部署生产级别服务诉求。

    欢迎加入 Knative 交流群

    file

    作者简介:元毅,阿里云容器平台高级开发工程师,负责阿里云容器平台 Knative 相关工作。

    了解 ACK 容器服务,请查看:https : //www.aliyun.com/product/kubernetes

    “ 阿里巴巴云原生微信公众号(ID:Alicloudnative)关注微服务、Serverless、容器、Service Mesh等技术领域、聚焦云原生流行技术趋势、云原生大规模的落地实践,做最懂云原生开发者的技术公众号。”

  • 相关阅读:
    ORACLE【0】:基本操作
    ORACLE【3】:分区表以及分区索引
    ORACLE【2】:锁机制及解锁
    log4j学习一:解决系统日志错位问题
    使用一个非堵塞的socket用于接收http请求
    Python中文转换报错 'ascii' codec can't decode byte 0xe8 in position
    首次使用Redis记录【3】
    xsi:schemaLocation有何作用
    【转】【redis】3.Spring 集成注解 redis 项目配置使用
    maven仓库地址
  • 原文地址:https://www.cnblogs.com/alisystemsoftware/p/11858940.html
Copyright © 2011-2022 走看看