我是 Istio 的新手。
我的问题是如何检测已经在 istio 中运行的服务中的故障?
如果出现故障,如何定义新版本服务的特定流量百分比?
谢谢。
我推荐使用 Kiali。Kiali 通过监控流量和报告来帮助您了解服务网格的结构和健康状况。
Kiali 是基于 Istio 的服务网格的管理控制台。它提供仪表板、可观察性,并允许您使用强大的配置和验证功能来操作您的网格。它通过推断流量拓扑来显示服务网格的结构并显示网格的运行状况。Kiali 提供详细的指标、强大的验证、Grafana 访问以及与 Jaeger 的分布式跟踪的强大集成。
安装 Kiali 的详细文档可以在安装指南中找到。
我创建了一个简单的示例来演示 Kiali 的实用性。
首先,我创建了一个db-app
具有两个可用版本 (v1
和v2
) 的应用程序,并使用单个服务公开它:
# cat db-app.yml
apiVersion: v1
kind: Service
metadata:
labels:
app: db-app
name: db-app
namespace: default
spec:
ipFamilies:
- IPv4
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
app: db-app
type: ClusterIP
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: db-app
version: v1
name: db-app-v1
spec:
replicas: 1
selector:
matchLabels:
app: db-app
version: v1
template:
metadata:
labels:
app: db-app
version: v1
spec:
containers:
- image: nginx
name: nginx
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: db-app
version: v2
name: db-app-v2
spec:
replicas: 1
selector:
matchLabels:
app: db-app
version: v2
template:
metadata:
labels:
app: db-app
version: v2
spec:
containers:
- image: nginx
name: nginx
# kubectl apply -f db-app.yml
service/db-app created
deployment.apps/db-app-v1 created
deployment.apps/db-app-v2 created
# kubectl get pod,svc
NAME READY STATUS RESTARTS AGE
pod/db-app-v1-59c8fb999c-bs47s 2/2 Running 0 39s
pod/db-app-v2-56dbf4c8d6-q24vm 2/2 Running 0 39s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/db-app ClusterIP 10.102.36.142 <none> 80/TCP 39s
此外,为了说明我们如何拆分流量,我为db-app
应用程序生成了一些流量:
# kubectl run test-traffic --image=nginx
pod/test-traffic created
# kubectl exec -it test-traffic -- bash
root@test-traffic:/# for i in $(seq 1 100000); do curl 10.102.36.142; done
...
现在在Kiali UI部分中,Graph
我们可以看到流量:
在该Services
部分中,我们可以使用流量转移向导轻松地在不同版本之间拆分流量:v1
注意:详细教程可以在 Kiali流量转移教程中找到。
v2
我们还可以监控我们的应用程序的状态。例如,我打破了v1
版本:
# kubectl set image deployment/db-app-v1 nginx=nnnginx
deployment.apps/db-app-v1 image updated
在 Kiali UI 中,我们看到v1
版本中的错误:
我建议您阅读Kali 官方教程以了解 Kali 的全部功能。