搭建VECROsim笔记
1. 相关资料:
- 代码仓库:https://github.com/etigerstudio/VECROsim
- 相关论文: VECROsim: A Versatile Metric-oriented Microservice Fault Simulation System
搭建过程中有一些问题是镜像问题,除了第一次启动minikube需要设置proxy外,拉取完所有镜像后,请stop minikube,然后重新启动:
minikube start --image-mirror-country=cn --registry-mirror https://dockerhub.azk8s.cn
2. 部署过程:
部署过程中如果遇到问题,但是一直摸不着头脑,不如
minikube dashboard
看一下(比如查看镜像名是否正确), 错误信息更加准确有效~如果想进入minikube虚拟机:
minikube ssh
如果想进入pod:
kubectl exec -it <pod> -n <namespace> -- /bin/sh
如果觉得minikube给的资源太少:
1
2
3
minikube stop
minikube config set cpus 4
minikube start
2.1 安装minikube和Go:
https://minikube.sigs.k8s.io/docs/start/
1 |
|
1 |
|
2.2 创建集群:
注意,创建集群时,如若需要VPN. 代理的配置请见笔记:Ubuntu下配置代理
minikube会创建一个网卡用于和主机通信,如果使用VPN务必将minikube的网卡IP忽略掉,这个IP地址在部署过程中会给出提示,所以不必担心不知道
minikube start --cpus=8 --memory 8196 --disk-size 32g --docker-env http_proxy=http://192.168.8.2:7890 --docker-env https_proxy=http://192.168.8.2:7890 --docker-env no_proxy=localhost,127.0.0.1,10.96.0.0/12,192.168.59.0/24,192.168.49.0/24,192.168.39.0/24,192.168.49.2 --image-mirror-country=cn
1 |
|
2.3 构建镜像:
- vecro-base: https://github.com/etigerstudio/vecro-base
- vecro-mongodb: https://github.com/etigerstudio/vecro-mongodb
推荐使用我修改后的仓库:
- vecro-base: https://github.com/QiliangFan/vecro-base
- vecro-mongodb: https://github.com/QiliangFan/vecro-mongodb
1 |
|
!!!! 注意,请勿使用latest的mongo镜像,必然会失败!经过测试,mongo:4.2可正常运行。
1 |
|
这里我已经build好并且把镜像上传了,大家要使用的话只需要加个前缀
fanqiliang/
或者直接使用我fork的仓库。
1 |
|
2.4 部署monitoring infrastructure:
进入VECROsim源码根目录
1 |
|
2.5 部署microservice system:
进入VECROsim源码根目录
1 |
|
注意,如果pod镜像拉取失败,如果想要删除pod可以这样,pod会自动重新生成
kubectl delete pods --all -n social
如果想要彻底删除这些pod只需要删除对应namespace即可
kubectl delete namespace social
如果想立即强制kill并删除容器可以这样
kubectl delete pods --all -n social --force --grace-period=0
有时是mongo镜像拉取失败,可以进入虚拟机拉取:
1 |
|
2.5 施加负载:
1 |
|
2.6 注入故障:
Inject the a network delay fault (3 minutes 500ms network delay to service posts-storage) to the system.
在注入故障过程中,作者借用了chaos-mesh工具, 这个工具是专门用来模拟微服务中故障注入的。 因此需要先安装chaos-mesh,推荐使用helm安装chaos-mesh: https://chaos-mesh.org/docs/production-installation-using-helm/
注意,如果helm安装chaos-mesh后pod启动失败,极有可能是网络不好。在搭建过程中我就反复失败,但是网络环境好时,就一下成功了。 (注意,特别需要设置好vpn~)
如果是因为拉取镜像失败,可以提前拉取:
minikube ssh docker pull ghcr.io/chaos-mesh/chaos-mesh:v2.5.0
可以通过反复卸载安装chaos-mesh来重启:
1
2helm uninstall chaos-mesh -n chaos-mesh
helm install chaos-mesh chaos-mesh/chaos-mesh -n=chaos-mesh或者这样重启:
kubectl rollout restart deployment/chaos-controller-manager -n chaos-mesh
1 |
|
2.7 获取数据:
开放端口:
参考:https://blog.marcnuri.com/prometheus-grafana-setup-minikube
2.7.1: Grafana
其实这个没必要.
用户/密码都是admin
1 |
|
2.7.2: Promethues
1 |
|
然后prometheus就会输出url,访问url就能获取指标了,这也是后面python脚本需要修改的地方:
这里部署了两个prometheus服务,所有有两
NAMESPACE | NAME | TARGET PORT | URL |
---|---|---|---|
simple | prometheus-np | port-1/9090 | http://192.168.49.2:32165 |
port-2/8080 | http://192.168.49.2:32261 |
⚠️ vecrosim获取的指标都是在vecro-base中自定义的指标,因此需要了解Prometheus通过编程自定义指标的方式。
有一个小问题,minikube虚拟机创建时时区是UTC+0,和主机的时区不同导致时间不一样,因此需要更改系统时区。
1 |
|
有一些参数需要配置:
1 |
|