kubernetes的crontabhpa自动伸缩

avatar 2021年12月24日18:12:01 评论 486 次浏览

遇到这种情景,平时的业务量不是很高,但是有时候做活动,流量是突然之间上升,由于伸缩是根据CPU和内存的阀值做的,但是瞬间的流量上升,导致容器启动后无法支撑大的流量处理,所以需要在流量来之前做一下伸缩,这样就不会在伸缩时无法支撑导致服务down了。下面看一下如何做crontabhpa,在没有做crontabhpa之前需要做一下认证,阿里云提供了kubernetes-cronhpa-controller,我这边Fork了一份,https://github.com/wolf27w/kubernetes-cronhpa-controller

根据README中的描述,我们需要先安装kubernetes-cronhpa-controller,并认证。下载后进入目录后执行

#安装 CRD
[wolf@wulaoer.org🔥🔥🔥🔥 ~]# kubectl apply -f config/crds/autoscaling.alibabacloud.com_cronhorizontalpodautoscalers.yaml
#安装RBAC
[wolf@wulaoer.org🔥🔥🔥🔥 ~]# kubectl apply -f config/rbac/rbac_role.yaml
[wolf@wulaoer.org🔥🔥🔥🔥 ~]# kubectl apply -f config/rbac/rbac_role_binding.yaml
#部署 kubernetes-cronhpa-controller
[wolf@wulaoer.org🔥🔥🔥🔥 ~]# kubectl apply -f config/deploy/deploy.yaml
#验证
[wolf@wulaoer.org🔥🔥🔥🔥 ~]# kubectl get deployments kubernetes-cronhpa-controller -n kube-system -o wide
NAME                            READY   UP-TO-DATE   AVAILABLE   AGE    CONTAINERS                      IMAGES                                                                           SELECTOR
kubernetes-cronhpa-controller   1/1     1            1           148m   kubernetes-cronhpa-controller   registry.aliyuncs.com/acs/kubernetes-cronhpa-controller:v1.4.0-d8a6afa7-aliyun   app=kubernetes-cronhpa-controller,controller-tools.k8s.io=2.0

验证成功后说明已经安装好了,下面我们找一个服务测试一下看看是否可以做到定时伸缩,下面是我的定时伸缩文件内容:

apiVersion: autoscaling.alibabacloud.com/v1beta1
kind: CronHorizontalPodAutoscaler
metadata:
  labels:
    controller-tools.k8s.io: "1.0"
  name:  base-gateway-service-crontab-hpa #定时伸缩名称
  namespace: beijing-qa #伸缩的命名空间
spec:
   scaleTargetRef:
      apiVersion: apps/v1  #注意1.21版本使用apps/v1,1.18版本用的是apps/v1beta2
      kind: Deployment
      name: base-gateway-service #需要伸缩的服务名称
   jobs:
   - name: "scale-down"
     schedule: "30 */1 * * * *" #缩时间
     targetSize: 2       #保留副本数
     runOnce: true
   - name: "scale-up"
     schedule: "0 */1 * * * *" #伸时间
     targetSize: 4  #共伸缩副本数

下面验证一下,每分钟的零秒伸缩到4个副本,30秒到时候缩到2个副本,因为在伸缩的时候服务启动时间过长,所以这里的伸缩一直在创建和删除。

[wolf@wulaoer.org🔥🔥🔥🔥 ~]# kubectl get pod -n beijing-qa
base-gateway-service-66685f77fd-7qs8z                1/1     Running             0          19m
base-gateway-service-66685f77fd-gwzk8                0/1     ContainerCreating   0          1s
base-gateway-service-66685f77fd-l25qx                1/1     Running             0          105m
base-gateway-service-66685f77fd-qszrv                0/1     Terminating         0          61s
base-gateway-service-66685f77fd-rbnzr                0/1     ContainerCreating   0          1s
base-gateway-service-66685f77fd-rdjvd                1/1     Terminating         0          61s

这是在举例,在生产环境中不会这样,如果你的活动时间很短,但是也要在活动的前三十分钟启动起来准备好环境,如果时间过短服务还没启动就会造成用户体验不佳。

avatar

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: