随着目前 k8s 的使用越来越广泛,也对一些其他技术解决方案产生了改变,这里就讲下 如何在 k8s 部署的 python 项目中非侵入式的收集到 coverage。项目地址:Github
RUN pip install coverage==4.5.1
RUN apt-get install screen
containers:
- name: server
image: server:latest
tty: true
command: ['screen', '-S', 'coverage', 'coverage', 'run', '--branch', '--concurrency=gevent', '--parallel-mode', '/code/server/application.py']
lifecycle:
preStop:
exec:
command:
- "bash"
- "-c"
- |
kill -SIGINT 9
coverage combine;
coverage xml -i
curl -X POST tool-upload.tool.svc.cluster.local:5000/upload -F "file=@coverage.xml" -F pod="server" //将coverage.xml 通过接口上传到nfs
tool-upload.tool.svc.cluster.local:5000 是使用 k8s 的内部地址的服务,规则是{server}.{namespace}.svc.cluster.local:{port},然后通过这个接口把 coverage.xml 传到固定的地方,我这边是在 k8s 集群里部署了一个上传服务,大家也可以本地起一个上传服务只要 ip 能通就行。
这个服务可以 从flask_app_k8s这个文件中里 进行部署
docker build -t tool-upload:v0.1 . #docker build 出上传服务的进行
kubectl create namespace tool #创建namespace
kubectl create -f tool_upload.yaml #创建上传文件的服务,在yaml中配置了 nfs,这样就可以把coverage上传到这个xml中