NVIDIA / NVIDIA/nvcf

Standardize optional HPA support for eligible NVCF control-plane services

Open
#400 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

needs-triage
Dominant language
Go
Stars
218
Forks
72
Avg merge
1d 12h
Merged PRs (30d)
427

Description

Is this related to a problem? Please describe.

NVCF operators need a supported way to scale control-plane services as API, invocation, and operational load grows.

Horizontal Pod Autoscaler (HPA) support is currently inconsistent across control-plane charts:

  • Some services include conditional autoscaling/v2 HPA resources.
  • Some charts expose autoscaling values without rendering an HPA.
  • Other services have no documented autoscaling contract.
  • Certain singleton, stateful, or topology-sensitive components cannot safely scale horizontally.

Operators can manage replicas or external HPA resources themselves, but this requires service-specific knowledge and can conflict with Helm-managed replica counts.

This is separate from [function autoscaling tracked in #15](https://github.com/NVIDIA/nvcf/issues/15). This request concerns Kubernetes replicas for services running in the control-plane cluster.

Describe the solution you'd like

Define a consistent, optional HPA contract for NVCF control-plane services that are verified to be horizontally safe.

The implementation should:

  1. Classify each control-plane service as:

    • HPA supported.
    • HPA conditionally supported, with documented constraints.
    • HPA unsupported, with the reason and recommended scaling procedure.
  2. Provide consistent autoscaling configuration for supported charts:

service:
  autoscaling:
    enabled: false
    minReplicas: 1
    maxReplicas: 5
    targetCPUUtilizationPercentage: 80
    # targetMemoryUtilizationPercentage: 80
    # behavior: {}
  1. When autoscaling is enabled:

    • Render an autoscaling/v2 HorizontalPodAutoscaler.
    • Target the correct Deployment.
    • Omit the Deployment’s spec.replicas field so Helm does not reset HPA decisions.
    • Validate required resource requests and replica bounds.
  2. Preserve existing fixed-replica behavior when autoscaling is disabled.

  3. Keep autoscaling disabled by default until each service has been validated.

  4. Document metrics prerequisites, supported topologies, safe defaults, troubleshooting, and the distinction between HPA and NVCF function autoscaling.

  5. Add Helm rendering tests and an end-to-end scaling test for at least one supported control-plane service.

Describe alternatives you've considered

Manual replica management

Operators can monitor services and update replica counts manually. This remains a useful fallback but requires human intervention and does not respond consistently to changing load.

Operator-maintained HPA resources

Operators can create HPAs outside the NVCF charts. This is flexible but duplicates service-specific configuration, can conflict with Helm, and makes unsupported configurations easier to deploy.

Custom metrics, KEDA, or VictoriaMetrics-backed scaling

Application-level signals may eventually provide better scaling decisions than CPU or memory. They also require additional metric adapters and design work. The initial implementation could use Kubernetes resource metrics while leaving room for custom metrics later.

Vertical Pod Autoscaler or static sizing guidance

VPA and sizing guidance can improve resource allocation, but they do not replace horizontal scaling for services that safely support multiple replicas.

Additional context

Existing repository references:

The initial implementation should not:

  • Apply HPA automatically to every control-plane component.
  • Autoscale stateful or singleton services without a component-specific design.
  • Remove documented single-replica topology restrictions.
  • Require custom metrics infrastructure.
  • Perform control-plane node autoscaling or infrastructure provisioning.

By submitting this issue, you agree to follow our code of conduct and our contributing guidelines.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by comparing deploy/helm/grpc-proxy/grpc-proxy/templates/hpa.yaml, deploy/helm/ratelimiter/nvcf-ratelimiter/templates/hpa.yaml, and deploy/helm/helm-reval/values.yaml, then read the control-plane operations and observability docs. Done means eligible services have a documented HPA classification and consistent optional Helm behavior, with rendering coverage and an end-to-end scaling test for at least one supported service.

Written by the indexing model from the issue text.

Assessment

Tech stack
helm, kubernetes
Domain
devops, documentation, infrastructure, testing
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.