Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 5 additions & 9 deletions pkg/reconciler/autoscaling/kpa/controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,15 +24,13 @@ import (

networkingclient "knative.dev/networking/pkg/client/injection/client"
sksinformer "knative.dev/networking/pkg/client/injection/informers/networking/v1alpha1/serverlessservice"
endpointsinformer "knative.dev/pkg/client/injection/kube/informers/core/v1/endpoints"
podinformer "knative.dev/pkg/client/injection/kube/informers/core/v1/pod"
servingclient "knative.dev/serving/pkg/client/injection/client"
"knative.dev/serving/pkg/client/injection/ducks/autoscaling/v1alpha1/podscalable"
metricinformer "knative.dev/serving/pkg/client/injection/informers/autoscaling/v1alpha1/metric"
painformer "knative.dev/serving/pkg/client/injection/informers/autoscaling/v1alpha1/podautoscaler"
pareconciler "knative.dev/serving/pkg/client/injection/reconciler/autoscaling/v1alpha1/podautoscaler"

"knative.dev/networking/pkg/apis/networking"
"knative.dev/pkg/configmap"
"knative.dev/pkg/controller"
"knative.dev/pkg/kmeta"
Expand Down Expand Up @@ -62,7 +60,6 @@ func NewController(
logger := logging.FromContext(ctx)
paInformer := painformer.Get(ctx)
sksInformer := sksinformer.Get(ctx)
endpointsInformer := endpointsinformer.Get(ctx)
podsInformer := podinformer.Get(ctx)
metricInformer := metricinformer.Get(ctx)
psInformerFactory := podscalable.Get(ctx)
Expand All @@ -77,9 +74,8 @@ func NewController(
SKSLister: sksInformer.Lister(),
MetricLister: metricInformer.Lister(),
},
endpointsLister: endpointsInformer.Lister(),
podsLister: podsInformer.Lister(),
deciders: deciders,
podsLister: podsInformer.Lister(),
deciders: deciders,
}
impl := pareconciler.NewImpl(ctx, c, autoscaling.KPA, func(impl *controller.Impl) controller.Options {
logger.Info("Setting up ConfigMap receivers")
Expand Down Expand Up @@ -123,9 +119,9 @@ func NewController(
sksInformer.Informer().AddEventHandler(handleMatchingControllers)
metricInformer.Informer().AddEventHandler(handleMatchingControllers)

// Watch all the private service endpoints.
endpointsInformer.Informer().AddEventHandler(cache.FilteringResourceEventHandler{
FilterFunc: pkgreconciler.LabelFilterFunc(networking.ServiceTypeKey, string(networking.ServiceTypePrivate), false),
// Watch the knative pods.
podsInformer.Informer().AddEventHandler(cache.FilteringResourceEventHandler{
FilterFunc: pkgreconciler.LabelExistsFilterFunc(serving.RevisionLabelKey),
Handler: controller.HandleAll(impl.EnqueueLabelOfNamespaceScopedResource("", serving.RevisionLabelKey)),
})

Expand Down
25 changes: 10 additions & 15 deletions pkg/reconciler/autoscaling/kpa/kpa.go
Original file line number Diff line number Diff line change
Expand Up @@ -59,10 +59,9 @@ type podCounts struct {
type Reconciler struct {
*areconciler.Base

endpointsLister corev1listers.EndpointsLister
podsLister corev1listers.PodLister
deciders resources.Deciders
scaler *scaler
podsLister corev1listers.PodLister
deciders resources.Deciders
scaler *scaler
}

// Check that our Reconciler implements pareconciler.Interface
Expand Down Expand Up @@ -127,29 +126,25 @@ func (c *Reconciler) ReconcileKind(ctx context.Context, pa *pav1alpha1.PodAutosc
if err != nil {
return fmt.Errorf("error reconciling SKS: %w", err)
}
// Propagate service name.
pa.Status.ServiceName = sks.Status.ServiceName

// Compare the desired and observed resources to determine our situation.
// We fetch private endpoints here, since for scaling we're interested in the actual
// state of the deployment.
ready, notReady := 0, 0

// Propagate service name.
pa.Status.ServiceName = sks.Status.ServiceName
podCounter := resourceutil.NewPodAccessor(c.podsLister, pa.Namespace, pa.Labels[serving.RevisionLabelKey])
// Currently, SKS.IsReady==True when revision has >0 ready pods.
if sks.IsReady() {
podEndpointCounter := resourceutil.NewScopedEndpointsCounter(c.endpointsLister, pa.Namespace, sks.Status.PrivateServiceName)
ready, err = podEndpointCounter.ReadyCount()
ready, err = podCounter.ReadyCount()
if err != nil {
return fmt.Errorf("error checking endpoints %s: %w", sks.Status.PrivateServiceName, err)
return fmt.Errorf("error getting ready pods %s: %w", sks.Status.PrivateServiceName, err)
}

notReady, err = podEndpointCounter.NotReadyCount()
notReady, err = podCounter.NotReadyCount()
if err != nil {
return fmt.Errorf("error checking endpoints %s: %w", sks.Status.PrivateServiceName, err)
return fmt.Errorf("error getting not ready pods %s: %w", sks.Status.PrivateServiceName, err)
}
}

podCounter := resourceutil.NewPodAccessor(c.podsLister, pa.Namespace, pa.Labels[serving.RevisionLabelKey])
pending, terminating, err := podCounter.PendingTerminatingCount()
if err != nil {
return fmt.Errorf("error checking pods for revision %s: %w", pa.Labels[serving.RevisionLabelKey], err)
Expand Down
Loading