@@ -34,6 +34,7 @@ import (
3434 "github.com/cortexlabs/cortex/pkg/types/userconfig"
3535 istioclientnetworking "istio.io/client-go/pkg/apis/networking/v1beta1"
3636 kapps "k8s.io/api/apps/v1"
37+ kautoscaling "k8s.io/api/autoscaling/v2beta2"
3738 kcore "k8s.io/api/core/v1"
3839)
3940
@@ -51,6 +52,7 @@ type resources struct {
5152 apiDeployment * kapps.Deployment
5253 gatewayDeployment * kapps.Deployment
5354 gatewayService * kcore.Service
55+ gatewayHPA * kautoscaling.HorizontalPodAutoscaler
5456 gatewayVirtualService * istioclientnetworking.VirtualService
5557}
5658
@@ -287,6 +289,7 @@ func getK8sResources(apiConfig userconfig.API) (resources, error) {
287289 var deployment * kapps.Deployment
288290 var gatewayDeployment * kapps.Deployment
289291 var gatewayService * kcore.Service
292+ var gatewayHPA * kautoscaling.HorizontalPodAutoscaler
290293 var gatewayVirtualService * istioclientnetworking.VirtualService
291294
292295 gatewayK8sName := getGatewayK8sName (apiConfig .Name )
@@ -308,6 +311,11 @@ func getK8sResources(apiConfig userconfig.API) (resources, error) {
308311 gatewayService , err = config .K8s .GetService (apiK8sName )
309312 return err
310313 },
314+ func () error {
315+ var err error
316+ gatewayHPA , err = config .K8s .GetHPA (gatewayK8sName )
317+ return err
318+ },
311319 func () error {
312320 var err error
313321 gatewayVirtualService , err = config .K8s .GetVirtualService (apiK8sName )
@@ -319,22 +327,43 @@ func getK8sResources(apiConfig userconfig.API) (resources, error) {
319327 apiDeployment : deployment ,
320328 gatewayDeployment : gatewayDeployment ,
321329 gatewayService : gatewayService ,
330+ gatewayHPA : gatewayHPA ,
322331 gatewayVirtualService : gatewayVirtualService ,
323332 }, err
324333}
325334
326335func applyK8sResources (api spec.API , prevK8sResources resources , queueURL string ) error {
327336 apiDeployment := apiDeploymentSpec (api , prevK8sResources .apiDeployment , queueURL )
328337 gatewayDeployment := gatewayDeploymentSpec (api , prevK8sResources .gatewayDeployment , queueURL )
338+ gatewayHPA , err := gatewayHPASpec (api )
339+ if err != nil {
340+ return err
341+ }
329342 gatewayService := gatewayServiceSpec (api )
330343 gatewayVirtualService := gatewayVirtualServiceSpec (api )
331344
332345 return parallel .RunFirstErr (
333346 func () error {
334- return applyK8sDeployment (api , prevK8sResources .apiDeployment , & apiDeployment )
347+ err := applyK8sDeployment (prevK8sResources .apiDeployment , & apiDeployment )
348+ if err != nil {
349+ return err
350+ }
351+
352+ if err := UpdateMetricsCron (& apiDeployment ); err != nil {
353+ return err
354+ }
355+
356+ if err := UpdateAutoscalerCron (& apiDeployment , api ); err != nil {
357+ return err
358+ }
359+
360+ return nil
361+ },
362+ func () error {
363+ return applyK8sDeployment (prevK8sResources .gatewayDeployment , & gatewayDeployment )
335364 },
336365 func () error {
337- return applyK8sDeployment ( api , prevK8sResources .gatewayDeployment , & gatewayDeployment )
366+ return applyK8sHPA ( prevK8sResources .gatewayHPA , & gatewayHPA )
338367 },
339368 func () error {
340369 return applyK8sService (prevK8sResources .gatewayService , & gatewayService )
@@ -345,7 +374,7 @@ func applyK8sResources(api spec.API, prevK8sResources resources, queueURL string
345374 )
346375}
347376
348- func applyK8sDeployment (api spec. API , prevDeployment * kapps.Deployment , newDeployment * kapps.Deployment ) error {
377+ func applyK8sDeployment (prevDeployment * kapps.Deployment , newDeployment * kapps.Deployment ) error {
349378 if prevDeployment == nil {
350379 _ , err := config .K8s .CreateDeployment (newDeployment )
351380 if err != nil {
@@ -364,15 +393,19 @@ func applyK8sDeployment(api spec.API, prevDeployment *kapps.Deployment, newDeplo
364393 return err
365394 }
366395 }
396+ return nil
397+ }
367398
368- if err := UpdateMetricsCron (newDeployment ); err != nil {
369- return err
399+ func applyK8sHPA (prevHPA * kautoscaling.HorizontalPodAutoscaler , newHPA * kautoscaling.HorizontalPodAutoscaler ) error {
400+ var err error
401+ if prevHPA == nil {
402+ _ , err = config .K8s .CreateHPA (newHPA )
403+ } else {
404+ _ , err = config .K8s .UpdateHPA (newHPA )
370405 }
371-
372- if err := UpdateAutoscalerCron (newDeployment , api ); err != nil {
406+ if err != nil {
373407 return err
374408 }
375-
376409 return nil
377410}
378411
@@ -403,6 +436,7 @@ func deleteBucketResources(apiName string) error {
403436
404437func deleteK8sResources (apiName string ) error {
405438 apiK8sName := operator .K8sName (apiName )
439+ gatewayK8sName := getGatewayK8sName (apiName )
406440
407441 err := parallel .RunFirstErr (
408442 func () error {
@@ -419,10 +453,13 @@ func deleteK8sResources(apiName string) error {
419453 return err
420454 },
421455 func () error {
422- gatewayK8sName := getGatewayK8sName (apiName )
423456 _ , err := config .K8s .DeleteDeployment (gatewayK8sName )
424457 return err
425458 },
459+ func () error {
460+ _ , err := config .K8s .DeleteHPA (gatewayK8sName )
461+ return err
462+ },
426463 func () error {
427464 _ , err := config .K8s .DeleteService (apiK8sName )
428465 return err
0 commit comments