istio和cronjob一起使用的坑

背景:感觉k8s没有用多少资源,但是k8s总的request占比非常高,然后进行排查

排查过程

image.png

  • 从上图上来看,集群总cpu的limit值就很离谱,也看得出集群的使用率低的发指。说明request值还有降低的空间。

image.png

  • 从命名空间来看,production空间明显不正常,一个pod的request值平均是1,limit值更是达到2500

image.png

  • 这一查把我惊了,竟然有1000个pod,怪不得request和limit的值这么大

  • 这1000多个pod是cronjob产生的,因为这个命名空间配置了istio自动注入了,当cronjob中的容器跑完任务后,istio-proxy容器还是正常运行,导致整个pod没有退出。github.com/istio/istio… 从这个issue中找到了解决方案,就是在cronjob中的(cronjob.spec.jobTemplate.spec.metadata) metadata中annotation加上 sidecar.istio.io/inject: "false",然后写个脚本将存在的istio-proxy一一退出。curl --max-time 2 -s -f -XPOST http://127.0.0.1:15000/quitquitquit

kubectl exec -n production -t pod_name -c istio-proxy -- curl --max-time 2 -s -f -XPOST http://127.0.0.1:15000/quitquitquit

结果

image.png

  • 现在集群的limit和request看起来正常多了,但是使用率低的问题还是存在,后续在优化