GitHub - XiaoMi/naftis: An excellent dashboard for Istio built with love.
source link: https://github.com/XiaoMi/naftis
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
README.md
Naftis
Naftis is a web-based dashboard for Istio. It helps user manage their Istio tasks more easily. Using Naftis we can custom our own task templates, then build task from them and execute it.
Dockmentation
- Naftis
Code Structure
. ├── bin # directory store binary ├── config # directory store configuration files │ ├── in-cluster.toml # in Kubernetes cluster configuration file │ ├── in-local.toml # in local machine configuration file ├── install # Helm Charts │ └── helm │ ├── mysql │ └── naftis ├── src # source code │ ├── api # backend server source code │ │ ├── bootstrap # store start arguments │ │ ├── executor # execute tasks from task queue │ │ ├── handler # HTTP handlers │ │ ├── log # log package wraps zap │ │ ├── middleware # HTTP middlewares │ │ ├── model # common models │ │ ├── router # HTTP routers │ │ ├── service # some wraped services │ │ ├── storer # db storer │ │ ├── util # utilities │ │ ├── version # provides build-in version message │ │ ├── worker # task worker │ │ └── main.go # index of backend server │ └── ui # frontend source code │ ├── build # webpack scripts │ ├── src # truly frontend source code │ ├── package.json │ ├── package-lock.json │ ├── postcss.config.js │ ├── README-CN.md │ └── README.md ├── tool # some shell and migrate scripts │ ├── img │ ├── apppkg.sh │ ├── build.sh │ ├── clean.sh # clean up Naftis │ ├── conn.sh │ ├── genmanifest.go # generate manifest for Naftis deployment in Kubernetes │ ├── gentmpl.go │ ├── naftis.sql # Naftis migrate sql scripts │ ├── naftis.conf # Naftis Nginx configuration file │ └── version.sh ├── vendor # go dependencies ├── Dockerfile.api # backend image dockerfile ├── Dockerfile.ui # frontend image dockerfile ├── Gopkg.lock # dep depencies version lock file ├── Gopkg.toml # dep depencies version primarily hand-edited file ├── LICENSE ├── Makefile # project's makefile ├── mysql.yaml # Kubernetes Naftis API and UI manifest, generate by Helm ├── naftis.yaml # Kubernetes Naftis MySQL manifest, generate by Helm ├── README-CN.md ├── README.md └── run # shortcut script for local running
Features
- Integrates with some real-time dashboards
- Customizable task template
- Support Rollback specific task
- Optimized Istio service graph with supporting of specifying particular root service node
- With diagnose data of Istio services and pods
- Out of the box, easy deployment with
kubectl
commands - Istio 1.0 supported
Requirements
- Istio > 1.0
- Kubernetes >= 1.9.0
- HIUI >= 1.0.0
HIUI
Naftis dashboard use powerful HIUI (A React based UI components which released by Xiaomi FE Team) to built responsive UI, more reference:
https://github.com/XiaoMi/hiui
Quick Started
kubectl create namespace naftis && kubectl apply -n naftis -f mysql.yaml && kubectl apply -n naftis -f naftis.yaml # port forward Naftis kubectl -n naftis port-forward $(kubectl -n naftis get pod -l app=naftis-ui -o jsonpath='{.items[0].metadata.name}') 8080:80 & # explorer http://localhost:8080/ with your browser, default user name and password is "admin".
Detailed Deployments
Running Under Kubernetes Cluster
# create Naftis namespace
$ kubectl create namespace naftis
# ensure Naftis namespace is created
$ kubectl get namespace naftis
NAME STATUS AGE
naftis Active 18m
# deploy Naftis MySQL service
$ kubectl apply -n naftis -f mysql.yaml
# ensure MySQL service is deployed
NAME READY STATUS RESTARTS AGE
naftis-mysql-c78f99d6c-kblbq 0/1 Running 0 9s
naftis-mysql-test 1/1 Running 0 10s
# deploy Naftis API and UI service
kubectl apply -n naftis -f naftis.yaml
# ensure Naftis all services is correctly defined and running
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
# browse Naftis via port-forward
kubectl -n naftis port-forward $(kubectl -n naftis get pod -l app=naftis-ui -o jsonpath='{.items[0].metadata.name}') 8080:80 &
Explorer http://localhost:8080/ with your browser, default user name and password is "admin".
Running Under Local Machine
Migration
# run migrate sql script mysql> source ./tool/naftis.sql; # modify in-local.toml and replace with your own MySQL DSN.
Start API Server
- Linux
make build && ./bin/naftis-api start -c config/in-local.toml # building and starting naftis-api
or
./run
- Mac OS
GOOS=darwin GOARCH=amd64 make build && ./bin/naftis-api start -c config/in-local.toml # building and starting naftis-api
or
GOOS=darwin GOARCH=amd64 ./run
Modify Nginx Proxy Config
cp tool/naftis.conf <your-nginx-conf-directory>/naftis.conf # modify naftis.conf and then reload Nginx
Start Node Proxy Server
cd src/ui npm install npm run dev # start node proxy # Explorer http://localhost:5200/ with your browser.
Previews
Dashboard
Services
Service Detail
Service Pod
Task Templates
Task Tpl
Task View
Task New
Create Task
Istio Diagnosis
Docker Images
Naftis api and ui image has been published on Docker Hub in api and ui.
Developer's Guide
Fetch source code
go get github.com/xiaomi/naftis
Setting environment variables
Add the follow exports to your ~/.profile. autoenv is also strongly recommended.
# 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"
If you choose autoenv to export environment variables, type cd .
to make it work.
Go Dependency
We use dep to manage our go dependencies.
# install dep go get -u github.com/golang/dep dep ensure -v # install dependcies
Code Style
Other Directives
make # make with all targets make build # build api binaries, frontend assets, and Kubernetes manifest make build.api # build backend binaries make build.ui # build frontend assets make build.manifest # build Kubernetes manifest make fmt # go fmt codes make lint # lint codes make vet # vet codes make test # run tests make tar # compress directories make docker # build docker images make docker.api # build backend docker images make docker.ui # build frontend docker images make push # push images to docker.io ./bin/naftis-api -h # show help messages ./bin/naftis-api version # show binary build version messages ./tool/cleanup.sh # clean up Naftis
Architecture
TODO List
- Add testcases
- Supporting query Istio resource
- Add Links of Grafana, Jaeger, Prometheus
License
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK