Documentation
¶
Overview ¶
Package v1alpha1 contains API Schema definitions for the agents v1alpha1 API group. +kubebuilder:object:generate=true +groupName=agents.navix.sh
Index ¶
- Constants
- Variables
- type EmbeddedSandboxTemplate
- type PodCreationImagePolicy
- type PoolAutoscalingSpec
- type PoolScaleDownPolicy
- type PoolScaleUpMode
- type PoolScaleUpPolicy
- type SandboxPool
- type SandboxPoolList
- type SandboxPoolPhase
- type SandboxPoolSpec
- type SandboxPoolStatus
- type SandboxReservationSpec
- type SandboxRuntimeSpec
- type SandboxStatusDetail
- type SandboxStopReason
- type SandboxTemplate
- type SandboxTemplateList
- type SandboxTemplateSpec
- type SandboxTemplateStatus
- type TemplateVisibility
- type TemplateVisibilityRule
Constants ¶
const ( SandboxPoolLabelKey = "agentbox.navix.sh/sandbox-pool" SandboxPhaseLabelKey = "agentbox.navix.sh/sandbox-phase" SandboxIDLabelKey = "agentbox.navix.sh/sandbox-id" ManagedByLabelKey = "agentbox.navix.sh/managed-by" // SandboxPhase values for the agentbox sandbox lifecycle. SandboxPhaseIdle = "idle" SandboxPhaseRunning = "running" SandboxPhaseStarting = "starting" // Idle → (image pull) → Running SandboxPhaseStopping = "stopping" // Running → (image reset) → Idle SandboxPhaseFailed = "failed" ManagedBySandboxAPIServer = "sandbox-api-server" SandboxIDAnnotationKey = "agentbox.navix.sh/sandbox-id" SandboxClaimedAtAnnotationKey = "agentbox.navix.sh/claimed-at" SandboxStartedAtAnnotationKey = "agentbox.navix.sh/started-at" // SandboxIdleTimeoutAnnotationKey stores the idle timeout duration in seconds (e.g. "600"). // Written at claim time if TTL > 0. Read by IdleTimeoutReconciler. SandboxIdleTimeoutAnnotationKey = "agentbox.navix.sh/idle-timeout" // SandboxStartupTimeoutAnnotationKey stores the startup timeout duration in seconds (e.g. "120"). // Written at claim time when a startup timeout is resolved (from request or pool default). // Read by IdleTimeoutReconciler.cleanupTimedOutStartingPods to determine per-pod timeout. // Takes priority over the pool-level StartupTimeout when both are set. SandboxStartupTimeoutAnnotationKey = "agentbox.navix.sh/startup-timeout" // SandboxLastActiveAnnotationKey stores the RFC3339 time of the last HTTP request // proxied through ExtProc. Written asynchronously by ActivityTracker. SandboxLastActiveAnnotationKey = "agentbox.navix.sh/last-active" SandboxMetadataAnnotationKey = "agentbox.navix.sh/sandbox-metadata" SandboxManagedLabelKeysAnnotationKey = "agentbox.navix.sh/managed-label-keys" SandboxManagedAnnotationKeysAnnotationKey = "agentbox.navix.sh/managed-annotation-keys" // SandboxStopReasonAnnotationKey records why the sandbox was stopped. // Values: "Completed" | "Released" | "Failed" | "Canceled". Written by ReleaseSandboxPod. // Read by syncInplaceUpdatePhases on Stopping→Idle to perform deferred KV write. SandboxStopReasonAnnotationKey = "agentbox.navix.sh/stop-reason" // SandboxTerminatedAtAnnotationKey records the RFC3339 termination timestamp. SandboxTerminatedAtAnnotationKey = "agentbox.navix.sh/terminated-at" // SandboxFailureReasonAnnotationKey records the machine-readable failure cause. // e.g. "IdleTimeout", "OOMKilled", "Evicted" SandboxFailureReasonAnnotationKey = "agentbox.navix.sh/failure-reason" // SandboxFailureMessageAnnotationKey records the human-readable failure description. SandboxFailureMessageAnnotationKey = "agentbox.navix.sh/failure-message" // SandboxExitCodeAnnotationKey records the container exit code (decimal string). SandboxExitCodeAnnotationKey = "agentbox.navix.sh/exit-code" // SandboxRunningImagesAnnotationKey stores a JSON map[string]string of container // name → image captured at release time (before the idle image reset). SandboxRunningImagesAnnotationKey = "agentbox.navix.sh/running-images" // SandboxContainerIDAnnotationKey stores the runtime container ID (e.g. // "containerd://abc123…") captured at release time, before the in-place // update resets the pod to idle and clears StableContainerStatuses. SandboxContainerIDAnnotationKey = "agentbox.navix.sh/container-id" // SI Scheduler labels and annotations LabelTeam = "scheduling.navix.sh/team" LabelUser = "scheduling.navix.sh/user" // SandboxTemplateDocsAnnotationKey stores Markdown documentation for the template. // Read by the dashboard to display a documentation sheet. SandboxTemplateDocsAnnotationKey = "agentbox.navix.sh/docs" // SandboxTemplatePoolDocsAnnotationKey is the legacy annotation for pool-specific usage docs. // // Deprecated: ignored by the server; use SandboxTemplateDocsAnnotationKey instead. SandboxTemplatePoolDocsAnnotationKey = "agentbox.navix.sh/pool-docs" // SandboxPoolTemplateNameAnnotationKey records the source SandboxTemplate name. SandboxPoolTemplateNameAnnotationKey = "agentbox.navix.sh/template-name" // SandboxPoolTemplateVersionAnnotationKey records the source SandboxTemplate version at creation time. SandboxPoolTemplateVersionAnnotationKey = "agentbox.navix.sh/template-version" // SandboxPoolOverridesAnnotationKey stores a JSON-encoded PoolTemplateOverrides // object so SyncTemplate can re-apply all pool-level overrides on top of newer // template revisions. A single blob avoids per-field annotation proliferation as // the override surface grows (image, resourceMultiplier, imagePullSecret, PVCs, …). SandboxPoolOverridesAnnotationKey = "agentbox.navix.sh/overrides" // SandboxProtectionFinalizer is added to every Pool-managed Pod at creation time, // and reconcile backfills it onto pre-existing Pods after upgrade. // It guarantees the controller sees a DeletionTimestamp window before the pod is GC'd, // allowing sandbox history records to be written even when a pod is deleted externally // (e.g. kubectl delete pod, kubelet eviction). Without this finalizer an external pod // deletion may race past the controller's reconcile loop, permanently losing the // sandbox history record and stop metrics. // The finalizer stays attached for the pod lifetime and is removed only when // the pod is actually being deleted: // - syncDeletingPods after writing the terminal record for a terminating pod // - syncFailedPods before explicitly deleting an evicted/failed pod // - Controller scale-down, pool-deletion, and startup-timeout cleanup paths before Delete SandboxProtectionFinalizer = "agentbox.navix.sh/sandbox-protection" // SandboxPostStartHooksAnnotationKey stores JSON-encoded []PostStartHookAction. // Written at claim time when post-start hooks are requested (e.g. envd /init for env vars). // Consumed by the controller after Starting→Running; deleted on Stopping→Idle. SandboxPostStartHooksAnnotationKey = "agentbox.navix.sh/post-start-hooks" // SandboxScaleDownProtectedAnnotationKey is set on Idle Pods that have been // selected as scale-down candidates. The value is the RFC3339 timestamp when // the protection window started. Cleared if the Pod is claimed before deletion. SandboxScaleDownProtectedAnnotationKey = "agentbox.navix.sh/scale-down-protected" // PoolScaleUpPendingAnnotationKey is set on the SandboxPool when a Create // request triggered a scale-up. The value is the RFC3339 timestamp of the // trigger. Cleared by the Reconciler after processing. PoolScaleUpPendingAnnotationKey = "agentbox.navix.sh/scale-up-pending" // LabelSyncSource marks the origin of a resource. // "global" means the resource was created/synced via ws-proxy (global key manager). // Resources without this label (locally-created or legacy) are treated as non-global. // Intentionally mirrors the constant in pkg/utils/apikey so that the api/v1alpha1 package // can be used as the canonical source for all agentbox label/annotation keys. LabelSyncSource = "agentbox.io/sync-source" // LabelSyncSourceGlobal is the value for LabelSyncSource that indicates a globally-managed resource. LabelSyncSourceGlobal = "global" )
const ( // SandboxPoolConditionAvailable indicates whether the pool has idle pods ready to accept sandbox requests. SandboxPoolConditionAvailable = "Available" // SandboxPoolConditionScaling indicates whether the pool is currently scaling up or down. SandboxPoolConditionScaling = "Scaling" // SandboxPoolConditionDegraded indicates whether the pool has unhealthy or failed pods. SandboxPoolConditionDegraded = "Degraded" )
Condition type constants for SandboxPool.
const ( // Available condition reasons SandboxPoolReasonIdlePodsAvailable = "IdlePodsAvailable" // healthy idle pods are available SandboxPoolReasonNoIdlePodsAvailable = "NoIdlePodsAvailable" // no idle pods can accept requests // Scaling condition reasons SandboxPoolReasonScalingUp = "ScalingUp" // pool is scaling up SandboxPoolReasonScalingDown = "ScalingDown" // pool is scaling down SandboxPoolReasonReplicasReady = "ReplicasReady" // all replicas are up-to-date // Degraded condition reasons SandboxPoolReasonAllPodsHealthy = "AllPodsHealthy" // no unhealthy or failed pods SandboxPoolReasonUnhealthyIdlePods = "UnhealthyIdlePods" // idle pods are NotReady SandboxPoolReasonFailedPodsPresent = "FailedPodsPresent" // failed pods exist SandboxPoolReasonUnhealthyAndFailed = "UnhealthyAndFailedPods" // both unhealthy idle and failed pods )
Condition reason constants for SandboxPool.
Variables ¶
var ( // GroupVersion is group version used to register these objects. GroupVersion = schema.GroupVersion{Group: "agents.navix.sh", Version: "v1alpha1"} // SchemeBuilder is used to add go types to the GroupVersionKind scheme. SchemeBuilder = &scheme.Builder{GroupVersion: GroupVersion} // AddToScheme adds the types in this group-version to the given scheme. AddToScheme = SchemeBuilder.AddToScheme )
Functions ¶
This section is empty.
Types ¶
type EmbeddedSandboxTemplate ¶
type EmbeddedSandboxTemplate struct {
// Template defines the Pod template. ALL Pods in this Pool share the same
// resources (requests/limits). The image specified here is used as the IDLE image
// unless IdleImage is explicitly set.
// +kubebuilder:pruning:PreserveUnknownFields
// +kubebuilder:validation:Schemaless
// +optional
Template *corev1.PodTemplateSpec `json:"template,omitempty"`
// IdleImage is the image to use when Pods are in the idle state.
// If not specified, the image from Template.Spec.Containers[0].Image will be used.
// +optional
IdleImage string `json:"idleImage,omitempty"`
// Runtimes specifies the runtimes to use for the sandbox pods. Each runtime has a type and optional configuration.
// If not specified, a default runtime will be used.
// +listType=map
// +listMapKey=name
// +optional
Runtimes []SandboxRuntimeSpec `json:"runtimes,omitempty"`
}
func (*EmbeddedSandboxTemplate) DeepCopy ¶
func (in *EmbeddedSandboxTemplate) DeepCopy() *EmbeddedSandboxTemplate
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new EmbeddedSandboxTemplate.
func (*EmbeddedSandboxTemplate) DeepCopyInto ¶
func (in *EmbeddedSandboxTemplate) DeepCopyInto(out *EmbeddedSandboxTemplate)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type PodCreationImagePolicy ¶
type PodCreationImagePolicy string
PodCreationImagePolicy defines which image createPod should use. +kubebuilder:validation:Enum=PoolDefaultImage;IdleImage
const ( // PodCreationImagePolicyPoolDefaultImage preserves the template container image. // This matches the current createPod behavior and enables the same-image fast path. PodCreationImagePolicyPoolDefaultImage PodCreationImagePolicy = "PoolDefaultImage" // PodCreationImagePolicyIdleImage replaces the first container image with // spec.idleImage when a Pod is created, so Pods enter Idle faster. PodCreationImagePolicyIdleImage PodCreationImagePolicy = "IdleImage" )
type PoolAutoscalingSpec ¶
type PoolAutoscalingSpec struct {
// Enabled controls whether the PoolAutoscaler is active.
// When false (default), spec.replicas is the only source of truth and
// MinReplicas/MaxReplicas are ignored.
// +optional
// +kubebuilder:default=false
Enabled bool `json:"enabled,omitempty"`
// ScaleUpPolicy defines when and how the pool scales up.
// +optional
ScaleUpPolicy *PoolScaleUpPolicy `json:"scaleUpPolicy,omitempty"`
// ScaleDownPolicy defines when and how the pool scales down.
// +optional
ScaleDownPolicy *PoolScaleDownPolicy `json:"scaleDownPolicy,omitempty"`
}
PoolAutoscalingSpec defines the autoscaling configuration for a SandboxPool.
func (*PoolAutoscalingSpec) DeepCopy ¶
func (in *PoolAutoscalingSpec) DeepCopy() *PoolAutoscalingSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PoolAutoscalingSpec.
func (*PoolAutoscalingSpec) DeepCopyInto ¶
func (in *PoolAutoscalingSpec) DeepCopyInto(out *PoolAutoscalingSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type PoolScaleDownPolicy ¶
type PoolScaleDownPolicy struct {
// IdleTimeoutSeconds is the minimum duration (in seconds) a Pod must remain
// in Idle state before it becomes a candidate for scale-down.
// Defaults to 300 (5 minutes).
// +optional
// +kubebuilder:validation:Minimum=0
// +kubebuilder:default=300
IdleTimeoutSeconds int32 `json:"idleTimeoutSeconds,omitempty"`
// StabilizationSeconds is the minimum number of seconds between two consecutive
// scale-down events. Prevents thrashing when load fluctuates around the threshold.
// Defaults to 60.
// +optional
// +kubebuilder:validation:Minimum=0
// +kubebuilder:default=60
StabilizationSeconds int32 `json:"stabilizationSeconds,omitempty"`
// ProtectionWindowSeconds is the time window after a Pod is marked for
// scale-down (via the scale-down-protected annotation) during which a new
// Create Sandbox request can still claim it, cancelling the scale-down intent.
// Defaults to 10.
// +optional
// +kubebuilder:validation:Minimum=0
// +kubebuilder:default=10
ProtectionWindowSeconds int32 `json:"protectionWindowSeconds,omitempty"`
}
PoolScaleDownPolicy controls scale-down behavior.
func (*PoolScaleDownPolicy) DeepCopy ¶
func (in *PoolScaleDownPolicy) DeepCopy() *PoolScaleDownPolicy
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PoolScaleDownPolicy.
func (*PoolScaleDownPolicy) DeepCopyInto ¶
func (in *PoolScaleDownPolicy) DeepCopyInto(out *PoolScaleDownPolicy)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type PoolScaleUpMode ¶
type PoolScaleUpMode string
PoolScaleUpMode defines how aggressively a pool scales up. +kubebuilder:validation:Enum=Conservative;Default;Aggressive
const ( // PoolScaleUpModeConservative adds one Pod per scale-up decision. PoolScaleUpModeConservative PoolScaleUpMode = "Conservative" // PoolScaleUpModeDefault adds max(1, ceil(currentReplicas/2)) Pods per decision. PoolScaleUpModeDefault PoolScaleUpMode = "Default" // PoolScaleUpModeAggressive doubles the replica count up to maxReplicas per decision. PoolScaleUpModeAggressive PoolScaleUpMode = "Aggressive" )
type PoolScaleUpPolicy ¶
type PoolScaleUpPolicy struct {
// Mode controls how aggressively the pool grows on each scale-up decision.
// - Conservative: +1 per decision
// - Default: +max(1, ceil(currentReplicas/2))
// - Aggressive: scale to min(currentReplicas*2, maxReplicas)
// Defaults to Default.
// +optional
// +kubebuilder:validation:Enum=Conservative;Default;Aggressive
// +kubebuilder:default=Default
Mode PoolScaleUpMode `json:"mode,omitempty"`
// CooldownSeconds is the minimum number of seconds between two consecutive
// scale-up events. Prevents scale-up storms when many requests arrive simultaneously.
// Defaults to 30.
// +optional
// +kubebuilder:validation:Minimum=0
// +kubebuilder:default=30
CooldownSeconds int32 `json:"cooldownSeconds,omitempty"`
// IdleThresholdSeconds triggers a proactive scale-up when idleReplicas == 0
// has persisted for this many seconds. Set to 0 to disable proactive scale-up.
// Defaults to 30.
// +optional
// +kubebuilder:validation:Minimum=0
// +kubebuilder:default=30
IdleThresholdSeconds int32 `json:"idleThresholdSeconds,omitempty"`
}
PoolScaleUpPolicy controls scale-up behavior.
func (*PoolScaleUpPolicy) DeepCopy ¶
func (in *PoolScaleUpPolicy) DeepCopy() *PoolScaleUpPolicy
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PoolScaleUpPolicy.
func (*PoolScaleUpPolicy) DeepCopyInto ¶
func (in *PoolScaleUpPolicy) DeepCopyInto(out *PoolScaleUpPolicy)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type SandboxPool ¶
type SandboxPool struct {
metav1.TypeMeta `json:",inline"`
// metadata is a standard object metadata
// +optional
metav1.ObjectMeta `json:"metadata,omitzero"`
// spec defines the desired state of SandboxPool
// +required
Spec SandboxPoolSpec `json:"spec"`
// status defines the observed state of SandboxPool
// +optional
Status SandboxPoolStatus `json:"status,omitzero"`
}
SandboxPool is the Schema for the sandboxpools API
func (*SandboxPool) DeepCopy ¶
func (in *SandboxPool) DeepCopy() *SandboxPool
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SandboxPool.
func (*SandboxPool) DeepCopyInto ¶
func (in *SandboxPool) DeepCopyInto(out *SandboxPool)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*SandboxPool) DeepCopyObject ¶
func (in *SandboxPool) DeepCopyObject() runtime.Object
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
type SandboxPoolList ¶
type SandboxPoolList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitzero"`
Items []SandboxPool `json:"items"`
}
SandboxPoolList contains a list of SandboxPool
func (*SandboxPoolList) DeepCopy ¶
func (in *SandboxPoolList) DeepCopy() *SandboxPoolList
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SandboxPoolList.
func (*SandboxPoolList) DeepCopyInto ¶
func (in *SandboxPoolList) DeepCopyInto(out *SandboxPoolList)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*SandboxPoolList) DeepCopyObject ¶
func (in *SandboxPoolList) DeepCopyObject() runtime.Object
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
type SandboxPoolPhase ¶
type SandboxPoolPhase string
SandboxPoolPhase is the high-level phase of a SandboxPool. +kubebuilder:validation:Enum=Pending;Ready;ScalingUp;ScalingDown;Degraded
const ( // SandboxPoolPhasePending indicates the pool has no pods yet (spec.replicas == 0 and no pods exist). SandboxPoolPhasePending SandboxPoolPhase = "Pending" // SandboxPoolPhaseReady indicates the pool has reached the desired replica count and all pods are healthy. SandboxPoolPhaseReady SandboxPoolPhase = "Ready" // SandboxPoolPhaseScalingUp indicates the pool is scaling up (current < desired replicas). SandboxPoolPhaseScalingUp SandboxPoolPhase = "ScalingUp" // SandboxPoolPhaseScalingDown indicates the pool is scaling down (current > desired replicas). // This can persist if running pods cannot be deleted immediately. SandboxPoolPhaseScalingDown SandboxPoolPhase = "ScalingDown" // SandboxPoolPhaseDegraded indicates the pool has reached the desired replica count but // some idle pods are unavailable (NotReady) or some pods are in failed state. SandboxPoolPhaseDegraded SandboxPoolPhase = "Degraded" )
type SandboxPoolSpec ¶
type SandboxPoolSpec struct {
// Replicas is the total desired number of Pods (Idle + Running + Starting + Stopping).
// Can be adjusted by PoolAutoscaler when MinReplicas != MaxReplicas.
// +kubebuilder:validation:Minimum=0
Replicas int32 `json:"replicas"`
// MinReplicas is the lower bound for PoolAutoscaler.
// When MinReplicas == MaxReplicas, autoscaler is disabled (manual-only scaling).
// +optional
// +kubebuilder:validation:Minimum=0
MinReplicas *int32 `json:"minReplicas,omitempty"`
// MaxReplicas is the upper bound for PoolAutoscaler.
// When MinReplicas == MaxReplicas, autoscaler is disabled (manual-only scaling).
// +optional
MaxReplicas *int32 `json:"maxReplicas,omitempty"`
// TemplateName references a cluster-scoped SandboxTemplate to use as the base
// configuration. When set, the template's EmbeddedSandboxTemplate is copied at
// creation time. Inline fields in SandboxPoolSpec override template fields.
// +optional
TemplateName string `json:"templateName,omitempty"`
// DefaultStartupTimeout is the default startup timeout applied to sandbox create
// requests in this pool when the CreateSandbox request does not specify a startupTimeout.
// It also serves as the upper bound for the Starting phase: the controller deletes any pod
// that has been in Starting phase longer than this value.
//
// When nil, the controller does not enforce an upper bound on the Starting phase
// (pods with a per-pod agentbox.navix.sh/startup-timeout annotation are still cleaned up),
// and create requests without an explicit startupTimeout use the internal default (2 minutes).
// +optional
DefaultStartupTimeout *metav1.Duration `json:"defaultStartupTimeout,omitempty"`
// DefaultIdleTimeout is the default idle timeout applied to sandboxes created
// in this pool when the CreateSandbox request does not specify an idleTimeout.
// If nil, sandboxes have no idle timeout by default (they run until explicitly released).
// +optional
DefaultIdleTimeout *metav1.Duration `json:"defaultIdleTimeout,omitempty"`
// PodCreationImagePolicy controls which image newly created Pods start with,
// regardless of whether replicas are increased manually or by autoscaling.
// - PoolDefaultImage: preserve template container image (current behavior)
// - IdleImage: override the first container image with spec.idleImage
// +optional
// +kubebuilder:validation:Enum=PoolDefaultImage;IdleImage
// +kubebuilder:default=IdleImage
PodCreationImagePolicy PodCreationImagePolicy `json:"podCreationImagePolicy,omitempty"`
// Autoscaling defines the autoscaling configuration for this pool.
// When nil or autoscaling.enabled=false, the pool is managed manually via spec.replicas.
// +optional
Autoscaling *PoolAutoscalingSpec `json:"autoscaling,omitempty"`
EmbeddedSandboxTemplate `json:",inline"`
}
SandboxPoolSpec defines the desired state of SandboxPool
func (*SandboxPoolSpec) DeepCopy ¶
func (in *SandboxPoolSpec) DeepCopy() *SandboxPoolSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SandboxPoolSpec.
func (*SandboxPoolSpec) DeepCopyInto ¶
func (in *SandboxPoolSpec) DeepCopyInto(out *SandboxPoolSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type SandboxPoolStatus ¶
type SandboxPoolStatus struct {
// Phase is a high-level summary of the pool's current state.
// Possible values: Pending, Ready, ScalingUp, ScalingDown, Degraded.
//
// Phase is determined by the following priority rules:
// - Pending: spec.replicas == 0 and no pods exist
// - ScalingUp: current pod count < spec.replicas
// - ScalingDown: current pod count > spec.replicas (may persist while running pods cannot be deleted)
// - Degraded: replica count is stable but unavailableIdleReplicas > 0 or failedReplicas > 0
// - Ready: all replicas present and all pods are healthy
// +optional
Phase SandboxPoolPhase `json:"phase,omitempty"`
// IdleReplicas is the number of Pods in idle state
// +optional
IdleReplicas int32 `json:"idleReplicas,omitempty"`
// condition is not True (e.g. Pending, CrashLoopBackOff, ErrImagePull).
// These Pods are counted in IdleReplicas but cannot accept sandbox requests.
// A non-zero value causes the pool to enter the Degraded phase.
// +optional
UnavailableIdleReplicas int32 `json:"unavailableIdleReplicas,omitempty"`
// RunningReplicas is the number of Pods in running state
// +optional
RunningReplicas int32 `json:"runningReplicas,omitempty"`
// StartingReplicas is the number of Pods being activated (Idle → Running)
// +optional
StartingReplicas int32 `json:"startingReplicas,omitempty"`
// StoppingReplicas is the number of Pods being recycled (Running → Idle)
// +optional
StoppingReplicas int32 `json:"stoppingReplicas,omitempty"`
// FailedReplicas is the number of Pods in failed state
// +optional
FailedReplicas int32 `json:"failedReplicas,omitempty"`
// LastScaleUpTime is the timestamp of the most recent scale-up event triggered
// by the PoolAutoscaler. Used to enforce scaleUpPolicy.cooldownSeconds.
// +optional
LastScaleUpTime *metav1.Time `json:"lastScaleUpTime,omitempty"`
// LastScaleDownTime is the timestamp of the most recent scale-down event triggered
// by the PoolAutoscaler. Used to enforce scaleDownPolicy.stabilizationSeconds.
// +optional
LastScaleDownTime *metav1.Time `json:"lastScaleDownTime,omitempty"`
// IdleZeroSince is the timestamp when idleReplicas first dropped to zero in the
// current continuous zero-idle window. Used to evaluate scaleUpPolicy.idleThresholdSeconds.
// Cleared when idleReplicas > 0.
// +optional
IdleZeroSince *metav1.Time `json:"idleZeroSince,omitempty"`
// Selector is the label selector string used to identify Pods managed by this Pool.
// Deprecated: Use LabelSelector for structured access or PhaseSelectors for per-phase filtering.
// This field is retained for kubectl scale / HPA compatibility (subresource:scale selectorpath).
// +optional
Selector string `json:"selector,omitempty"`
// LabelSelector is the structured label selector matching all Pods managed by this Pool.
// Equivalent to the Selector field but in structured metav1.LabelSelector form.
// +optional
LabelSelector *metav1.LabelSelector `json:"labelSelector,omitempty"`
// PhaseSelectors contains pre-computed label selector strings for filtering Pods by phase,
// suitable for direct use with `kubectl get pods -l <selector>`.
// Keys: "all", "idle", "running", "starting", "stopping", "failed".
// Example: kubectl get pods -l <phaseSelectors.running>
// +optional
PhaseSelectors map[string]string `json:"phaseSelectors,omitempty"`
// conditions represent the current state of the SandboxPool resource.
// Each condition has a unique type and reflects the status of a specific aspect of the resource.
//
// Standard condition types:
// - "Available": True when healthy idle pods are available to accept new sandbox requests.
// - "Scaling": True when the pool is actively scaling up or down.
// - "Degraded": True when unavailable idle pods or failed pods are present.
//
// The status of each condition is one of True, False, or Unknown.
// +listType=map
// +listMapKey=type
// +optional
Conditions []metav1.Condition `json:"conditions,omitempty"`
}
SandboxPoolStatus defines the observed state of SandboxPool.
func (*SandboxPoolStatus) DeepCopy ¶
func (in *SandboxPoolStatus) DeepCopy() *SandboxPoolStatus
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SandboxPoolStatus.
func (*SandboxPoolStatus) DeepCopyInto ¶
func (in *SandboxPoolStatus) DeepCopyInto(out *SandboxPoolStatus)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type SandboxReservationSpec ¶
type SandboxReservationSpec struct {
PriorityClassName string `json:"priorityClassName,omitempty"`
ReplicaQuota corev1.ResourceList `json:"replicaQuota"`
}
SandboxReservationSpec holds SI Scheduler integration settings for each sandbox pod.
func (*SandboxReservationSpec) DeepCopy ¶
func (in *SandboxReservationSpec) DeepCopy() *SandboxReservationSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SandboxReservationSpec.
func (*SandboxReservationSpec) DeepCopyInto ¶
func (in *SandboxReservationSpec) DeepCopyInto(out *SandboxReservationSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type SandboxRuntimeSpec ¶
type SandboxRuntimeSpec struct {
// Name specifies the name of the runtime to use for the sandbox pods.
// Supported values are "e2b", "swerex", "aiosanbdox", etc.
Name string `json:"name"`
// Port specifies the port number that the runtime should listen on for incoming connections.
// +optional
Port *int32 `json:"port,omitempty"`
// Protocol for port. Must be UDP, TCP, or SCTP.
// Defaults to "TCP".
// +optional
// +default="TCP"
Protocol *corev1.Protocol `json:"protocol,omitempty"`
// Description is a human-readable description of this runtime.
// +optional
Description string `json:"description,omitempty"`
// LogDir is the path to the runtime's log file inside the container.
// When set, the GetLogs API can retrieve runtime logs via file read.
// Example: "/tmp/envd.log"
// +optional
LogDir string `json:"logDir,omitempty"`
// ReadinessProbe defines the readiness check configuration for the runtime.
// +optional
ReadinessProbe *corev1.Probe `json:"readinessProbe,omitempty"`
// Config contains runtime-specific configuration parameters.
// The content and structure of this field depend on the runtime type.
// +kubebuilder:pruning:PreserveUnknownFields
// +kubebuilder:validation:Schemaless
// +optional
Config *runtime.RawExtension `json:"config,omitempty"`
}
func (*SandboxRuntimeSpec) DeepCopy ¶
func (in *SandboxRuntimeSpec) DeepCopy() *SandboxRuntimeSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SandboxRuntimeSpec.
func (*SandboxRuntimeSpec) DeepCopyInto ¶
func (in *SandboxRuntimeSpec) DeepCopyInto(out *SandboxRuntimeSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type SandboxStatusDetail ¶
type SandboxStatusDetail struct {
// Reason is a machine-readable cause, e.g. "Pulling", "ImagePullBackOff",
// "ErrImagePull", "CrashLoopBackOff", "OOMKilled", "PodFailed".
Reason string `json:"reason"`
// Message is a human-readable description of the current state.
Message string `json:"message"`
// LastUpdatedTime is the RFC3339 timestamp when this record was last written.
LastUpdatedTime string `json:"lastUpdatedTime"`
}
SandboxStatusDetail holds structured diagnostic information written by the reconciler onto the Pod annotation "agentbox.navix.sh/sandbox-status-detail".
func (*SandboxStatusDetail) DeepCopy ¶
func (in *SandboxStatusDetail) DeepCopy() *SandboxStatusDetail
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SandboxStatusDetail.
func (*SandboxStatusDetail) DeepCopyInto ¶
func (in *SandboxStatusDetail) DeepCopyInto(out *SandboxStatusDetail)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type SandboxStopReason ¶
type SandboxStopReason string
const ( SandboxStopReasonCompleted SandboxStopReason = "Completed" // Normal completion of the sandbox workload. SandboxStopReasonCanceled SandboxStopReason = "Canceled" // Premature stop before ever reaching Running (e.g. deleted while Starting). SandboxStopReasonReleased SandboxStopReason = "Released" // Explicit release by API call or idle timeout. SandboxStopReasonFailed SandboxStopReason = "Failed" // Stopped due to pod failure (OOMKilled, Evicted, etc.). )
type SandboxTemplate ¶
type SandboxTemplate struct {
metav1.TypeMeta `json:",inline"`
// metadata is a standard object metadata
// +optional
metav1.ObjectMeta `json:"metadata,omitzero"`
// spec defines the desired state of SandboxTemplate
// +required
Spec SandboxTemplateSpec `json:"spec"`
// status defines the observed state of SandboxTemplate
// +optional
Status SandboxTemplateStatus `json:"status,omitzero"`
}
SandboxTemplate is the Schema for the sandboxtemplates API
func (*SandboxTemplate) DeepCopy ¶
func (in *SandboxTemplate) DeepCopy() *SandboxTemplate
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SandboxTemplate.
func (*SandboxTemplate) DeepCopyInto ¶
func (in *SandboxTemplate) DeepCopyInto(out *SandboxTemplate)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*SandboxTemplate) DeepCopyObject ¶
func (in *SandboxTemplate) DeepCopyObject() runtime.Object
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
type SandboxTemplateList ¶
type SandboxTemplateList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitzero"`
Items []SandboxTemplate `json:"items"`
}
SandboxTemplateList contains a list of SandboxTemplate
func (*SandboxTemplateList) DeepCopy ¶
func (in *SandboxTemplateList) DeepCopy() *SandboxTemplateList
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SandboxTemplateList.
func (*SandboxTemplateList) DeepCopyInto ¶
func (in *SandboxTemplateList) DeepCopyInto(out *SandboxTemplateList)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*SandboxTemplateList) DeepCopyObject ¶
func (in *SandboxTemplateList) DeepCopyObject() runtime.Object
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
type SandboxTemplateSpec ¶
type SandboxTemplateSpec struct {
EmbeddedSandboxTemplate `json:",inline"`
// Version is an optional semantic version string for this template (e.g. "v1.2.0").
// +optional
Version string `json:"version,omitempty"`
// Description is a human-readable description of this template.
// +optional
Description string `json:"description,omitempty"`
// Visibility controls which tenants can see this template.
// When nil or Rules is empty, the template is public (visible to all).
// +optional
Visibility *TemplateVisibility `json:"visibility,omitempty"`
}
SandboxTemplateSpec defines the desired state of SandboxTemplate
func (*SandboxTemplateSpec) DeepCopy ¶
func (in *SandboxTemplateSpec) DeepCopy() *SandboxTemplateSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SandboxTemplateSpec.
func (*SandboxTemplateSpec) DeepCopyInto ¶
func (in *SandboxTemplateSpec) DeepCopyInto(out *SandboxTemplateSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type SandboxTemplateStatus ¶
type SandboxTemplateStatus struct {
// conditions represent the current state of the SandboxTemplate resource.
// Each condition has a unique type and reflects the status of a specific aspect of the resource.
//
// Standard condition types include:
// - "Available": the resource is fully functional
// - "Progressing": the resource is being created or updated
// - "Degraded": the resource failed to reach or maintain its desired state
//
// The status of each condition is one of True, False, or Unknown.
// +listType=map
// +listMapKey=type
// +optional
Conditions []metav1.Condition `json:"conditions,omitempty"`
}
SandboxTemplateStatus defines the observed state of SandboxTemplate.
func (*SandboxTemplateStatus) DeepCopy ¶
func (in *SandboxTemplateStatus) DeepCopy() *SandboxTemplateStatus
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SandboxTemplateStatus.
func (*SandboxTemplateStatus) DeepCopyInto ¶
func (in *SandboxTemplateStatus) DeepCopyInto(out *SandboxTemplateStatus)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type TemplateVisibility ¶
type TemplateVisibility struct {
// Rules is the list of visibility rules.
// +optional
Rules []TemplateVisibilityRule `json:"rules,omitempty"`
}
TemplateVisibility controls the visibility of a SandboxTemplate. Rules are evaluated with OR semantics: a caller is visible if it matches any rule. An empty Rules list means the template is public (visible to all).
func (*TemplateVisibility) DeepCopy ¶
func (in *TemplateVisibility) DeepCopy() *TemplateVisibility
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TemplateVisibility.
func (*TemplateVisibility) DeepCopyInto ¶
func (in *TemplateVisibility) DeepCopyInto(out *TemplateVisibility)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type TemplateVisibilityRule ¶
type TemplateVisibilityRule struct {
// Team specifies the team that can see the template.
// Empty means any team.
// +optional
Team string `json:"team,omitempty"`
// Users specifies the users that can see the template.
// Empty means any user.
// +optional
Users []string `json:"users,omitempty"`
}
TemplateVisibilityRule describes a single visibility rule. Team and Users are combined with AND semantics: both must match (empty = wildcard). Multiple Rules in a TemplateVisibility are combined with OR semantics.
func (*TemplateVisibilityRule) DeepCopy ¶
func (in *TemplateVisibilityRule) DeepCopy() *TemplateVisibilityRule
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TemplateVisibilityRule.
func (*TemplateVisibilityRule) DeepCopyInto ¶
func (in *TemplateVisibilityRule) DeepCopyInto(out *TemplateVisibilityRule)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.