您可以将部署在容器服务Kubernetes版中的Gin等Golang微服务应用接入MSE治理中心,使用MSE提供的一系列服务治理能力,大幅提升线上微服务的稳定性和开发效率。本文介绍如何将Golang微服务应用接入MSE治理中心。
Go语言服务治理全新公测,公测期间不收取使用费用,欢迎体验!
前提条件
创建Kubernetes集群。您可按需选择创建ACK专有集群、创建ACK托管集群、创建ACK Serverless集群或创建集群。
创建命名空间,具体操作,请参见管理命名空间与配额。
检查您的编译环境操作系统和架构,以及Go版本和框架版本,具体要求,请参见Golang应用治理兼容性要求及功能说明。
MSE治理中心目前只支持使用Go mod的仓库编译,如果没有Go mod文件,可以使用Go init创建Go mod。
接入流程
步骤一:安装MSE微服务治理组件
登录容器服务管理控制台。
在左侧导航栏单击集群,然后在集群列表页面单击目标集群名称。
在左侧导航栏选择运维管理 > 组件管理,然后在右上角通过关键字搜索ack-onepilot。
重要请确保您选择的ack-onepilot版本在3.2.3及以上。ack-onepilot组件默认支持1000个pod规模,集群pod每超过1000个,ack-onepilot资源对应的CPU请增加0.5核、内存请增加512 M。
在ack-onepilot卡片上单击安装。
在弹出的页面中可以配置相关的参数,建议使用默认值,单击确定。
说明如果是首次安装,直接点击安装即可,会默认安装最新版本且大于3.2.3。
安装完成后,您可以在运维管理 > 组件管理页面升级、配置或卸载ack-onepilot组件。
步骤二:启用高阶治理能力
登录MSE治理中心控制台,并在顶部菜单栏选择地域。
在左侧导航栏单击治理中心>运维中心 > K8s集群列表,然后在K8s集群列表页面单击目标集群名称。
在集群信息 > 高阶治理能力处,单击右侧的启用按钮。
说明高阶治理能力启用预计需要1min左右,启用完成后,状态会由“未启用”变更为“已启用”。
步骤三:编译Go二进制文件
使用
wget
命令下载编译工具,请根据编译环境和编译机器所在地域,选择对应的下载地址。说明各地域下载的编译工具是相同的,如果您的公网环境可以访问OSS地址,可以直接使用对应操作系统和架构的杭州公网地址获取编译工具。
操作系统
公网地址
VPC地址
Linux(AMD64)
wget "http://arms-apm-{region-id}.oss-{region-id}.aliyuncs.com/instgo/instgo-linux-amd64" -O instgo
wget "http://arms-apm-{region-id}.oss-{region-id}-internal.aliyuncs.com/instgo/instgo-linux-amd64" -O instgo
Linux(ARM64)
wget "http://arms-apm-{region-id}.oss-{region-id}.aliyuncs.com/instgo/instgo-linux-arm64" -O instgo
wget "http://arms-apm-{region-id}.oss-{region-id}-internal.aliyuncs.com/instgo/instgo-linux-arm64" -O instgo
Darwin/macOS(ARM64)
wget "http://arms-apm-{region-id}.oss-{region-id}.aliyuncs.com/instgo/instgo-darwin-arm64" -O instgo
wget "http://arms-apm-{region-id}.oss-{region-id}-internal.aliyuncs.com/instgo/instgo-darwin-arm64" -O instgo
Darwin/macOS(AMD64)
wget "http://arms-apm-{region-id}.oss-{region-id}.aliyuncs.com/instgo/instgo-darwin-amd64" -O instgo
wget "http://arms-apm-{region-id}.oss-{region-id}-internal.aliyuncs.com/instgo/instgo-darwin-amd64" -O instgo
Windows(AMD64)
wget "http://arms-apm-{region-id}.oss-{region-id}.aliyuncs.com/instgo/instgo-windows-amd64.exe" -O instgo.exe
wget "http://arms-apm-{region-id}.oss-{region-id}-internal.aliyuncs.com/instgo/instgo-windows-amd64.exe" -O instgo.exe
上述地址,需要根据您编译环境所在的地域,将
{region-id}
替换成对应的regionID
,地域及其regionID
的映射可参见开服地域。说明目前支持的地域包括如下,其他地域会陆续支持。
中国地区:杭州、上海、北京、张家口、深圳。
国际地区:新加坡、美国(硅谷)。
对于
Linux/Darwin/macOS
环境为编译工具赋予可执行权限,Windows
环境跳过此步骤。# 赋予可执行权限 chmod +x instgo
在项目main函数所在文件的目录下执行编译工具编译Go项目,请替换命令行中的
{licenseKey}
,您可以通过访问MSE治理中心控制台首页,单击右上角查看 License Key。说明同一个UID下不同Region的License Key会有所不同,请先切换至相应的Region之后再查看。
如果您需要测试编译效果,或暂时无法获取到LicenseKey,可以添加
--dev
来开启Dev编译模式,此模式下不需要传入LicenseKey
,Dev模式下编译结果部分功能有降级,请勿用于线上。如果您原本编译命令中含有后续的编译参数,请在所有选项添加完毕后,添加--分隔符,并将编译参数按照原有格式添加在后面。
初次编译时,探针默认会被下载到/opt目录(Windows是
C:\ProgramData
),如果该目录没有权限,可以使用--cacheDir flag
指定缓存目录,或使用sudo -E
命令执行编译(Windows请使用管理员权限执行编译命令)。
Linux/Darwin
./instgo build --mse --licenseKey="{licenseKey}" -- {arg1} {arg2} ...
Windows
.\instgo.exe build --mse --licenseKey="{licenseKey}" -- {arg1} {arg2} ...
如果您希望执行交叉编译,例如在Mac操作系统中,编译Linux可执行二进制文件,注意需要在执行二进制文件指令前,声明以下Go内置的环境变量:
## Darwin/macOS操作系统下编译Linux可执行程序 #amd CGO_ENABLED=0 GOOS=linux GOARCH=amd64 ./instgo build --mse --licenseKey="{licenseKey}" #arm CGO_ENABLED=0 GOOS=linux GOARCH=arm64 ./instgo build --mse --licenseKey="{licenseKey}" ## Darwin/macOS操作系统下编译Windows可执行程序 CGO_ENABLED=0 GOOS=windows GOARCH=amd64 ./instgo build --mse --licenseKey="{licenseKey}" ## Linux操作系统下编译Darwin/macOS可执行程序 #amd CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 ./instgo build --mse --licenseKey="{licenseKey}" #arm CGO_ENABLED=0 GOOS=darwin GOARCH=arm64 ./instgo build --mse --licenseKey="{licenseKey}" ## Linux操作系统下编译Windows可执行程序 CGO_ENABLED=0 GOOS=windows GOARCH=amd64 ./instgo build --mse --licenseKey="{licenseKey}" ## Windows操作系统下编译Linux可执行程序 #amd SET CGO_ENABLED=0 SET GOOS=linux SET GOARCH=amd64 .\instgo.exe build --mse --licenseKey="{licenseKey}" #arm SET CGO_ENABLED=0 SET GOOS=linux SET GOARCH=arm64 .\instgo.exe build --mse --licenseKey="{licenseKey}" ## Windows操作系统下编译Darwin/macOS可执行程序 #amd SET CGO_ENABLED=0 SET GOOS=darwin SET GOARCH=amd64 .\instgo.exe build --mse --licenseKey="{licenseKey}" #arm SET CGO_ENABLED=0 SET GOOS=darwin SET GOARCH=arm64 .\instgo.exe build --mse --licenseKey="{licenseKey}"
Instgo常见命令与释义如下:
命令
是否必传
flag
接收参数类型
含义
build(编译)
是
--mse
-
指定探针添加MSE微服务治理功能。
是(dev 模式下可不传)
--licenseKey, -l
string
指定MSE的LicenseKey。
否
--dev
-
指定编译模式为开发模式,此模式下无需指定LicenseKey即可编译,用于测试基本可用性。
重要部分功能有降级,请勿用于线上。
否
--agentVersion
string
指定探针版本。
否
--agentPath
string
指定本地探针路径。
否
--cacheDir
string
指定探针缓存目录。
否
--regionId, -r
string
指定拉取探针包依赖的OSS所在RegionId,默认为cn-hangzhou。
否
--timeout, -t
int
指定拉取探针超时时间,默认为180秒。
否
--verbose, -v
-
开启后,输出详细的编译日志。
否
--vpc
-
开启后,默认通过内网拉取探针包依赖。
update(更新)
是
--licenseKey, -l
string
指定MSE的LicenseKey。
否
--cacheDir
string
指定探针缓存目录。
否
--regionId, -r
string
指定拉取探针包依赖的OSS所在RegionId,默认为cn-hangzhou。
否
--timeout, -t
int
指定拉取探针超时时间,默认为180秒。
否
--vpc
开启后,默认通过内网拉取探针包依赖。
clean(清理产物)
-
-
-
手动清理编译残留,恢复探针对代码的修改。
version(输出版本号)
-
-
-
-
步骤四:为Go应用开启MSE微服务治理
在容器服务管理控制台左侧导航栏单击集群,在集群列表页面的目标集群操作列下单击应用管理。
在左侧导航栏选择工作负载 > 无状态,切换到应用的命名空间下,找到待接入的应用,单击应用进入到应用详情页面。
在应用详情页面单击右上角查看Yaml,将以下labels添加到
spec.template.metadata.labels
层级下,完成后单击更新。labels: # Go应用必填,标明此应用是Go应用 aliyun.com/app-language: golang # 填写“on”表示开启接入,需加上双引号 msePilotAutoEnable: "on" # 填写接入到的治理命名空间,如果不存在可自动新建 mseNamespace: "<your-mse-governance-namespace>" # 填写接入MSE的实际应用名称,需加上双引号 msePilotCreateAppName: "<your-application-name>"
结果验证
完成接入流程并重启应用后,部署在容器服务Kubernetes版中的Golang应用就成功开启了MSE微服务治理。
登录MSE治理中心控制台,并在顶部菜单栏选择地域。
在左侧导航栏,选择治理中心 > 应用治理。
在应用列表页面选择对应的微服务命名空间,即可看到已经成功接入的应用。