👋 欢迎来到吴老二技术博客,专注运维 / 数据库 / 云原生
首页/云原生/正文

kubernetes的crontabhpa自动伸缩

吴
吴老二
2021-12-24云原生1116 次浏览0 条评论

遇到这种情景,平时的业务量不是很高,但是有时候做活动,流量是突然之间上升,由于伸缩是根据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
这是在举例,在生产环境中不会这样,如果你的活动时间很短,但是也要在活动的前三十分钟启动起来准备好环境,如果时间过短服务还没启动就会造成用户体验不佳。
文章底部广告位在后台「广告设置」填写广告代码后显示

评论 0

评论需 登录 后发表(注册并验证邮箱)。
还没有评论,来抢沙发~