46

剖析 SOFAMosn 系列之使用 SOFAMosn 搭建 Service Mesh 平台

 5 years ago
source link: https://mp.weixin.qq.com/s/QYUqQLYjgnp3yTfKQgNRaQ?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

SOFA

S calable  O pen  F inancial  A rchitecture

是蚂蚁金服自主研发的金融级分布式中间件,包含了构建金融级云原生架构所需的各个组件,是在金融场景里锤炼出来的最佳实践。

本文为《剖析 | SOFAMosn》第二篇

《剖析 | SOFAMosn 》系列由 SOFA 团队和源码爱好者们出品,

项目代号:<SOFA:MosnLab/> 今天开启共建招募,加入方式见底部。

SOFAMosn:  https://github.com/alipay/sofa-mosn

IF3uYn2.jpg!web

本文将介绍如何使用 SOFAMosn 在 SOFAMesh 框架下搭建 Service Mesh 的开发环境,并验证 SOFAMosn 的一些基础路由能力、负载均衡能力等。 (点击底部阅读原文,建议 PC 端打开获得更好地阅读体验)

本文介绍的内容将包括 :

  • SOFAMosn 与 SOFAMesh 的关系

  • 准备工作

  • 源码方式部署 SOFAMesh

  • Bookinfo 实验

    SOFAMosn 与 SOFAMesh 的关系

在上文《【剖析 | SOFAMosn 系列】之 SOFAMosn 的诞生和特性》中,我们介绍过, SOFAMosn 是一款采用 Golang 开发的 Service Mesh 数据平面代理,功能定位类似于 Envoy, 而 SOFAMesh 则是基于 Istio 改进和扩展而来的 Service Mesh 大规模落地实践方案, SOFAMosn SOFAMesh 的关键组件。目前由于 SOFAMosn 相比 Envoy 做了一些改造,无法在 Istio 下直接使用,所以本文的实验需要在 SOFAMesh 体系中进行。下图是 SOFAMesh 整体框架下,SOFAMosn 的工作示意图。

2YVnaib.jpg!web

一、准备工作

本文以 macOS 为例 ,其他环境可以安装对应版本的软件。

1. 安装 hyperkit

先安装 docker-for-mac,之后安装驱动

1.1 安装 docker

  • 下载软件包安装,或者使用如下的命令安装

$ brew cask install docker

1.2 安装驱动

RRVBnuF.jpg!web

2. 安装 Minikube(也可以购买商业的 k8s 集群)

  • 推荐使用 Minikube v0.28 以上来体验,请参考 https://github.com/kubernetes/minikube

$ brew cask install minikube

3. 启动 Minikube

  • 注意,pilot 至少需要 2G 内存,所以在启动的时候,可以通过加参数的方法给 minikube 添加分配的资源,如果你机器的资源不够,推荐使用商业版本的 k8s 集群。

$ minikube start --memory=8192 --cpus=4 --kubernetes-version=v1.10.0 --vm-driver=hyperkit

4. 安装 kubectl 命令行工具

  • kubectl 是用于针对 k8s 集群运行命令的命令行接口,安装参考 https://kubernetes.io/docs/tasks/tools/install-kubectl/#install-kubectl

$ brew install kubernetes-cli

5. 安装 Helm

  • Helm 是一个 k8s 的包管理工具,安装参考 https://docs.helm.sh/using_helm/#installing-helm

$ brew install kubernetes-helm

二、源码方式部署 SOFAMesh

1. 下载 SOFAMesh 源码

$ git clone [email protected]:alipay/sofa-mesh.git
$ cd sofa-mesh

2. 通过 Helm 安装 SOFAMesh

  • 使用 Helm 安装之前,需要先查看 Helm 的版本

$ helm version

如果版本在 2.10 之前,需要手动 安装 istio 的 CRD,否则不需要。(在笔者写此文的时候,安装的 helm 已经是v2.11.0,所以下面的步骤可以直接跳过)

$ kubectl apply -f install/kubernetes/helm/istio/templates/crds.yaml
$ kubectl apply -f install/kubernetes/helm/istio/charts/certmanager/templates/crds.yaml
  • 之后 使用 Helm 安装 ISTIO 有两种方式,这里推荐使用第一种,如果第一种不 work,可以尝试第二种

方式一:使用   helm template 安装

$ helm template install/kubernetes/helm/istio --name istio --namespace istio-system > $HOME/istio.yaml
$ kubectl create namespace istio-system
$ kubectl apply -f $HOME/istio.yaml

如果安装成功后,需要卸载的话:

$ kubectl delete -f $HOME/istio.yaml

方式二:使用   helm install 安装

$ kubectl apply -f install/kubernetes/helm/helm-service-account.yaml
$ helm init --service-account tiller
$ helm install install/kubernetes/helm/istio --name istio --namespace istio-system

如果安装成功后,需要卸载的话:

$ helm delete --purge istio

3. 验证安装

32ErmeV.jpg!web

istio-system 命名空间下的 pod 状态都是 Running 时,说明已经部署成功

fEVneuU.jpg!web

三、BookInfo 实验

BookInfo 是一个类似豆瓣的图书应用,它包含四个基础服务

  • Product Page:主页,由 python 开发,展示所有图书信息,它会调用 Reviews 和 Details 服务

  • Reviews:评论,由 java 开发,展示图书评论,会调用 Ratings 服务

  • Ratings:评分服务,由 nodejs 开发

  • Details:图书详情,由 ruby 开发

6Zr2Ubf.jpg!web

1. 部署 BookInfo 应用并注入 SOFAMosn

详细过程可以参考 https://istio.io/docs/examples/bookinfo/

  • 注入 SOFAMosn

$ kubectl label namespace default istio-injection=enabled
  • 部署 Bookinfo

$ kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
  • 验证部署是否成功

QFZR7be.jpg!web

  • 等待所有的 pods 等成功运行起来

mEZjqeA.jpg!web

2. 访问 BookInfo 服务

  • 开启 gateway 模式

ruIFjaJ.jpg!web

  • 验证 gateway 是否生效

RBreIzE.jpg!web

  • 观察页面情况

访问 http://$GATEWAY_URL/productpage ,正常的话通过刷新会看到如下所示 BookInfo 的界面,其中 Book Reviews 有三个版本,刷新后依次会看到(可以查看 samples/bookinfo/platform/kube/bookinfo.yaml 中的配置发现为什么是这三个版本)

  • 版本一 的界面

UzMf6fV.jpg!web

  • 版本二 的界面

by2uInM.jpg!web

  • 版本三 的界面

aAZFzuz.jpg!web

3. 验证 MOSN 按 version 路由能力

首先为 BookInfo 的 service 创建一系列的 destination rules

$ kubectl apply -f samples/bookinfo/networking/destination-rule-all.yaml

指定 reviews 服务只访问 v1 版本

$ kubectl apply -f samples/bookinfo/networking/virtual-service-all-v1.yaml

再次访问 http://$GATEWAY_URL/productpage

发现 reviews 固定在如下版本一的页面不再变化

UzMf6fV.jpg!web

4. 验证 MOSN 按 weight 路由能力

我们通过下面操作将 v1 和 v3 版本各分配 50% 的流量

$ kubectl apply -f samples/bookinfo/networking/virtual-service-reviews-50-v3.yaml

再次访问 http://$GATEWAY_URL/productpage

这次 v1 和 v3 各有 1/2 几率出现

5. 验证 MOSN 按照特定 header 路由能力

BookInfo 系统右上角有一个登陆的入口,登陆以后请求会带上 end-user 这个自定义,值是 user name,Mosn 支持根据这个 header 的值来做路由。比如,我们尝试将 jason 这个用户路由到 v2 版本,其他的路由到 v1 版本 (用户名和密码均是:jason,为什么是这个用户可以查看对应的 yaml 文件)

$ kubectl apply -f samples/bookinfo/networking/virtual-service-reviews-test-v2.yaml

访问 http://$GATEWAY_URL/productpage  时:

  • 以 jason 身份登陆,会看到 v2 版本

YJvAveF.jpg!web

  • 以其他身份登陆,始终在 v1 版本

UzMf6fV.jpg!web

  欢迎加入 <SOFA:MosnLab/>,参与 SOFAMosn 源码解析

eAbAzyy.jpg!web

我们会逐步详细介绍每部分的代码设计和实现,预计会按照如下的目录进行:

  • 【已完成】使用 SOFAMosn 搭建 Service Mesh 平台

  • 【已领取】 TLS 支持

  • 【已领取】网络层,协议层扩展点

  • 【已领取】负载均衡原理剖析

  • 【已领取】网络通信与 IO 处理

  • 【待领取】 配置文件解析与API模型

  • 【待领取】Istio 对接

  • 【待领取】 协议处理及多协议扩展机制

  • 【待领取】跨协议转发引擎机制实现原理剖析

  • 【待领取】 后端链接管理,健康检查

  • 【待领取】 路由支持及扩展机制剖析

  • 【待领取】 无损重启/升级

  • 【待领取】内存复用剖析

领取方式:

直接回复本公众号想认领的文章名称,我们将会主动联系你,确认资质后,即可加入 <SOFA:Mosn Lab/>,It's your show time!


相关链接:

SOFA 文档:  http://www.sofastack.tech/

SOFA: https://github.com/alipay

SOFAMosn:

https://github.com/alipay/sofa-mosn

延伸阅读:

大规模微服务架构下的 Service Mesh 探索之路

开源 | Service Mesh 数据平面 SOFAMosn 深层揭秘

【剖析 | SOFAMosn】系列之 SOFAMosn 的诞生和特性总览

URziqyv.jpg!web

长按关注,获取分布式架构干货

欢迎大家共同打造 SOFAStack https://github.com/alipay


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK