服務網格Istio管理面板-Naftis

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                         # 本地快速啓動腳本

功能

  • 內部集成了一些經常使用 dashboard
  • 可定製的任務模板支持
  • 支持回滾指定任務
  • 支持指定根服務節點的服務拓撲圖
  • 提供查看 Istio 的 Services 和 Pod 的支持
  • 開箱即用,經過 Kubectl 相關指令便可快速部署
  • 支持 Istio 1.0

依賴

目前 Naftis 僅支持 Kubernetes,不支持其餘容器調度平臺。前端

  • Istio > 1.0
  • Kubernetes >= 1.9.0
  • HIUI >= 1.0.0

HIUI

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。

詳細的部署流程

Kubernetes 集羣內運行

# 下載最新 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。

啓動 API 服務

  • Linux
make build && ./bin/naftis-api start -c config/in-local.toml -i=false
  • 或:
./run
  • Mac OS
GOOS=darwin GOARCH=amd64 make build && ./bin/naftis-api start -c config/in-local.toml -i=false
  • 或:
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請求數量等。linux

服務管理

服務詳情

服務詳情頁面能夠查看查看已部署到 Kubernetes 中服務信息。nginx

服務 Pod 和拓撲圖

服務詳情頁面能夠查看服務 Pod 和拓撲圖等信息。git

任務模板管理

任務模板列表

任務模板列表也能夠查看已經添加好的任務模板卡片列表。github

查看指定模板

點擊「查看模板」能夠查看指定模板信息。golang

新增模板

點擊「新增模板」能夠向系統中新增自定義模板。添加模板名稱、模板簡述、模板內容後, 點擊 "Generate rows"按鈕,Naftis 會解析模板內容,提取變量列表。web

用戶能夠自行修改變量屬性,包括變量註釋、變量的表單元素類型、變量的數據元等。sql

注:默認提供了 HostNamespace 兩個數據源,若是用戶對某個變量指定了這兩個數據源,則須要同時將變量的表單元素類型設置爲 SELECT

建立任務

初始化變量值。

確認變量值。

提交建立任務的分佈表單。

Istio 診斷

Istio 診斷頁面能夠查看 Istio Service 和 Pod 狀態。

Docker 鏡像

Naftis 的 API 和 UI 鏡像已經發布到 Docker Hub 上,見 apiui

開發者指南

獲取源碼

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 . 來使環境變量生效。

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 # 顯示版本信息

helm template install/helm/naftis --name naftis --namespace naftis > naftis.yaml # 本地渲染 Kubernetes 清單

./tool/cleanup.sh # 清理已部署的 Naftis

架構

更多參考:

相關文章
相關標籤/搜索