概念
什么是kiali?
Kiali是uber开源的软件,基于prometheus对istio实现流量的可视化;支持直接对istio crd(Detination/Virtualservice)的操作,实现流量规则的在线编辑,实现流量的控制。
什么是Jaeger
Jaeger是流量分布式Tracing,主要解决的场景是将传统的单体服务被拆分成不同的微服务后,流量访问节点增多后可视化追踪的问题。传统的单体服务,对外暴露一个端口,提供一个访问路径,客户端只需要请求这个一接口就可以获取数据。但是当其中一个较小的故障时,就会导致整个服务不可用,难以满足互联网高并发的场景。如果将这个庞大的服务进行拆分成不同的模块的微小型服务后,又会使整个访问调用链变得复杂。一个请求进来后,经过N个递归调用,最终获得数据。在这么多的调用时,如果有一次的调用出了问题,如何快速定位问题,就显得非常有必要。同时,如果知道每一次的调用时,请求响应时间,就能帮助开发人员找出瓶颈所在,并优化程序。
在使用Jager时,在请求进来后,会生成一个TracingID,放入Http Header头部,该TracingID会伴随请求整个生命周期,利用该ID,绘制出所有的请求的流量拓扑,包含每一跳的响应时间及正常到达情况。
Kiali安装
提供两种安装方式
使用 kiali operator方式安装
- 使用operator来安装
helm repo add kiali https://kiali.org/helm-charts
helm search repo kiali
helm pull kiali/kiali-operator
helm install kiali-operator kiali-operator-1.26.1.tgz -n istio-system
- 部署了Operator之后,需要部署一个kiali cr资源,cr中定义kiali的配置及版本,就部署出kiali的pod。
Operator监控该cr中的值,当发生变化时,会动态来调整kiali pod来达到与定义的配置一致性,即调谐的过程。
Operator本质上是使用ansible来操作资源。
我的cr文件如下,其中自定义了prometheus的路径,默认是istio-system下的prometheus:
apiVersion: kiali.io/v1alpha1
kind: Kiali
metadata:
namespace: istio-system
name: kiali
annotations:
ansible.operator-sdk/verbosity: "1"
spec:
istio_component_namespaces:
prometheus: kubesphere-monitoring-system
# istio_namespace: "istio-system"
view_only_mode: true
auth: anonymous
prometheus:
cache_duration: 10
cache_enabled: true
cache_expiration: 300
url: "http://prometheus-k8s.kubesphere-monitoring-system.svc:9090"
由于kiali的operator有问题,部署出来后,代码一直报错,如issue。
报错原因是:kiali这个命令在启动的时候,打印日志的参数-v
不支持,尝试更换几个版本后没有解决,不知道Kiali官方是怎么测试的。因此我的做法是直接把deployment的yaml获取到后,把这个参数去掉,然后直接apply deployment yaml
文件就正常了。
直接使用chart安装kiali server
$ helm search repo kiali
NAME CHART VERSION APP VERSION DESCRIPTION
kiali/kiali-server 1.26.1 v1.26.1 Kiali is an open source project for service mes...
$ helm install kiali kiali-server -f custom-values.yaml
由于我的prometheus及Kiali的配置并非默认,因此需要自定义,values.yaml配置文件如下:
# custom-values.yaml
nameOverride: "kiali"
fullnameOverride: "kiali"
istio_namespace: "istio-system" # default is where Kiali is installed
auth:
strategy: "anonymous"
deployment:
accessible_namespaces:
- "**"
additional_service_yaml: {}
affinity:
node: {}
pod: {}
pod_anti: {}
custom_dashboards:
excludes: ['']
includes: ['*']
image_name: quay.io/kiali/kiali
image_pull_policy: "Always"
image_pull_secrets: []
image_version: v1.26.1
ingress_enabled: true
logger:
log_format: "text"
log_level: "info"
time_field_format: "2006-01-02T15:04:05Z07:00"
sampler_rate: "1"
node_selector: {}
override_ingress_yaml:
metadata: {}
pod_annotations: {}
pod_labels: {}
priority_class_name: ""
replicas: 1
resources: {}
secret_name: "kiali"
service_annotations: {}
service_type: ""
tolerations: []
version_label: v1.26.1
view_only_mode: false
external_services:
prometheus:
url: http://prometheus-k8s.kubesphere-monitoring-system:9090
tracing:
in_cluster_url: http://jaeger-query.istio-system.svc:16686
custom_dashboards:
enabled: true
server:
port: 20001
metrics_enabled: true
metrics_port: 9090
web_root: ""
- ui访问 kiali,可以直接把pod的端口暴露下,可以使用port-forwad,也可以使用svc NodePort方式。
效果如下:
查询所有的namespace下的流量拓扑图
功能比较强大,还可以直接修改istio DestinationRules
修改VirtualService
与Jaeger的集成