Mesh 服务治理
MegaEase Cloud 平台可以托管用户的服务器,支持快速部署并管理常见的软件服务和云原生应用,让用户以此获得不被平台锁定,低成本,高可用的云原生平台。
本文档介绍 MegaEase Cloud 平台的 Service Mesh 基本使用方法,包括:
Mesh 服务治理
EaseMesh作为Mesh产品,是建立在Kubernetes上的服务治理平台,与 MegaEase Cloud 平台无缝结合。所以安装Mesh的前置条件有:有可用Kubernetes集群(一个集群只能安装一个Mesh)
安装 EaseMesh
-
进入 Services 页面
-
点击 Create Service,选择 EaseMesh
-
选择一个可用的Kubernetes集群
-
选择 Control Plane Replicas 数目(推荐不多于 Kubernetes 集群 Node 数)
-
如果需要 Shadow Service,则将 AddOns 的 ShadowService 选上
-
如果需支持 非Java 服务,则可将 Install CoreDN 勾选上
-
点击 Create 创建 EaseMesh 服务
安装 Mesh App
-
进入 _ Apps_ 页面
-
点击 Create App ,选择 Kubernetes App
-
点击 Edit From YAML Template
-
将 App 的 YAML 拷贝到编辑框(内容见附录,我们用有三个服务的 TakeoutApp 做例子)
-
点击 Submit
-
Cluster Name 选择第1步里安装Mesh的Kubernetes,勾选上 Whether to enable EaseMesh
-
点击 Next
-
点击 Create
流量示例
我们以 TakeoutApp 为例子来测试流量,其中三个服务的调用顺序是 order-mesh -> restaurant-mesh -> delivery-mesh。
如果要从外部发送流量到第一个服务order-mesh,我们需要为它创建Ingress:
-
进入Service/Ingress页面
-
点击Create Ingress创建Order服务的流量入口
作为例子,我们填写以下表单:
- Name: order-public
- Exact Path: /
- Backend Service: order-mesh
-
点击 Create Ingress
-
用 HTTP Client 测试流量
-
进入 Apps/Tracings 查看调用链
-
进入 Trace/Records 查看调用 Span
灰度发布
- 进入 Service/Canary Release 页面
- 点击 Create Canary Release
作为例子,我们填写以下表单:
- Name:beijing
- Services:delivery-mesh;Canary Version:canary_version
- Priority: 3
- Traffic Rules:Header: X-Location; Exact: Beijing
-
点击 Create Canary Release
-
用 HTTP Client 测试灰度流量
影子服务
-
进入 Service/Shadow Service 页面
-
点击 Create Shadow Service
作为例子,我们填写以下表单:
- Name: shadow-order
- Namespace: takeoutapp
- Source Service Name: order-mesh
- Traffic Header Value: pressure-test
-
点击 Create Shadow Service
-
用 HTTP Client 测试 Shadow 流量
-
进入 Apps/Tracings 查看 Shadow 标志的调用链
附录
Takeoutapp完整代码可见:Mesh Example (opens in a new tab).
takeoutapp.yaml:
name: takeoutapp
namespace: takeoutapp
cluster_name: easestack
description: An application comprising of order, restaurant, delivery.
easemesh:
enable: true
components:
# Order
- name: order-mesh
enable: true
image: megaease/meshdemo
image_version: latest
type: Stateless
instance_count: 1
named_ports:
- name: http
port: 80
env_variables:
- name: SERVICE_NAME
value: order-mesh
- name: ZIPKIN_URL
value: https://monitor.megaease.com:32430/report/application-tracing-log
resource_require:
cpu: 200m
memory: 256Mi
resource_limit:
cpu: 1200m
memory: 2048Mi
configurations:
- key: listenPort
value: "7700"
use_as_file: /etc/port_config
is_sub_path: true
- key: listenAddr
value: 127.0.0.1
use_as_file: /etc/address_config
is_sub_path: true
# Restaurant
- name: restaurant-mesh
enable: true
image: megaease/meshdemo
image_version: latest
type: Stateless
instance_count: 1
named_ports:
- name: http
port: 80
env_variables:
- name: SERVICE_NAME
value: restaurant-mesh
- name: ZIPKIN_URL
value: https://monitor.megaease.com:32430/report/application-tracing-log
resource_require:
cpu: 200m
memory: 1Gi
resource_limit:
cpu: 2000m
memory: 3Gi
configurations:
- key: listenPort
value: "8800"
use_as_file: /etc/port_config
is_sub_path: true
- key: listenAddr
value: 0.0.0.0
use_as_file: /etc/address_config
is_sub_path: true
# Delivery
- name: delivery-mesh
enable: true
image: megaease/meshdemo
image_version: latest
type: Stateless
instance_count: 1
named_ports:
- name: http
port: 80
env_variables:
- name: SERVICE_NAME
value: delivery-mesh
- name: ZIPKIN_URL
value: https://monitor.megaease.com:32430/report/application-tracing-log
resource_require:
cpu: 200m
memory: 256Mi
resource_limit:
cpu: 1200m
memory: 2048Mi
configurations:
- key: listenPort
value: "9900"
use_as_file: /etc/port_config
is_sub_path: true
- key: listenAddr
value: 127.0.0.1
use_as_file: /etc/address_config
is_sub_path: true