开发i9s
的初衷是提高服务网格的运维效率,我们希望有一款工具可以像 k9s 管理k8s
资源那样,可视化的管理istio
。得益于k9s
代码的可扩展性, 我们基于k9s-v0.25.18 的代码,进行了二次开发,提供了istio
资源可视化以及调试接口的能力,再次感谢k9s
。
常常遇到的场景是,某服务治理规则不生效,需要排查。可能会分以下几个步骤进行排查:
-
查找服务
pods
, 查看envoy
的config_dump
. 一般来说会先查找pod
, 这里以view
服务为例kubectl -n skiff-demo-sidecar get pods demo-stock-viewer-sidecar-8547788687-lk48m 2/2 Running 0 15d
-
执行
envoy debug
命令查看config_dump
文件kubectl -n skiff-demo-sidecar exec demo-stock-viewer-sidecar-8547788687-lk48m -- curl 127.0.0.1:15000/config_dump | less
-
这时候会遇到类似
config_dump
中没有相关配置文件,控制面是否下发的问题 -
目标转移到控制面,查找
istio pod
kubectl -n istio-system get pods istiod-112-5fb95d6fff-k94pz 1/1 Running 0 46h
-
然后首先看
istio
中是否有该配置k exec istiod-112-5fb95d6fff-k94pz -- curl 127.0.0.1:15014/debug/configz | less
-
如果发现没有配置,可能是
istio
的上层问题(没下发)。如果是istio
的问题,可以接着看下发到 view 服务的实际数据是否正常kubectl -n istio-system exec istiod-112-5fb95d6fff-k94pz -- curl 127.0.0.1:15014/debug/config_dump?proxyID=demo-stock-viewer-sidecar-8547788687-lk48m | less
-
到这步基本就能判断出问题出在了控制面还是数据面
-
接下来可能需要更具体的排查
i9s
的宗旨是提高istio
的运维效率,从运维场景章节可以看到,配置是否下发问题的定位就需要多个kubectl
交互命令,而i9s
可以极大提升该过程的查询效率。目前i9s
提供的功能包括
-
istio
调试接口,包括configz
,adsz
,config_dump
等接口信息查看 -
enovy
调试接口,包括config_dump
,cluster
,endpoints
等接口信息查看 -
revision
查看,从revision
视角提供注入规则、deployment资源清单、mesh
配置文件等信息
前提:需要指定kubeconfig
, 且目前以适配1.12为主, 由于不同版本接口不同,可能导致查询其他版本的接口时出现问题。
- 镜像方式(需要将kubeconfig文件挂载进容器内)
运行最新版本i9s
tag=$(curl https://api.github.com/repos/slime-io/i9s/releases/latest -s|grep tag_name|sed 's/.*tag_name": "//g; s/",.*//g')
docker run -it --net=host -v $HOME/.kube/config:/root/.kube/config slimeio/i9s:$tag
- 二进制方式, 该安装脚本会检查本地是否有
kubectl
, 如果没有需用户自行安装。之后会检查jq less 等命令是否存在,如果不存在会自动安装, 之后会运行镜像,并将镜像中的 i9s istioctl 可执行文件移动至 /usr/bin 目录下
sh ./install.sh
如果没有拉取 install.sh
, 可以执行下面命令在线安装最新版本的i9s
tag=$(curl https://api.github.com/repos/slime-io/i9s/releases/latest -s|grep tag_name|sed 's/.*tag_name": "//g; s/",.*//g')
tar_tag=$(curl https://api.github.com/repos/slime-io/i9s/releases/latest -s|grep tag_name|sed 's/.*tag_name": "v//g; s/",.*//g')
source <(curl -fsSL https://github.com/slime-io/i9s/archive/$tag.tar.gz | tar xzO i9s-$tar_tag/install.sh)
由于有些minikube
权限问题,可能需要将kubeconifg
中指定的client-key
的目录一同挂进容器
- 按下
:istio
切换至isito revision
视图,可以选在不同rev
- 选中
rev
按下enter
进入rev
详情页面, 包含注入规则、deployment
清单和mesh configuration
- 选中
istiod configuratiojn
按下enter
展示了mesh
配置项详情
- 在
istio revision
视图下,选中rev
并按下m
(mesh)进入isito api
视图, 展示可调试的istio
接口列表
- 选中
istio/configz
按下enter
展示debug/configz
信息, 支持less
操作,按q
退出
- 选中服务(接入网格的服务)所在
pod
并按下m
(mesh) 进入envoy api
视图,展示可调试的envoy
接口信息
- 选中
envoy/config_dump
进入/config_dump
接口,支持less
操作,按q
退出
i9s
提供了istio
可视化基础操作能力, 之后计划结合istioctl
和isito
提供配置的分析统计能力,持续演进。