内容简介:本文将介绍如何使用 SOFAMosn 在 SOFAMesh 框架下搭建 Service Mesh 的开发环境,并验证 SOFAMosn 的一些基础路由能力、负载均衡能力等。本文介绍的内容将包括 :
SOFA
S calable O pen F inancial A rchitecture
是蚂蚁金服自主研发的金融级分布式中间件,包含了构建金融级云原生架构所需的各个组件,是在金融场景里锤炼出来的最佳实践。
本文为《剖析 | SOFAMosn》第二篇 。
《剖析 | SOFAMosn 》系列由 SOFA 团队和源码爱好者们出品,
项目代号:<SOFA:MosnLab/> , 今天开启共建招募,加入方式见底部。
SOFAMosn: https://github.com/alipay/sofa-mosn
本文将介绍如何使用 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 的工作示意图。
一、准备工作
本文以 macOS 为例 ,其他环境可以安装对应版本的软件。
1. 安装 hyperkit
先安装 docker-for-mac,之后安装驱动
1.1 安装 docker
-
下载软件包安装,或者使用如下的命令安装
$ brew cask install docker
1.2 安装驱动
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 git@github.com: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. 验证安装
istio-system 命名空间下的 pod 状态都是 Running 时,说明已经部署成功
三、BookInfo 实验
BookInfo 是一个类似豆瓣的图书应用,它包含四个基础服务
-
Product Page:主页,由 python 开发,展示所有图书信息,它会调用 Reviews 和 Details 服务
-
Reviews:评论,由 java 开发,展示图书评论,会调用 Ratings 服务
-
Ratings:评分服务,由 nodejs 开发
-
Details:图书详情,由 ruby 开发
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
-
验证部署是否成功
-
等待所有的 pods 等成功运行起来
2. 访问 BookInfo 服务
-
开启 gateway 模式
-
验证 gateway 是否生效
-
观察页面情况
访问 http://$GATEWAY_URL/productpage ,正常的话通过刷新会看到如下所示 BookInfo 的界面,其中 Book Reviews 有三个版本,刷新后依次会看到(可以查看 samples/bookinfo/platform/kube/bookinfo.yaml 中的配置发现为什么是这三个版本)
-
版本一 的界面
-
版本二 的界面
-
版本三 的界面
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 固定在如下版本一的页面不再变化
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 版本
-
以其他身份登陆,始终在 v1 版本
欢迎加入 <SOFA:MosnLab/>,参与 SOFAMosn 源码解析
我们会逐步详细介绍每部分的代码设计和实现,预计会按照如下的目录进行:
-
【已完成】使用 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 数据平面 SOFAMosn 深层揭秘
【剖析 | SOFAMosn】系列之 SOFAMosn 的诞生和特性总览
长按关注,获取分布式架构干货
欢迎大家共同打造 SOFAStack https://github.com/alipay
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- Kitty-Cloud服务搭建过程剖析
- 深入剖析Redis系列(三) - Redis集群模式搭建与原理详解
- 【Java集合源码剖析】ArrayList源码剖析
- Java集合源码剖析:TreeMap源码剖析
- 【剖析 | SOFARPC 框架】系列之 SOFARPC 优雅关闭剖析
- 【剖析 | SOFARPC 框架】系列之 SOFARPC 注解支持剖析
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
深度解析淘宝运营
刘涛 / 电子工业出版社 / 2015-9-1 / 49.00元
淘宝运营,仅有知识是不够的,还需要有系统的运营思路。为帮助广大电商从业者以及众多中小卖家更好地运营店铺,《深度解析淘宝运营》全面阐述了整个店铺运营的重点环节,包括淘宝搜索规则、打造爆款、店铺规划、客户服务、直通车、钻石展位、数据分析等内容。具体操作步骤翔实,并且结合笔者的实际操作经验,将各个环节最本质的一面透彻展现给读者,结合理论与实战,尽可能向读者展示一个最真实的运营核心。《深度解析淘宝运营》没......一起来看看 《深度解析淘宝运营》 这本书的介绍吧!