Understanding GCP Provider Reconcile Rates and API Call Volume

Last updated: April 9, 2026

When running GCP providers with a large number of managed resources, you may notice high API call volumes to GCP services. This article explains the default reconcile behavior and how to optimize API usage.

Default Reconcile Behavior

By default, managed resources are re-queued for observation approximately every 10 minutes via the provider's --poll interval. Each observation may result in one or more GCP API read calls, so with thousands of managed resources, significant API traffic is expected during normal operation.

Provider Restart Behavior

When a provider restarts, its controller-runtime cache is rebuilt from scratch. During this initialization:

  • All managed resources are re-queued for reconciliation immediately

  • The provider does not wait for the next scheduled poll interval

  • This creates a visible burst of API traffic as all resources perform an observation cycle

This behavior is expected and necessary to ensure drift detection and status accuracy after restart.

Reducing API Call Volume

If API quota pressure becomes a concern, you can tune the following settings:

Increase Poll Interval

Adjusting the poll interval is the most effective way to reduce overall API traffic:

  • --poll=30m reduces drift checks by roughly 3×

  • --poll=1h reduces them by roughly 6×

Limit Reconcile Rate

Use --max-reconcile-rate to throttle how quickly reconciliation requests are processed. This applies to both steady-state operation and post-restart bursts.

Configuration via DeploymentRuntimeConfig

Both settings can be configured using a DeploymentRuntimeConfig:

apiVersion: pkg.crossplane.io/v1beta1
kind: DeploymentRuntimeConfig
metadata:
  name: provider-rate-config
spec:
  deploymentTemplate:
    spec:
      template:
        spec:
          containers:
          - name: package-runtime
            args:
            - --max-reconcile-rate=10
            - --poll=30m

Reference this configuration from your Provider:

apiVersion: pkg.crossplane.io/v1
kind: Provider
metadata:
  name: provider-gcp-kms
spec:
  package: xpkg.upbound.io/upbound/provider-gcp-kms:v2.x.x
  runtimeConfigRef:
    name: provider-rate-config

Important Notes

  • The --max-reconcile-rate flag must be applied to the provider pod itself via DeploymentRuntimeConfig

  • Provider restarts will always cause API traffic spikes, but this is typically small relative to total monthly volume

  • Reducing concurrency can help spread processing over longer windows and soften restart bursts