Naftis(https://github.com/xiaomi/naftis) 是一個基於 web 的 Istio dashboard,經過任務模板的方式來幫助用戶更方便地執行 Istio 任務。 用戶能夠在 Naftis 中定義本身的任務模板,並填充變量來構造單個或多個構造任務實例,從而完成各類服務治理功能。css
. ├── bin # 存放編譯好的 Go 二進制文件 ├── config # 存放配置文件 │ ├── in-cluster.toml # 在 Kubernetes 集羣中啓動的配置 │ └── in-local.toml # 本地啓動的配置 ├── install # Helm Charts │ └── helm │ ├── mysql │ └── naftis ├── src # 源碼 │ ├── api # 後端 Go API 服務源碼 │ │ ├── bootstrap # 啓動 Go API 服務相關參數包 │ │ ├── executor # task 隊列執行器 │ │ ├── handler # HTTP handlers │ │ ├── log # 基於 zap 封裝的 log 包 │ │ ├── middleware # HTTP 中間件 │ │ ├── model # 全局通用 model │ │ ├── router # HTTP 路由 │ │ ├── service # 封裝好的服務 │ │ ├── storer # db storer │ │ ├── util # 工具類包 │ │ ├── version # 提供運行時的版本信息等顯示的支持 │ │ ├── worker # task worker │ │ └── main.go # Go API 入口 │ └── ui # 前端源碼 │ ├── build # Webpack 打包腳本 │ ├── src # 前端 js 源碼 │ ├── package.json │ ├── package-lock.json │ ├── postcss.config.js │ ├── README-CN.md │ └── README.md ├── tool # Makefile 可能會用到的一些編譯腳本 │ ├── img │ ├── apppkg.sh │ ├── build.sh │ ├── cleanup.sh # 清理 Naftis │ ├── conn.sh │ ├── genmanifest.go # 生成 Kubernetes 部署清單 │ ├── gentmpl.go │ ├── naftis.sql # Naftis 數據遷移腳本 │ ├── naftis.conf # Naftis Nginx 配置文件 │ └── version.sh ├── vendor # Go 依賴 ├── Dockerfile.api # 編譯 Go API 鏡像的 dockerfile ├── Dockerfile.ui # 編譯前端 UI 鏡像的 dockerfile ├── Gopkg.lock # dep 版本鎖定文件,由 dep 生成 ├── Gopkg.toml # dep 版本約束文件,用戶可編輯 ├── LICENSE ├── Makefile # Makefile文件 ├── mysql.yaml # Kubernetes MySQL 部署清單,由 Helm 生成 ├── naftis.yaml # Kubernetes API 和 UI 部署清單,由 Helm 生成 ├── README-CN.md ├── README.md └── run # 本地快速啓動腳本
目前 Naftis 僅支持 Kubernetes,不支持其餘容器調度平臺。前端
Naftis 前端 UI 使用由小米前端組開源的 React 組件 HIUI 構建,參考:mysql
# 下載最新 release 文件和部署清單 wget -O - https://raw.githubusercontent.com/XiaoMi/naftis/master/tool/getlatest.sh | bash # 在本地 Kubernetes 集羣或 Minikuber 上 kubectl create namespace naftis && kubectl apply -n naftis -f mysql.yaml && kubectl apply -n naftis -f naftis.yaml # 在各雲服務商提供的 Kubernetes 集羣上,好比 GKE、阿里雲、AWS kubectl create namespace naftis && kubectl apply -n naftis -f mysql-cloud.yaml && kubectl apply -n naftis -f naftis-cloud.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。
# 下載最新 release 文件和部署清單 wget -O - https://raw.githubusercontent.com/XiaoMi/naftis/master/tool/getlatest.sh | bash # 建立 Naftis 命名空間 $ kubectl create namespace naftis # 確認 Naftis 命名空間已建立 $ kubectl get namespace naftis NAME STATUS AGE naftis Active 18m # 部署 Naftis MySQL 服務(本地 Kuberenetes 集羣) $ kubectl apply -n naftis -f mysql.yaml # 部署 Naftis MySQL 服務(雲服務商提供的 Kuberenetes 集羣) $ kubectl apply -n naftis -f mysql-cloud.yaml # 確認 MySQL 已部署 NAME READY STATUS RESTARTS AGE naftis-mysql-c78f99d6c-kblbq 0/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 替換成本地 MySQL 實例的 DSN。
make build && ./bin/naftis-api start -c config/in-local.toml -i=false
./run
GOOS=darwin GOARCH=amd64 make build && ./bin/naftis-api start -c config/in-local.toml -i=false
GOOS=darwin GOARCH=amd64 ./run
cp tool/naftis.conf <your-nginx-conf-directory>/naftis.conf # 酌情修改 naftis.conf 文件並 reload nginx
cd src/ui npm install npm run dev # 打開瀏覽器訪問 http://localhost:5200。
Dashboard 頁面集成了一些經常使用的圖表,好比請求成功率、4XX請求數量等。linux
服務詳情頁面能夠查看查看已部署到 Kubernetes 中服務信息。nginx
服務詳情頁面能夠查看服務 Pod 和拓撲圖等信息。git
任務模板列表也能夠查看已經添加好的任務模板卡片列表。github
點擊「查看模板」能夠查看指定模板信息。golang
點擊「新增模板」能夠向系統中新增自定義模板。添加模板名稱、模板簡述、模板內容後, 點擊 "Generate rows"按鈕,Naftis 會解析模板內容,提取變量列表。web
用戶能夠自行修改變量屬性,包括變量註釋、變量的表單元素類型、變量的數據元等。sql
注:默認提供了 Host
、Namespace
兩個數據源,若是用戶對某個變量指定了這兩個數據源,則須要同時將變量的表單元素類型設置爲 SELECT
。
初始化變量值。
確認變量值。
提交建立任務的分佈表單。
Istio 診斷頁面能夠查看 Istio Service 和 Pod 狀態。
Naftis 的 API 和 UI 鏡像已經發布到 Docker Hub 上,見 api 和 ui。
go get github.com/xiaomi/naftis
將下述環境變量添加到 ~/.profile。咱們強烈推薦經過 autoenv 來配置環境變量。
# Change GOOS and GOARCH with your environment. export GOOS="linux" # or replace with "darwin", etc. export GOARCH="amd64" # or replace with "386", etc. # Change USER with your Docker Hub account for pulling and pushing custom docker container builds. export USER="sevennt" export HUB="docker.io/$USER"
若是你使用 autoenv,則輸入 cd .
來使環境變量生效。
咱們目前使用 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 # 顯示版本信息 helm template install/helm/naftis --name naftis --namespace naftis > naftis.yaml # 本地渲染 Kubernetes 清單 ./tool/cleanup.sh # 清理已部署的 Naftis
更多參考: