add ScalerReconciler to canary and refactor hpa out of deployment controller

Signed-off-by: Sanskar Jaiswal <sanskar.jaiswal@weave.works>
This commit is contained in:
Sanskar Jaiswal
2022-06-07 13:43:11 +05:30
parent 4ea5a48f43
commit fa595e160c
5 changed files with 316 additions and 24 deletions
+29 -2
View File
@@ -178,6 +178,11 @@ func (c *Controller) advanceCanary(name string, namespace string) {
return
}
var scalerReconciler canary.ScalerReconciler
if cd.Spec.AutoscalerRef != nil {
scalerReconciler = c.canaryFactory.ScalerReconciler(cd.Spec.AutoscalerRef.Kind)
}
// init Kubernetes router
kubeRouter := c.routerFactory.KubernetesRouter(cd.Spec.TargetRef.Kind, labelSelector, labelValue, ports)
@@ -213,6 +218,14 @@ func (c *Controller) advanceCanary(name string, namespace string) {
return
}
if scalerReconciler != nil {
err = scalerReconciler.ReconcilePrimaryScaler(cd, true)
if err != nil {
c.recordEventWarningf(cd, "%v", err)
return
}
}
// change the apex service pod selector to primary
if err := kubeRouter.Reconcile(cd); err != nil {
c.recordEventWarningf(cd, "%v", err)
@@ -304,7 +317,7 @@ func (c *Controller) advanceCanary(name string, namespace string) {
}
// check if analysis should be skipped
if skip := c.shouldSkipAnalysis(cd, canaryController, meshRouter, err, retriable); skip {
if skip := c.shouldSkipAnalysis(cd, canaryController, meshRouter, scalerReconciler, err, retriable); skip {
return
}
@@ -322,6 +335,13 @@ func (c *Controller) advanceCanary(name string, namespace string) {
// route traffic back to primary if analysis has succeeded
if cd.Status.Phase == flaggerv1.CanaryPhasePromoting {
if scalerReconciler != nil {
err = scalerReconciler.ReconcilePrimaryScaler(cd, false)
if err != nil {
c.recordEventWarningf(cd, "%v", err)
return
}
}
c.runPromotionTrafficShift(cd, canaryController, meshRouter, provider, canaryWeight, primaryWeight)
return
}
@@ -694,7 +714,7 @@ func (c *Controller) runAnalysis(canary *flaggerv1.Canary) bool {
return true
}
func (c *Controller) shouldSkipAnalysis(canary *flaggerv1.Canary, canaryController canary.Controller, meshRouter router.Interface, err error, retriable bool) bool {
func (c *Controller) shouldSkipAnalysis(canary *flaggerv1.Canary, canaryController canary.Controller, meshRouter router.Interface, scalerReconciler canary.ScalerReconciler, err error, retriable bool) bool {
if !canary.SkipAnalysis() {
return false
}
@@ -725,6 +745,13 @@ func (c *Controller) shouldSkipAnalysis(canary *flaggerv1.Canary, canaryControll
return true
}
if scalerReconciler != nil {
if err := scalerReconciler.ReconcilePrimaryScaler(canary, false); err != nil {
c.recordEventWarningf(canary, "%v", err)
return true
}
}
// shutdown canary
if err := canaryController.ScaleToZero(canary); err != nil {
c.recordEventWarningf(canary, "%v", err)