小米正式开源 Istio 管理面板 Naftis
近年来服务网格(Service Mesh)已成为各大公司关注重点,各大公司纷纷开始调研 Service Mesh 相关架构。作为 Service Mesh 中的佼佼者,Istio 诞生之初就已吸引众多目光。
作为基础设施层,Istio 有优秀的服务治理能力。但使用 Istio 进行服务治理时,开发者需通过 istioctl 或 kubectl 工具在终端中进行操作,这种方式目前存在一些问题,举例如下:
- Istio 要求用户熟练掌握 istioctl 工具的数百种指令,有较高的学习成本。
- Istio 进行服务治理时需要的 yaml 配置文件的数量非常庞大,如何配置和管理这些配置文件,也是个难题。
- Istio 的 istioctl 工具没有用户权限的约束,存在一定安全隐患,无法适应大公司严格的权限管理需求。
- Istio 的 istioctl 工具不支持任务回滚等需求,在执行任务出错的情况下,无法快速回滚到上一个正确版本。
为了解决这些问题,小米信息部武汉研发中心为 Istio 研发出了一套友好易用的 dashboard —— Naftis 。
Naftis 意为水手,和 Istio (帆船)意境契合。作为 dashboard , Naftis 能使用户像水手一样熟练掌控和管理 Istio 。
https://github.com/xiaomi/naftis
Naftis 通过任务模板的方式来帮助用户更轻松地执行 Istio 任务。用户可以在 Naftis 中定义自己的任务模板,并通过填充变量来构造单个或多个任务实例,从而完成各种服务治理功能。
Naftis 提供了如下特性:
- 集成了一些常用的监控指标,包括 40X、50X 错误趋势等。
- 提供了可定制的任务模板的支持。
- 支持回滚指定某一任务。
- 提供了 Istio 状态诊断功能,可实时查看 Istio 的 Services 和 Pod 状态。
- 开箱即用,通过 kubectl 指令一键部署。
依赖
目前 Naftis 仅支持 Kubernetes,不支持其他容器调度平台。
- Istio > 1.0
- Kubernetes>= 1.9.0Jf
- HIUI >= 1.0.0
Naftis 后端采用 Go 编写,通过 Kubernetes 和 Istio 的 CRD 接口对 Istio 资源进行操作;
前端则采用了同样由小米开源的基于 React 的前端组件 HIUI,HIUI 简洁优雅,有一定 React 基础的前端开发者能迅速上手:
https://github.com/xiaomi/hiui
快速开始
1 | kubectl create namespace naftis && kubectl apply -n naftis -f mysql.yaml && kubectl apply -n naftis -f naftis.yaml |
详细的部署流程
Kubernetes 集群内运行
1 | # 创建 Naftis 命名空间 |
本地运行
数据移植
1 | # 执行 sql语句 |
启动 API 服务
- Linux
1 | make build && ./bin/naftis-api start -c config/in-local.toml |
或
1 | ./run |
- Mac OS
1 | GOOS=darwin GOARCH=amd64 make build && ./bin/naftis-api start -c config/in-local.toml |
或
1 | GOOS=darwin GOARCH=amd64 ./run |
配置 Nginx 代理
1 | cp tool/naftis.conf <your-nginx-conf-directory>/naftis.conf |
启动前端 Node 代理
1 | cd src/ui |
预览
dashboard
dashboard 页面集成了一些常用的图表,比如请求成功率、4XX 请求数量等。
服务管理
服务详情
服务详情页面可以查看查看已部署到 Kubernetes 中服务信息。
服务 Pod 和拓扑图等
服务详情页面可以查看指定服务 Pod 和拓扑图等信息。
任务模板管理
任务模板列表
任务模板列表也可以查看已经添加好的任务模板卡片列表。
查看指定模板
点击“查看模板”可以查看指定模板信息。
新增模板
点击“新增模板”可以向系统中新增自定义模板。
创建任务
初始化变量值。
确认变量值。
提交创建任务的分步表单。
Istio 诊断
Istio 诊断页面可以查看 Istio Service 和 Pod 状态。
Docker 镜像
Naftis 的 API 和 UI 镜像已经发布到 Docker Hub 上,见 api 和 ui。
开发者指南
获取源码
1 | go get github.com/xiaomi/naftis |
配置环境变量
将下述环境变量添加到 ~/.profile
。我们强烈推荐通过 autoenv 来配置环境变量。
1 | # 根据环境改变 GOOS 和 GOARCH 变量 |
如果你使用 autoenv,则输入 cd .
来使环境变量生效。
Go 依赖
我们目前使用 dep 管理依赖。
1 | # 安装 dep |
代码风格
其他指令
1 | make # 编译所有 targets |
其他
Naftis 目前已在 Github 开源 ,目前功能还比较薄弱,希望更多志同道合的朋友一起参与进来共同完善落地 Istio 生态。
https://github.com/xiaomi/naftis
作者
郑伟,小米信息技术部基础架构组
招聘
小米信息部武汉研发中心,信息部是小米公司整体系统规划建设的核心部门,支撑公司国内外的线上线下销售服务体系、供应链体系、ERP体系、内网OA体系、数据决策体系等精细化管控的执行落地工作,服务小米内部所有的业务部门以及 40 家生态链公司。
同时部门承担大数据基础平台研发和微服务体系建设落,语言涉及 Java、Go,长年虚位以待对大数据处理、大型电商后端系统、微服务落地有深入理解和实践的各路英雄。
欢迎投递简历:jin.zhang(a)xiaomi.com
更多技术文章:小米信息部技术团队
扫描二维码,分享此文章