专栏首页搜云库技术团队小米正式开源Istio管理面板Naftis

小米正式开源Istio管理面板Naftis

Naftis 是一个基于 web 的 Istio dashboard,通过任务模板的方式来帮助用户更方便地执行 Istio 任务。 用户可以在 Naftis 中定义自己的任务模板,并填充变量来构造单个或多个构造任务实例,从而完成各种服务治理功能。

功能

1、内部集成了一些常用 dashboard

2、可定制的任务模板支持

3、支持回滚指定任务

4、支持指定根服务节点的服务拓扑图

5、提供查看 Istio 的 Services 和 Pod 的支持

6、开箱即用,通过 Kubectl 相关指令即可快速部署

支持 Istio 1.0

依赖

目前 Naftis 仅支持 Kubernetes,不支持其他容器调度平台。

1、Istio > 1.0

2、Kubernetes >= 1.9.0

3、HIUI >= 1.0.0

HIUI

Naftis 前端 UI 使用由小米前端组开源的 React 组件 HIUI 构建,参考:

https://github.com/XiaoMi/hiui

快速开始

kubectl create namespace naftis && kubectl apply -n naftis -f mysql.yaml && kubectl apply -n naftis -f naftis.yaml
# 通过端口转发的方式访问Naftis
kubectl -n naftis port-forward $(kubectl -n naftis get pod -l app=naftis-ui -o jsonpath='{.items[0].metadata.name}') 8080:80 &
# 打开浏览器访问 http://localhost:8080,默认用户名和密码分别为admin、admin。

详细的部署流程

Kubernetes集群内运行

# 创建Naftis命名空间
$ kubectl create namespace naftis
# 确认Naftis命名空间已创建
$ kubectl get namespace naftis
NAME           STATUS    AGE
naftis         Active    18m
# 部署Naftis MySQL服务
$ kubectl apply -n naftis -f mysql.yaml
# 确认MySQL已部署
NAME                           READY     STATUS    RESTARTS   AGE
naftis-mysql-c78f99d6c-kblbq   1/1       Running   0          9s
naftis-mysql-test              1/1       Running   0          10s
# 部署Naftis API和UI服务
kubectl apply -n naftis -f naftis.yaml
# 确认Naftis所有的服务已经正确定义并正常运行中
kubectl get svc -n naftis
NAME           TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
naftis-api     ClusterIP      10.233.3.144    <none>        50000/TCP      7s
naftis-mysql   ClusterIP      10.233.57.230   <none>        3306/TCP       55s
naftis-ui      LoadBalancer   10.233.18.125   <pending>     80:31286/TCP   6s
kubectl get pod -n naftis
NAME                           READY     STATUS    RESTARTS   AGE
naftis-api-0                   1/2       Running   0          19s
naftis-mysql-c78f99d6c-kblbq   1/1       Running   0          1m
naftis-mysql-test              1/1       Running   0          1m
naftis-ui-69f7d75f47-4jzwz     1/1       Running   0          19s
# 端口转发访问Naftis
kubectl -n naftis port-forward $(kubectl -n naftis get pod -l app=naftis-ui -o jsonpath='{.items[0].metadata.name}') 8080:80 &
# 打开浏览器,访问 http://localhost:8080 即可。默认用户名和密码分别为admin、admin。

本地运行

数据移植

# 执行sql语句
mysql> source ./tool/naftis.sql;
# 将in-local.toml中的数据库的DSN配置替换成本地数据库实例的DSN。

启动API服务

  • Linux
make build && ./bin/naftis-api start -c config/in-local.toml

./run
  • Mac OS
GOOS=darwin GOARCH=amd64 make build && ./bin/naftis-api start -c config/in-local.toml

GOOS=darwin GOARCH=amd64 ./run

配置Nginx代理

cp tool/naftis.conf <your-nginx-conf-directory>/naftis.conf
# 酌情修改naftis.conf文件并reload nginx

启动前端Node代理

cd src/ui
npm install
npm run dev
# 打开浏览器访问 http://localhost:5200。

预览

Dashboard

Dashboard页面集成了一些常用的图表,比如请求成功率、4XX请求数量等。

服务管理

服务详情

服务详情页面可以查看查看已部署到Kubernetes中服务信息。

服务Pod和拓扑图等

服务详情页面可以查看指定服务Pod和拓扑图等信息。

任务模板管理

任务模板列表

任务模板列表也可以查看已经添加好的任务模板卡片列表。

查看指定模板

点击“查看模板”可以查看指定模板信息。

新增模板

点击“新增模板”可以向系统中新增自定义模板。

创建任务

初始化变量值。

确认变量值。

提交创建任务的分步表单。

Istio诊断

Istio诊断页面可以查看Istio Service和Pod状态。

Docker镜像

Naftis的API和UI镜像已经发布到Docker Hub上,见api和ui。

开发者指南

获取源码

go get github.com/xiaomi/naftis

配置环境变量

将下述环境变量添加到 ~/.profile。我们强烈推荐通过autoenv来配置环境变量。

# 根据环境改变GOOS和GOARCH变量
export GOOS="linux"   # 或替换成"darwin"
export GOARCH="amd64" # 或替换成"386"
# 把USER修改成你自己的DockerHub用户名
export USER="sevennt"
export HUB="docker.io/$USER"

如果你使用autoenv,则输入 cd.来使环境变量生效。

Go依赖

我们目前使用dep管理依赖。

# 安装dep
go get -u github.com/golang/dep
dep ensure -v # 安装Go依赖

其他指令

make                 # 编译所有 targets
make build           # 编译 Go 二进制文件、前端静态资源、Kubernetes清单
make build.api       # 编译 Go 二进制文件
make build.ui        # 编译前端静态资源
make build.manifest  # 编译Kubernetes清单
make fmt   # 格式化 Go 代码
make lint  # lint Go 代码
make vet   # vet Go 代码
make test  # 运行测试用例
make tar   # 打包成压缩文件
make docker      # 编译 docker 镜像
make docker.api  # 编译后端 docker 镜像
make docker.ui   # 编译前端 docker 镜像
make push        # 把镜像推送到 Docker Hub
./bin/naftis-api -h       # 显示帮助信息
./bin/naftis-api version  # 显示版本信息
./tool/genmanifest.sh  # 本地渲染Kubernetes部署清单
./tool/cleanup.sh      # 清理已部署的Naftis

其他

Naftis目前已在Github开源 ,目前功能还比较薄弱,希望更多志同道合的朋友一起参与进来共同完善落地Istio生态。

https://github.com/XiaoMi/naftis

往期精彩文章

福利:1024程序员节送 1500G 架构师视频

陆奇:除了写好代码,工程师怎样才算优秀?

面试题:2018最全Redis面试题整理

面试题:96道常考Java面试题,分享给大家,含答案

面试题:70道Spring面试题和答案

微服务:架构下静态数据通用缓存机制

微服务:小型系统如何“微服务”开发

微服务:深入理解为什么要设计幂等性的服务

微服务:有赞服务化架构演进

缓存穿透:缓存雪崩解决方案分析

搭建大众点评CAT实时应用监控平台

应用消息中间件设计可以解决哪些实际问题?

理解大型分布式架构的演进历史、技术原理、最佳实践

大数据推荐系统实时架构和离线架构

本文分享自微信公众号 - 搜云库技术团队(souyunku),作者:作者:小米

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-10-29

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Java并发之CAS原理分析

    在java语言之前,并发就已经广泛存在并在服务器领域得到了大量的应用。所以硬件厂商老早就在芯片中加入了大量直至并发操作的原语,从而在硬件层面提升效率。在inte...

    搜云库技术团队
  • 这么牛x的,亿级用户分布式存储架构,我推荐,收藏,转发

    分布式数据库和分布式存储是分布式系统中难度最大、挑战最大,也是最容易出问题的地方。互联网公司只有解决分布式数据存储的问题,才能支撑更多次亿级用户的涌入。

    搜云库技术团队
  • 随意摸底三问,你了解多少并发量、吞吐量的知识?

    并发量,是指同时访问服务器站点的连接数[引用百度]。指同一时刻向服务器发送的请求数。

    搜云库技术团队
  • 去哪儿副总裁:“大数据杀熟”等于自杀

    为何同一个航班不同的用户预订价格不同?为何搜索时一个价、付款时又一个价?平台是否会对消费较高的用户加价?……对于这些发生于在线旅游平台疑似被“杀熟”的问题,4月...

    加米谷大数据
  • macos 系统深度学习者安装软件

    AI之禅
  • 【Nature重磅】机器学习验证全新脑图谱,脑科学及AI超凡一步

    【新智元导读】今天Nature刊文,华盛顿大学研究人员结合多种成像技术,利用机器学习系统,绘制了全新的人脑图谱。通过使用更精确的划分方法,研究人员证实了此前已经...

    新智元
  • Kotlin中的后备字段backing fieldKotlin中的backing field

    什么是Kotlin中的后备字段backing field?这个问题确实困扰了我很久。

    deep_sadness
  • 使用maven的一个最简单的例子

    版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。

    Jerry Wang
  • Python办公自动化|光速对比并提取两份Word/Excel中的不同元素

    如果你经常与Excel或Word打交道,那么从两份表格/文档中找到不一样的元素是一件让人很头疼的工作,当然网上有很多方法、第三方软件教你如何对比两份文件。本文就...

    刘早起
  • 深度解析:腾讯云分布式数据库 DCDB

    腾讯云分布式数据库(DCDB)是部署在腾讯云上的一种,面向OLTP业务支持自动水平拆分(分表)的share nothing架构的分布式数据库。DCDB也是随着腾...

    腾讯云数据库团队

扫码关注云+社区

领取腾讯云代金券