v1alpha1

package
v0.1.0-alpha.1....-9b31e75 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 23, 2025 License: Apache-2.0 Imports: 5 Imported by: 8

Documentation

Index

Constants

View Source
const (
	// GroupName is the name of the group for all resources defined in this package.
	GroupName = "grove.io"
)

Variables

View Source
var (
	// SchemeGroupVersion is group version used to register these objects
	SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1alpha1"}
	// SchemeBuilder is used to add go types to the GroupVersionKind scheme
	SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes)
	// AddToScheme is a reference to the Scheme Builder's AddToScheme function.
	AddToScheme = SchemeBuilder.AddToScheme
)

Functions

func Kind

func Kind(kind string) schema.GroupKind

Kind takes an unqualified kind and returns back a Group qualified GroupKind

func Resource

func Resource(resource string) schema.GroupResource

Resource takes an unqualified resource and returns a Group qualified GroupResource

Types

type AutoScalingConfig

type AutoScalingConfig struct {
	// MinReplicas is the lower limit for the number of replicas for the target resource.
	// It will be used by the horizontal pod autoscaler to determine the minimum number of replicas to scale-in to.
	// +optional
	MinReplicas *int32 `json:"minReplicas,omitempty"`
	// maxReplicas is the upper limit for the number of replicas to which the autoscaler can scale up.
	// It cannot be less that minReplicas.
	MaxReplicas int32 `json:"maxReplicas"`
	// Metrics contains the specifications for which to use to calculate the
	// desired replica count (the maximum replica count across all metrics will
	// be used).  The desired replica count is calculated multiplying the
	// ratio between the target value and the current value by the current
	// number of pods.  Ergo, metrics used must decrease as the pod count is
	// increased, and vice versa.  See the individual metric source types for
	// more information about how each type of metric must respond.
	// If not set, the default metric will be set to 80% average CPU utilization.
	// +listType=atomic
	// +optional
	Metrics []autoscalingv2.MetricSpec `json:"metrics,omitempty" protobuf:"bytes,4,rep,name=metrics"`
}

AutoScalingConfig defines the configuration for the horizontal pod autoscaler.

func (*AutoScalingConfig) DeepCopy

func (in *AutoScalingConfig) DeepCopy() *AutoScalingConfig

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AutoScalingConfig.

func (*AutoScalingConfig) DeepCopyInto

func (in *AutoScalingConfig) DeepCopyInto(out *AutoScalingConfig)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type CliqueStartupType

type CliqueStartupType string

CliqueStartupType defines the order in which each PodClique is started. +kubebuilder:validation:Enum={CliqueStartupTypeAnyOrder,CliqueStartupTypeInOrder,CliqueStartupTypeExplicit}

const (
	// CliqueStartupTypeAnyOrder defines that the cliques can be started in any order. This allows for concurrent starts of cliques.
	// This is the default CliqueStartupType.
	CliqueStartupTypeAnyOrder CliqueStartupType = "CliqueStartupTypeAnyOrder"
	// CliqueStartupTypeInOrder defines that the cliques should be started in the order they are defined in the PodGang Cliques slice.
	CliqueStartupTypeInOrder CliqueStartupType = "CliqueStartupTypeInOrder"
	// CliqueStartupTypeExplicit defines that the cliques should be started after the cliques defined in PodClique.StartsAfter have started.
	CliqueStartupTypeExplicit CliqueStartupType = "CliqueStartupTypeExplicit"
)

type ErrorCode

type ErrorCode string

ErrorCode is a custom error code that uniquely identifies an error.

type HeadlessServiceConfig

type HeadlessServiceConfig struct {
	// PublishNotReadyAddresses if set to true will publish the DNS records of pods even if the pods are not ready.
	//  if not set, it defaults to true.
	// +kubebuilder:default=true
	PublishNotReadyAddresses bool `json:"publishNotReadyAddresses"`
}

HeadlessServiceConfig defines the config options for the headless service.

func (*HeadlessServiceConfig) DeepCopy

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HeadlessServiceConfig.

func (*HeadlessServiceConfig) DeepCopyInto

func (in *HeadlessServiceConfig) DeepCopyInto(out *HeadlessServiceConfig)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type LastError

type LastError struct {
	// Code is the error code that uniquely identifies the error.
	Code ErrorCode `json:"code"`
	// Description is a human-readable description of the error.
	Description string `json:"description"`
	// ObservedAt is the time at which the error was observed.
	ObservedAt metav1.Time `json:"observedAt"`
}

LastError captures the last error observed by the controller when reconciling an object.

func (*LastError) DeepCopy

func (in *LastError) DeepCopy() *LastError

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LastError.

func (*LastError) DeepCopyInto

func (in *LastError) DeepCopyInto(out *LastError)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type LastOperation

type LastOperation struct {
	// Type is the type of the last operation.
	Type LastOperationType `json:"type"`
	// State is the state of the last operation.
	State LastOperationState `json:"state"`
	// Description is a human-readable description of the last operation.
	Description string `json:"description"`
	// LastUpdateTime is the time at which the last operation was updated.
	LastUpdateTime metav1.Time `json:"lastUpdateTime"`
}

LastOperation captures the last operation done by the respective reconciler on the PodCliqueSet.

func (*LastOperation) DeepCopy

func (in *LastOperation) DeepCopy() *LastOperation

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LastOperation.

func (*LastOperation) DeepCopyInto

func (in *LastOperation) DeepCopyInto(out *LastOperation)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type LastOperationState

type LastOperationState string

LastOperationState is a string alias for the state of the last operation.

const (
	// LastOperationStateProcessing indicates that the last operation is in progress.
	LastOperationStateProcessing LastOperationState = "Processing"
	// LastOperationStateSucceeded indicates that the last operation succeeded.
	LastOperationStateSucceeded LastOperationState = "Succeeded"
	// LastOperationStateError indicates that the last operation completed with errors and will be retried.
	LastOperationStateError LastOperationState = "Error"
)

type LastOperationType

type LastOperationType string

LastOperationType is a string alias for the type of the last operation.

const (
	// LastOperationTypeReconcile indicates that the last operation was a reconcile operation.
	LastOperationTypeReconcile LastOperationType = "Reconcile"
	// LastOperationTypeDelete indicates that the last operation was a delete operation.
	LastOperationTypeDelete LastOperationType = "Delete"
)

type NetworkPackGroupConfig

type NetworkPackGroupConfig struct {
	// CliqueNames is the list of PodClique names that are part of the network pack group.
	CliqueNames []string `json:"cliqueNames"`
}

NetworkPackGroupConfig indicates that all the Pods belonging to the constituent PodCliques should be optimally placed w.r.t cluster's network topology. If a constituent PodClique belongs to a PodCliqueScalingGroup then ensure that all constituent PodCliques of that PodCliqueScalingGroup are also part of the NetworkPackGroupConfig.

func (*NetworkPackGroupConfig) DeepCopy

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NetworkPackGroupConfig.

func (*NetworkPackGroupConfig) DeepCopyInto

func (in *NetworkPackGroupConfig) DeepCopyInto(out *NetworkPackGroupConfig)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type PodClique

type PodClique struct {
	metav1.TypeMeta   `json:",inline"`
	metav1.ObjectMeta `json:"metadata,omitempty"`
	// Spec defines the specification of a PodClique.
	Spec PodCliqueSpec `json:"spec"`
	// Status defines the status of a PodClique.
	Status PodCliqueStatus `json:"status,omitempty"`
}

PodClique is a set of pods running the same image. TODO: @renormalize expand on this.

func (*PodClique) DeepCopy

func (in *PodClique) DeepCopy() *PodClique

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodClique.

func (*PodClique) DeepCopyInto

func (in *PodClique) DeepCopyInto(out *PodClique)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*PodClique) DeepCopyObject

func (in *PodClique) DeepCopyObject() runtime.Object

DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.

func (*PodClique) SetLastErrors

func (pclq *PodClique) SetLastErrors(lastErrs ...LastError)

SetLastErrors sets the last errors observed by the controller when reconciling the PodClique.

type PodCliqueList

type PodCliqueList struct {
	metav1.TypeMeta `json:",inline"`
	metav1.ListMeta `json:"metadata,omitempty"`
	// Items is a slice of PodClique.
	Items []PodClique `json:"items"`
}

PodCliqueList is a list of PodClique's.

func (*PodCliqueList) DeepCopy

func (in *PodCliqueList) DeepCopy() *PodCliqueList

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodCliqueList.

func (*PodCliqueList) DeepCopyInto

func (in *PodCliqueList) DeepCopyInto(out *PodCliqueList)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*PodCliqueList) DeepCopyObject

func (in *PodCliqueList) DeepCopyObject() runtime.Object

DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.

type PodCliqueRollingUpdateProgress

type PodCliqueRollingUpdateProgress struct {
	// UpdateStartedAt is the time at which the rolling update started.
	UpdateStartedAt metav1.Time `json:"updateStartedAt,omitempty"`
	// UpdateEndedAt is the time at which the rolling update ended.
	// It will be set to nil if the rolling update is still in progress.
	UpdateEndedAt *metav1.Time `json:"updateEndedAt,omitempty"`
	// PodCliqueSetGenerationHash is the PodCliqueSet generation hash corresponding to the PodCliqueSet spec that is being rolled out.
	// While the update is in progress PodCliqueStatus.CurrentPodCliqueSetGenerationHash will not match this hash. Once the update is complete the
	// value of this field will be copied to PodCliqueStatus.CurrentPodCliqueSetGenerationHash.
	PodCliqueSetGenerationHash string `json:"podCliqueSetGenerationHash"`
	// PodTemplateHash is the PodClique template hash corresponding to the PodClique spec that is being rolled out.
	// While the update is in progress PodCliqueStatus.CurrentPodTemplateHash will not match this hash. Once the update is complete the
	// value of this field will be copied to PodCliqueStatus.CurrentPodTemplateHash.
	PodTemplateHash string `json:"podTemplateHash"`
	// ReadyPodsSelectedToUpdate captures the pod names of ready Pods that are either currently being updated or have been previously updated.
	ReadyPodsSelectedToUpdate *PodsSelectedToUpdate `json:"readyPodsSelectedToUpdate,omitempty"`
}

PodCliqueRollingUpdateProgress provides details about the ongoing rolling update of the PodClique.

func (*PodCliqueRollingUpdateProgress) DeepCopy

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodCliqueRollingUpdateProgress.

func (*PodCliqueRollingUpdateProgress) DeepCopyInto

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type PodCliqueScalingGroup

type PodCliqueScalingGroup struct {
	metav1.TypeMeta   `json:",inline"`
	metav1.ObjectMeta `json:"metadata,omitempty"`
	// Spec is the specification of the PodCliqueScalingGroup.
	Spec PodCliqueScalingGroupSpec `json:"spec"`
	// Status is the status of the PodCliqueScalingGroup.
	Status PodCliqueScalingGroupStatus `json:"status,omitempty"`
}

PodCliqueScalingGroup is the schema to define scaling groups that is used to scale a group of PodClique's. An instance of this custom resource will be created for every pod clique scaling group defined as part of PodCliqueSet.

func (*PodCliqueScalingGroup) DeepCopy

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodCliqueScalingGroup.

func (*PodCliqueScalingGroup) DeepCopyInto

func (in *PodCliqueScalingGroup) DeepCopyInto(out *PodCliqueScalingGroup)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*PodCliqueScalingGroup) DeepCopyObject

func (in *PodCliqueScalingGroup) DeepCopyObject() runtime.Object

DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.

func (*PodCliqueScalingGroup) SetLastErrors

func (pcsg *PodCliqueScalingGroup) SetLastErrors(lastErrs ...LastError)

SetLastErrors sets the last errors observed by the controller when reconciling the PodCliqueScalingGroup.

type PodCliqueScalingGroupConfig

type PodCliqueScalingGroupConfig struct {
	// Name is the name of the PodCliqueScalingGroupConfig. This should be unique within the PodCliqueSet.
	// It allows consumers to give a semantic name to a group of PodCliques that needs to be scaled together.
	Name string `json:"name"`
	// CliqueNames is the list of names of the PodClique's that are part of the scaling group.
	CliqueNames []string `json:"cliqueNames"`
	// Replicas is the desired number of replicas for the scaling group at template level.
	// This allows one to control the replicas of the scaling group at startup.
	// If not specified, it defaults to 1.
	// +optional
	// +kubebuilder:default=1
	Replicas *int32 `json:"replicas,omitempty"`
	// MinAvailable specifies the minimum number of ready replicas required for a PodCliqueScalingGroup to be considered operational.
	// A PodCliqueScalingGroup replica is considered "ready" when its associated PodCliques have sufficient ready or starting pods.
	// If MinAvailable is breached, it will be used to signal that the PodCliqueScalingGroup is no longer operating with the desired availability.
	// MinAvailable cannot be greater than Replicas. If ScaleConfig is defined then its MinAvailable should not be less than ScaleConfig.MinReplicas.
	// If not specified, it defaults to 1.
	// +optional
	// +kubebuilder:default=1
	MinAvailable *int32 `json:"minAvailable,omitempty"`
	// ScaleConfig is the horizontal pod autoscaler configuration for the pod clique scaling group.
	// +optional
	ScaleConfig *AutoScalingConfig `json:"scaleConfig,omitempty"`
}

PodCliqueScalingGroupConfig is a group of PodClique's that are scaled together. Each member PodClique.Replicas will be computed as a product of PodCliqueScalingGroupConfig.Replicas and PodCliqueTemplateSpec.Spec.Replicas. NOTE: If a PodCliqueScalingGroupConfig is defined, then for the member PodClique's, individual AutoScalingConfig cannot be defined.

func (*PodCliqueScalingGroupConfig) DeepCopy

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodCliqueScalingGroupConfig.

func (*PodCliqueScalingGroupConfig) DeepCopyInto

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type PodCliqueScalingGroupList

type PodCliqueScalingGroupList struct {
	metav1.TypeMeta `json:",inline"`
	metav1.ListMeta `json:"metadata,omitempty"`
	// Items is a slice of PodCliqueScalingGroup.
	Items []PodCliqueScalingGroup `json:"items"`
}

PodCliqueScalingGroupList is a slice of PodCliqueScalingGroup's.

func (*PodCliqueScalingGroupList) DeepCopy

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodCliqueScalingGroupList.

func (*PodCliqueScalingGroupList) DeepCopyInto

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*PodCliqueScalingGroupList) DeepCopyObject

func (in *PodCliqueScalingGroupList) DeepCopyObject() runtime.Object

DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.

type PodCliqueScalingGroupReplicaRollingUpdateProgress

type PodCliqueScalingGroupReplicaRollingUpdateProgress struct {
	// Current is the index of the PodCliqueScalingGroup replica that is currently being updated.
	Current int32 `json:"current"`
	// Completed is the list of indices of PodCliqueScalingGroup replicas that have been updated to the latest PodCliqueSet spec.
	Completed []int32 `json:"completed,omitempty"`
}

PodCliqueScalingGroupReplicaRollingUpdateProgress provides details about the rolling update progress of ready replicas of PodCliqueScalingGroup that have been selected for update.

func (*PodCliqueScalingGroupReplicaRollingUpdateProgress) DeepCopy

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodCliqueScalingGroupReplicaRollingUpdateProgress.

func (*PodCliqueScalingGroupReplicaRollingUpdateProgress) DeepCopyInto

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type PodCliqueScalingGroupRollingUpdateProgress

type PodCliqueScalingGroupRollingUpdateProgress struct {
	//UpdateStartedAt is the time at which the rolling update started.
	UpdateStartedAt metav1.Time `json:"updateStartedAt"`
	// UpdateEndedAt is the time at which the rolling update ended.
	UpdateEndedAt *metav1.Time `json:"updateEndedAt,omitempty"`
	// PodCliqueSetGenerationHash is the PodCliqueSet generation hash corresponding to the PodCliqueSet spec that is being rolled out.
	// While the update is in progress PodCliqueScalingGroupStatus.CurrentPodCliqueSetGenerationHash will not match this hash. Once the update is complete the
	// value of this field will be copied to PodCliqueScalingGroupStatus.CurrentPodCliqueSetGenerationHash.
	PodCliqueSetGenerationHash string `json:"podCliqueSetGenerationHash"`
	// UpdatedPodCliques is the list of PodClique names that have been updated to the latest PodCliqueSet spec.
	UpdatedPodCliques []string `json:"updatedPodCliques,omitempty"`
	// ReadyReplicaIndicesSelectedToUpdate provides the rolling update progress of ready replicas of PodCliqueScalingGroup that have been selected for update.
	// PodCliqueScalingGroup replicas that are either pending or unhealthy will be force updated and the update will not wait for these replicas to become ready.
	// For all ready replicas, one replica is chosen at a time to update, once it is updated and becomes ready, the next ready replica is chosen for update.
	ReadyReplicaIndicesSelectedToUpdate *PodCliqueScalingGroupReplicaRollingUpdateProgress `json:"readyReplicaIndicesSelectedToUpdate,omitempty"`
}

PodCliqueScalingGroupRollingUpdateProgress provides details about the ongoing rolling update of the PodCliqueScalingGroup.

func (*PodCliqueScalingGroupRollingUpdateProgress) DeepCopy

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodCliqueScalingGroupRollingUpdateProgress.

func (*PodCliqueScalingGroupRollingUpdateProgress) DeepCopyInto

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type PodCliqueScalingGroupSpec

type PodCliqueScalingGroupSpec struct {
	// Replicas is the desired number of replicas for the PodCliqueScalingGroup.
	// If not specified, it defaults to 1.
	// +kubebuilder:default=1
	Replicas int32 `json:"replicas"`
	// MinAvailable specifies the minimum number of ready replicas required for a PodCliqueScalingGroup to be considered operational.
	// A PodCliqueScalingGroup replica is considered "ready" when its associated PodCliques have sufficient ready or starting pods.
	// If MinAvailable is breached, it will be used to signal that the PodCliqueScalingGroup is no longer operating with the desired availability.
	// MinAvailable cannot be greater than Replicas. If ScaleConfig is defined then its MinAvailable should not be less than ScaleConfig.MinReplicas.
	//
	// It serves two main purposes:
	// 1. Gang Scheduling: MinAvailable defines the minimum number of replicas that are guaranteed to be gang scheduled.
	// 2. Gang Termination: MinAvailable is used as a lower bound below which a PodGang becomes a candidate for Gang termination.
	// If not specified, it defaults to 1.
	// +optional
	// +kubebuilder:default=1
	MinAvailable *int32 `json:"minAvailable,omitempty"`
	// CliqueNames is the list of PodClique names that are configured in the
	// matching PodCliqueScalingGroup in PodCliqueSet.Spec.Template.PodCliqueScalingGroupConfigs.
	CliqueNames []string `json:"cliqueNames"`
}

PodCliqueScalingGroupSpec is the specification of the PodCliqueScalingGroup.

func (*PodCliqueScalingGroupSpec) DeepCopy

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodCliqueScalingGroupSpec.

func (*PodCliqueScalingGroupSpec) DeepCopyInto

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type PodCliqueScalingGroupStatus

type PodCliqueScalingGroupStatus struct {
	// Replicas is the observed number of replicas for the PodCliqueScalingGroup.
	Replicas int32 `json:"replicas,omitempty"`
	// ScheduledReplicas is the number of replicas that are scheduled for the PodCliqueScalingGroup.
	// A replica of PodCliqueScalingGroup is considered "scheduled" when at least MinAvailable number
	// of pods in each constituent PodClique has been scheduled.
	// +kubebuilder:default=0
	ScheduledReplicas int32 `json:"scheduledReplicas"`
	// AvailableReplicas is the number of PodCliqueScalingGroup replicas that are available.
	// A PodCliqueScalingGroup replica is considered available when all constituent PodClique's have
	// PodClique.Status.ReadyReplicas greater than or equal to PodClique.Spec.MinAvailable
	// +kubebuilder:default=0
	AvailableReplicas int32 `json:"availableReplicas"`
	// UpdatedReplicas is the number of PodCliqueScalingGroup replicas that correspond with the latest PodCliqueSetGenerationHash.
	// +kubebuilder:default=0
	UpdatedReplicas int32 `json:"updatedReplicas"`
	// Selector is the selector used to identify the pods that belong to this scaling group.
	Selector *string `json:"selector,omitempty"`
	// ObservedGeneration is the most recent generation observed by the controller.
	ObservedGeneration *int64 `json:"observedGeneration,omitempty"`
	// LastErrors captures the last errors observed by the controller when reconciling the PodClique.
	LastErrors []LastError `json:"lastErrors,omitempty"`
	// Conditions represents the latest available observations of the PodCliqueScalingGroup by its controller.
	Conditions []metav1.Condition `json:"conditions,omitempty"`
	// CurrentPodCliqueSetGenerationHash establishes a correlation to PodCliqueSet generation hash indicating
	// that the spec of the PodCliqueSet at this generation is fully realized in the PodCliqueScalingGroup.
	CurrentPodCliqueSetGenerationHash *string `json:"currentPodCliqueSetGenerationHash,omitempty"`
	// RollingUpdateProgress provides details about the ongoing rolling update of the PodCliqueScalingGroup.
	RollingUpdateProgress *PodCliqueScalingGroupRollingUpdateProgress `json:"rollingUpdateProgress,omitempty"`
}

PodCliqueScalingGroupStatus is the status of the PodCliqueScalingGroup.

func (*PodCliqueScalingGroupStatus) DeepCopy

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodCliqueScalingGroupStatus.

func (*PodCliqueScalingGroupStatus) DeepCopyInto

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type PodCliqueSet

type PodCliqueSet struct {
	metav1.TypeMeta   `json:",inline"`
	metav1.ObjectMeta `json:"metadata,omitempty"`
	// Spec defines the specification of the PodCliqueSet.
	Spec PodCliqueSetSpec `json:"spec"`
	// Status defines the status of the PodCliqueSet.
	Status PodCliqueSetStatus `json:"status,omitempty"`
}

PodCliqueSet is a set of PodGangs defining specification on how to spread and manage a gang of pods and monitoring their status.

func (*PodCliqueSet) DeepCopy

func (in *PodCliqueSet) DeepCopy() *PodCliqueSet

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodCliqueSet.

func (*PodCliqueSet) DeepCopyInto

func (in *PodCliqueSet) DeepCopyInto(out *PodCliqueSet)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*PodCliqueSet) DeepCopyObject

func (in *PodCliqueSet) DeepCopyObject() runtime.Object

DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.

func (*PodCliqueSet) SetLastErrors

func (pcs *PodCliqueSet) SetLastErrors(lastErrs ...LastError)

SetLastErrors sets the last errors observed by the controller when reconciling the PodCliqueSet.

type PodCliqueSetList

type PodCliqueSetList struct {
	metav1.TypeMeta `json:",inline"`
	metav1.ListMeta `json:"metadata,omitempty"`
	// Items is a slice of PodCliqueSets.
	Items []PodCliqueSet `json:"items"`
}

PodCliqueSetList is a list of PodCliqueSet's.

func (*PodCliqueSetList) DeepCopy

func (in *PodCliqueSetList) DeepCopy() *PodCliqueSetList

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodCliqueSetList.

func (*PodCliqueSetList) DeepCopyInto

func (in *PodCliqueSetList) DeepCopyInto(out *PodCliqueSetList)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*PodCliqueSetList) DeepCopyObject

func (in *PodCliqueSetList) DeepCopyObject() runtime.Object

DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.

type PodCliqueSetReplicaRollingUpdateProgress

type PodCliqueSetReplicaRollingUpdateProgress struct {
	// ReplicaIndex is the replica index of the PodCliqueSet that is being updated.
	ReplicaIndex int32 `json:"replicaIndex"`
	// UpdateStartedAt is the time at which the rolling update started for this PodCliqueSet replica index.
	UpdateStartedAt metav1.Time `json:"updateStartedAt,omitempty"`
}

PodCliqueSetReplicaRollingUpdateProgress captures the progress of a rolling update for a specific PodCliqueSet replica.

func (*PodCliqueSetReplicaRollingUpdateProgress) DeepCopy

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodCliqueSetReplicaRollingUpdateProgress.

func (*PodCliqueSetReplicaRollingUpdateProgress) DeepCopyInto

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type PodCliqueSetRollingUpdateProgress

type PodCliqueSetRollingUpdateProgress struct {
	// UpdateStartedAt is the time at which the rolling update started for the PodCliqueSet.
	UpdateStartedAt metav1.Time `json:"updateStartedAt,omitempty"`
	// UpdateEndedAt is the time at which the rolling update ended for the PodCliqueSet.
	// +optional
	UpdateEndedAt *metav1.Time `json:"updateEndedAt,omitempty"`
	// UpdatedPodCliqueScalingGroups is a list of PodCliqueScalingGroup names that have been updated to the desired PodCliqueSet generation hash.
	UpdatedPodCliqueScalingGroups []string `json:"updatedPodCliqueScalingGroups,omitempty"`
	// UpdatedPodCliques is a list of PodClique names that have been updated to the desired PodCliqueSet generation hash.
	UpdatedPodCliques []string `json:"updatedPodCliques,omitempty"`
	// CurrentlyUpdating captures the progress of the PodCliqueSet replica that is currently being updated.
	// +optional
	CurrentlyUpdating *PodCliqueSetReplicaRollingUpdateProgress `json:"currentlyUpdating,omitempty"`
}

PodCliqueSetRollingUpdateProgress captures the progress of a rolling update of the PodCliqueSet.

func (*PodCliqueSetRollingUpdateProgress) DeepCopy

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodCliqueSetRollingUpdateProgress.

func (*PodCliqueSetRollingUpdateProgress) DeepCopyInto

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type PodCliqueSetSpec

type PodCliqueSetSpec struct {
	// Replicas is the number of desired replicas of the PodGang.
	// +kubebuilder:default=0
	Replicas int32 `json:"replicas,omitempty"`
	// Template describes the template spec for PodGangs that will be created in the PodCliqueSet.
	Template PodCliqueSetTemplateSpec `json:"template"`
	// ReplicaSpreadConstraints defines the constraints for spreading each replica of PodCliqueSet across domains identified by a topology key.
	// +optional
	ReplicaSpreadConstraints []corev1.TopologySpreadConstraint `json:"replicaSpreadConstraints,omitempty"`
}

PodCliqueSetSpec defines the specification of a PodCliqueSet.

func (*PodCliqueSetSpec) DeepCopy

func (in *PodCliqueSetSpec) DeepCopy() *PodCliqueSetSpec

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodCliqueSetSpec.

func (*PodCliqueSetSpec) DeepCopyInto

func (in *PodCliqueSetSpec) DeepCopyInto(out *PodCliqueSetSpec)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type PodCliqueSetStatus

type PodCliqueSetStatus struct {
	// ObservedGeneration is the most recent generation observed by the controller.
	ObservedGeneration *int64 `json:"observedGeneration,omitempty"`
	// LastErrors captures the last errors observed by the controller when reconciling the PodCliqueSet.
	LastErrors []LastError `json:"lastErrors,omitempty"`
	// Replicas is the total number of PodCliqueSet replicas created.
	Replicas int32 `json:"replicas,omitempty"`
	// UpdatedReplicas is the number of replicas that have been updated to the desired revision of the PodCliqueSet.
	// +kubebuilder:default=0
	UpdatedReplicas int32 `json:"updatedReplicas"`
	// AvailableReplicas is the number of PodCliqueSet replicas that are available.
	// A PodCliqueSet replica is considered available when all standalone PodCliques within that replica
	// have MinAvailableBreached condition = False AND all PodCliqueScalingGroups (PCSG) within that replica
	// have MinAvailableBreached condition = False.
	// +kubebuilder:default=0
	AvailableReplicas int32 `json:"availableReplicas"`
	// Selector is the label selector that determines which pods are part of the PodGang.
	// PodGang is a unit of scale and this selector is used by HPA to scale the PodGang based on metrics captured for the pods that match this selector.
	Selector *string `json:"hpaPodSelector,omitempty"`
	// PodGangStatuses captures the status for all the PodGang's that are part of the PodCliqueSet.
	PodGangStatutes []PodGangStatus `json:"podGangStatuses,omitempty"`
	// CurrentGenerationHash is a hash value generated out of a collection of fields in a PodCliqueSet.
	// Since only a subset of fields is taken into account when generating the hash, not every change in the PodCliqueSetSpec will
	// be accounted for when generating this hash value. A field in PodCliqueSetSpec is included if a change to it triggers
	// a rolling update of PodCliques and/or PodCliqueScalingGroups.
	// Only if this value is not nil and the newly computed hash value is different from the persisted CurrentGenerationHash value
	// then a rolling update needs to be triggerred.
	CurrentGenerationHash *string `json:"currentGenerationHash,omitempty"`
	// RollingUpdateProgress represents the progress of a rolling update.
	RollingUpdateProgress *PodCliqueSetRollingUpdateProgress `json:"rollingUpdateProgress,omitempty"`
}

PodCliqueSetStatus defines the status of a PodCliqueSet.

func (*PodCliqueSetStatus) DeepCopy

func (in *PodCliqueSetStatus) DeepCopy() *PodCliqueSetStatus

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodCliqueSetStatus.

func (*PodCliqueSetStatus) DeepCopyInto

func (in *PodCliqueSetStatus) DeepCopyInto(out *PodCliqueSetStatus)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type PodCliqueSetTemplateSpec

type PodCliqueSetTemplateSpec struct {
	// Cliques is a slice of cliques that make up the PodGang. There should be at least one PodClique.
	Cliques []*PodCliqueTemplateSpec `json:"cliques"`
	// StartupType defines the type of startup dependency amongst the cliques within a PodGang.
	// If it is not defined then default of CliqueStartupTypeAnyOrder is used.
	// +kubebuilder:default=CliqueStartupTypeAnyOrder
	// +optional
	StartupType *CliqueStartupType `json:"cliqueStartupType,omitempty"`
	// PriorityClassName is the name of the PriorityClass to be used for the PodCliqueSet.
	// If specified, indicates the priority of the PodCliqueSet. "system-node-critical" and
	// "system-cluster-critical" are two special keywords which indicate the
	// highest priorities with the former being the highest priority. Any other
	// name must be defined by creating a PriorityClass object with that name.
	// If not specified, the pod priority will be default or zero if there is no default.
	// +optional
	PriorityClassName string `json:"priorityClassName,omitempty"`
	// HeadlessServiceConfig defines the config options for the headless service.
	// If present, create headless service for each PodGang.
	// +optional
	HeadlessServiceConfig *HeadlessServiceConfig `json:"headlessServiceConfig,omitempty"`
	// SchedulingPolicyConfig defines the scheduling policy configuration for the PodGang.
	// Defaulting only works for optional fields.
	// See https://github.com/kubernetes-sigs/controller-tools/issues/893#issuecomment-1991256368
	// +optional
	SchedulingPolicyConfig *SchedulingPolicyConfig `json:"schedulingPolicyConfig,omitempty"`
	// TerminationDelay is the delay after which the gang termination will be triggered.
	// A gang is a candidate for termination if number of running pods fall below a threshold for any PodClique.
	// If a PodGang remains a candidate past TerminationDelay then it will be terminated. This allows additional time
	// to the kube-scheduler to re-schedule sufficient pods in the PodGang that will result in having the total number of
	// running pods go above the threshold.
	// Defaults to 4 hours.
	// +optional
	TerminationDelay *metav1.Duration `json:"terminationDelay,omitempty"`
	// PodCliqueScalingGroupConfigs is a list of scaling groups for the PodCliqueSet.
	PodCliqueScalingGroupConfigs []PodCliqueScalingGroupConfig `json:"podCliqueScalingGroups,omitempty"`
}

PodCliqueSetTemplateSpec defines a template spec for a PodGang. A PodGang does not have a RestartPolicy field because the restart policy is predefined: If the number of pods in any of the cliques falls below the threshold, the entire PodGang will be restarted. The threshold is determined by either: - The value of "MinReplicas", if specified in the ScaleConfig of that clique, or - The "Replicas" value of that clique

func (*PodCliqueSetTemplateSpec) DeepCopy

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodCliqueSetTemplateSpec.

func (*PodCliqueSetTemplateSpec) DeepCopyInto

func (in *PodCliqueSetTemplateSpec) DeepCopyInto(out *PodCliqueSetTemplateSpec)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type PodCliqueSpec

type PodCliqueSpec struct {
	// RoleName is the name of the role that this PodClique will assume.
	RoleName string `json:"roleName"`
	// Spec is the spec of the pods in the clique.
	PodSpec corev1.PodSpec `json:"podSpec"`
	// Replicas is the number of replicas of the pods in the clique. It cannot be less than 1.
	Replicas int32 `json:"replicas"`
	// MinAvailable serves two purposes:
	// 1. It defines the minimum number of pods that are guaranteed to be gang scheduled.
	// 2. It defines the minimum requirement of available pods in a PodClique. Violation of this threshold will result in termination of the PodGang that it belongs to.
	// If MinAvailable is not set, then it will default to the template Replicas.
	// +optional
	MinAvailable *int32 `json:"minAvailable,omitempty"`
	// StartsAfter provides you a way to explicitly define the startup dependencies amongst cliques.
	// If CliqueStartupType in PodGang has been set to 'CliqueStartupTypeExplicit', then to create an ordered start amongst PodClique's StartsAfter can be used.
	// A forest of DAG's can be defined to model any start order dependencies. If there are more than one PodClique's defined and StartsAfter is not set for any of them,
	// then their startup order is random at best and must not be relied upon.
	// Validations:
	// 1. If a StartsAfter has been defined and one or more cycles are detected in DAG's then it will be flagged as validation error.
	// 2. If StartsAfter is defined and does not identify any PodClique then it will be flagged as a validation error.
	// +optional
	StartsAfter []string `json:"startsAfter,omitempty"`
	// ScaleConfig is the horizontal pod autoscaler configuration for a PodClique.
	// +optional
	ScaleConfig *AutoScalingConfig `json:"autoScalingConfig,omitempty"`
}

PodCliqueSpec defines the specification of a PodClique.

func (*PodCliqueSpec) DeepCopy

func (in *PodCliqueSpec) DeepCopy() *PodCliqueSpec

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodCliqueSpec.

func (*PodCliqueSpec) DeepCopyInto

func (in *PodCliqueSpec) DeepCopyInto(out *PodCliqueSpec)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type PodCliqueStatus

type PodCliqueStatus struct {
	// ObservedGeneration is the most recent generation observed by the controller.
	ObservedGeneration *int64 `json:"observedGeneration,omitempty"`
	// LastErrors captures the last errors observed by the controller when reconciling the PodClique.
	LastErrors []LastError `json:"lastErrors,omitempty"`
	// Replicas is the total number of non-terminated Pods targeted by this PodClique.
	Replicas int32 `json:"replicas,omitempty"`
	// ReadyReplicas is the number of ready Pods targeted by this PodClique.
	// +kubebuilder:default=0
	ReadyReplicas int32 `json:"readyReplicas"`
	// UpdatedReplicas is the number of Pods that have been updated and are at the desired revision of the PodClique.
	// +kubebuilder:default=0
	UpdatedReplicas int32 `json:"updatedReplicas"`
	// ScheduleGatedReplicas is the number of Pods that have been created with one or more scheduling gate(s) set.
	// Sum of ReadyReplicas and ScheduleGatedReplicas will always be <= Replicas.
	// +kubebuilder:default=0
	ScheduleGatedReplicas int32 `json:"scheduleGatedReplicas"`
	// ScheduledReplicas is the number of Pods that have been scheduled by the kube-scheduler.
	// +kubebuilder:default=0
	ScheduledReplicas int32 `json:"scheduledReplicas"`
	// Selector is the label selector that determines which pods are part of the PodClique.
	// PodClique is a unit of scale and this selector is used by HPA to scale the PodClique based on metrics captured for the pods that match this selector.
	Selector *string `json:"hpaPodSelector,omitempty"`
	// Conditions represents the latest available observations of the clique by its controller.
	Conditions []metav1.Condition `json:"conditions,omitempty"`
	// CurrentPodCliqueSetGenerationHash establishes a correlation to PodCliqueSet generation hash indicating
	// that the spec of the PodCliqueSet at this generation is fully realized in the PodClique.
	CurrentPodCliqueSetGenerationHash *string `json:"currentPodCliqueSetGenerationHash,omitempty"`
	// CurrentPodTemplateHash establishes a correlation to PodClique template hash indicating
	// that the spec of the PodClique at this template hash is fully realized in the PodClique.
	CurrentPodTemplateHash *string `json:"currentPodTemplateHash,omitempty"`
	// RollingUpdateProgress provides details about the ongoing rolling update of the PodClique.
	RollingUpdateProgress *PodCliqueRollingUpdateProgress `json:"rollingUpdateProgress,omitempty"`
}

PodCliqueStatus defines the status of a PodClique.

func (*PodCliqueStatus) DeepCopy

func (in *PodCliqueStatus) DeepCopy() *PodCliqueStatus

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodCliqueStatus.

func (*PodCliqueStatus) DeepCopyInto

func (in *PodCliqueStatus) DeepCopyInto(out *PodCliqueStatus)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type PodCliqueTemplateSpec

type PodCliqueTemplateSpec struct {
	// Name must be unique within a PodCliqueSet and is used to denote a role.
	// Once set it cannot be updated.
	// More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names#names
	Name string `json:"name"`
	// Labels is a map of string keys and values that can be used to organize and categorize
	// (scope and select) objects. May match selectors of replication controllers
	// and services.
	// More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels
	// +optional
	Labels map[string]string `json:"labels,omitempty"`
	// Annotations is an unstructured key value map stored with a resource that may be
	// set by external tools to store and retrieve arbitrary metadata. They are not
	// queryable and should be preserved when modifying objects.
	// More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations
	// +optional
	Annotations map[string]string `json:"annotations,omitempty"`
	// Specification of the desired behavior of a PodClique.
	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
	Spec PodCliqueSpec `json:"spec"`
}

PodCliqueTemplateSpec defines a template spec for a PodClique.

func (*PodCliqueTemplateSpec) DeepCopy

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodCliqueTemplateSpec.

func (*PodCliqueTemplateSpec) DeepCopyInto

func (in *PodCliqueTemplateSpec) DeepCopyInto(out *PodCliqueTemplateSpec)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type PodGangPhase

type PodGangPhase string

PodGangPhase represents the phase of a PodGang. +kubebuilder:validation:Enum={Pending,Starting,Running,Failed,Succeeded}

const (
	// PodGangPending indicates that the pods in a PodGang have not yet been taken up for scheduling.
	PodGangPending PodGangPhase = "Pending"
	// PodGangStarting indicates that the pods are bound to nodes by the scheduler and are starting.
	PodGangStarting PodGangPhase = "Starting"
	// PodGangRunning indicates that the all the pods in a PodGang are running.
	PodGangRunning PodGangPhase = "Running"
	// PodGangFailed indicates that one or more pods in a PodGang have failed.
	// This is a terminal state and is typically used for batch jobs.
	PodGangFailed PodGangPhase = "Failed"
	// PodGangSucceeded indicates that all the pods in a PodGang have succeeded.
	// This is a terminal state and is typically used for batch jobs.
	PodGangSucceeded PodGangPhase = "Succeeded"
)

type PodGangStatus

type PodGangStatus struct {
	// Name is the name of the PodGang.
	Name string `json:"name"`
	// Phase is the current phase of the PodGang.
	Phase PodGangPhase `json:"phase"`
	// Conditions represents the latest available observations of the PodGang by its controller.
	Conditions []metav1.Condition `json:"conditions,omitempty"`
}

PodGangStatus defines the status of a PodGang.

func (*PodGangStatus) DeepCopy

func (in *PodGangStatus) DeepCopy() *PodGangStatus

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodGangStatus.

func (*PodGangStatus) DeepCopyInto

func (in *PodGangStatus) DeepCopyInto(out *PodGangStatus)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type PodsSelectedToUpdate

type PodsSelectedToUpdate struct {
	// Current captures the current pod name that is a target for update.
	Current string `json:"current"`
	// Completed captures the pod names that have already been updated.
	Completed []string `json:"completed,omitempty"`
}

PodsSelectedToUpdate captures the current and previous set of pod names that have been selected for update in a rolling update.

func (*PodsSelectedToUpdate) DeepCopy

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodsSelectedToUpdate.

func (*PodsSelectedToUpdate) DeepCopyInto

func (in *PodsSelectedToUpdate) DeepCopyInto(out *PodsSelectedToUpdate)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type SchedulingPolicyConfig

type SchedulingPolicyConfig struct {
	// NetworkPackGroupConfigs is a list of NetworkPackGroupConfig's that define how the pods in the PodCliqueSet are optimally packaged w.r.t cluster's network topology.
	// PodCliques that are not part of any NetworkPackGroupConfig are scheduled with best-effort network packing strategy.
	// Exercise caution when defining NetworkPackGroupConfig. Some of the downsides include:
	// 1. Scheduling may be delayed until optimal placement is available.
	// 2. Pods created due to scale-out or rolling upgrades is not guaranteed optimal placement.
	NetworkPackGroupConfigs []NetworkPackGroupConfig `json:"networkPackGroupConfigs,omitempty"`
}

SchedulingPolicyConfig defines the scheduling policy configuration for the PodGang.

func (*SchedulingPolicyConfig) DeepCopy

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SchedulingPolicyConfig.

func (*SchedulingPolicyConfig) DeepCopyInto

func (in *SchedulingPolicyConfig) DeepCopyInto(out *SchedulingPolicyConfig)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL