背景:
- 有两个服务,server 负责主要后端请求,bill 负责计量计费请求。
- 服务都是使用 helm 部署。
- 测试提了一个缺陷,说全部服务没有配置hpa。
解决一
按照之前的代码结构添加了hpa后,发现:
➜ kubectl get hpa
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
server Deployment/server <unknown>/50%, <unknown>/50% 2 5 2 2m4s
网上查了hpa的文档后,发现是Deployment里面没有配置resource request/limit。
按照要求添加了resource request/limit后,确实可以了。
➜ kubectl get hpa
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
server Deployment/server 6%/50%, 1%/50% 2 5 2 23m
解决二
但 server 服务是可以了,bill 服务还是不行。网上各种找答案,对比配置,最终在一篇文章里找到答案:大意是说hpa是按照pod label查找的,于是根据bill的pod label查询出来发现还多了一个pre-job pod,这个pre-job是升级的时候用来更新数据库/crd等资源的pod。
➜ kubectl get po -l app.kubernetes.io/instance=bill,app.kubernetes.io/managed-by=Helm,app.kubernetes.io/name=bill,app.kubernetes.io/version=v1.0.0,helm.sh/chart=bill-v1.0.0
NAME READY STATUS RESTARTS AGE
bill-7ff45cc64b-d8fm5 1/1 Running 0 138m
bill-7ff45cc64b-swsfb 1/1 Running 0 138m
bill-pre-job-q8m28 0/1 Completed 0 138m
然后给对应的这个pre-job 模板里也加上resource request/limit后,确实可以了。