# SPDX-FileCopyrightText: Copyright (c) 2024-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. # SPDX-License-Identifier: Apache-2.0 # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: controller-gen.kubebuilder.io/version: v0.16.4 helm.sh/resource-policy: keep name: dynamographdeploymentscalingadapters.nvidia.com spec: group: nvidia.com names: kind: DynamoGraphDeploymentScalingAdapter listKind: DynamoGraphDeploymentScalingAdapterList plural: dynamographdeploymentscalingadapters shortNames: - dgdsa singular: dynamographdeploymentscalingadapter scope: Namespaced versions: - additionalPrinterColumns: - description: DynamoGraphDeployment name jsonPath: .spec.dgdRef.name name: DGD type: string - description: Service name jsonPath: .spec.dgdRef.serviceName name: SERVICE type: string - description: Current replicas jsonPath: .status.replicas name: REPLICAS type: integer - jsonPath: .metadata.creationTimestamp name: AGE type: date name: v1alpha1 schema: openAPIV3Schema: description: |- DynamoGraphDeploymentScalingAdapter provides a scaling interface for individual services within a DynamoGraphDeployment. It implements the Kubernetes scale subresource, enabling integration with HPA, KEDA, and custom autoscalers. The adapter acts as an intermediary between autoscalers and the DGD, ensuring that only the adapter controller modifies the DGD's service replicas. This prevents conflicts when multiple autoscaling mechanisms are in play. properties: apiVersion: description: |- APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources type: string kind: description: |- Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds type: string metadata: type: object spec: description: DynamoGraphDeploymentScalingAdapterSpec defines the desired state of DynamoGraphDeploymentScalingAdapter properties: dgdRef: description: DGDRef references the DynamoGraphDeployment and the specific service to scale. properties: name: description: Name of the DynamoGraphDeployment minLength: 1 type: string serviceName: description: ServiceName is the key name of the service within the DGD's spec.services map to scale minLength: 1 type: string required: - name - serviceName type: object replicas: description: |- Replicas is the desired number of replicas for the target service. This field is modified by external autoscalers (HPA/KEDA/Planner) or manually by users. format: int32 minimum: 0 type: integer required: - dgdRef - replicas type: object status: description: DynamoGraphDeploymentScalingAdapterStatus defines the observed state of DynamoGraphDeploymentScalingAdapter properties: lastScaleTime: description: LastScaleTime is the last time the adapter scaled the target service. format: date-time type: string replicas: description: |- Replicas is the current number of replicas for the target service. This is synced from the DGD's service replicas and is required for the scale subresource. format: int32 type: integer selector: description: |- Selector is a label selector string for the pods managed by this adapter. Required for HPA compatibility via the scale subresource. type: string type: object type: object served: true storage: true subresources: scale: labelSelectorPath: .status.selector specReplicasPath: .spec.replicas statusReplicasPath: .status.replicas status: {}