-
Notifications
You must be signed in to change notification settings - Fork 262
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add RayClusterReplicaSet and RayClusterFleet apis (#103)
* Add RayClusterReplicaSet api * Add RayClusterFleet api * Update the api spec to align with deployment and replicaset * Add updated crds and roles * Reorganize the controller files * Update the spec names
- Loading branch information
Showing
27 changed files
with
34,841 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
/* | ||
Copyright 2024 The Aibrix Team. | ||
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. | ||
*/ | ||
|
||
// Package v1alpha1 contains API Schema definitions for the orchestration v1alpha1 API group | ||
// +kubebuilder:object:generate=true | ||
// +groupName=orchestration.aibrix.ai | ||
package v1alpha1 | ||
|
||
import ( | ||
"k8s.io/apimachinery/pkg/runtime/schema" | ||
"sigs.k8s.io/controller-runtime/pkg/scheme" | ||
) | ||
|
||
var ( | ||
// GroupVersion is group version used to register these objects | ||
GroupVersion = schema.GroupVersion{Group: "orchestration.aibrix.ai", 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 | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,172 @@ | ||
/* | ||
Copyright 2024 The Aibrix Team. | ||
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. | ||
*/ | ||
|
||
package v1alpha1 | ||
|
||
import ( | ||
rayclusterv1 "github.com/ray-project/kuberay/ray-operator/apis/ray/v1" | ||
appsv1 "k8s.io/api/apps/v1" | ||
v1 "k8s.io/api/core/v1" | ||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | ||
) | ||
|
||
// EDIT THIS FILE! THIS IS SCAFFOLDING FOR YOU TO OWN! | ||
// NOTE: json tags are required. Any new fields you add must have json tags for the fields to be serialized. | ||
|
||
// RayClusterFleetSpec defines the desired state of RayClusterFleet | ||
type RayClusterFleetSpec struct { | ||
// Number of desired pods. This is a pointer to distinguish between explicit | ||
// zero and not specified. Defaults to 1. | ||
// +optional | ||
Replicas *int32 `json:"replicas,omitempty" protobuf:"varint,1,opt,name=replicas"` | ||
|
||
// Label selector for pods. Existing ReplicaSets whose pods are | ||
// selected by this will be the ones affected by this deployment. | ||
// It must match the pod template's labels. | ||
Selector *metav1.LabelSelector `json:"selector" protobuf:"bytes,2,opt,name=selector"` | ||
|
||
// Template describes the pods that will be created. | ||
// The only allowed template.spec.restartPolicy value is "Always". | ||
Template rayclusterv1.RayClusterSpec `json:"template" protobuf:"bytes,3,opt,name=template"` | ||
|
||
// The deployment strategy to use to replace existing pods with new ones. | ||
// +optional | ||
// +patchStrategy=retainKeys | ||
Strategy appsv1.DeploymentStrategy `json:"strategy,omitempty" patchStrategy:"retainKeys" protobuf:"bytes,4,opt,name=strategy"` | ||
|
||
// Minimum number of seconds for which a newly created pod should be ready | ||
// without any of its container crashing, for it to be considered available. | ||
// Defaults to 0 (pod will be considered available as soon as it is ready) | ||
// +optional | ||
MinReadySeconds int32 `json:"minReadySeconds,omitempty" protobuf:"varint,5,opt,name=minReadySeconds"` | ||
|
||
// The number of old ReplicaSets to retain to allow rollback. | ||
// This is a pointer to distinguish between explicit zero and not specified. | ||
// Defaults to 10. | ||
// +optional | ||
RevisionHistoryLimit *int32 `json:"revisionHistoryLimit,omitempty" protobuf:"varint,6,opt,name=revisionHistoryLimit"` | ||
|
||
// Indicates that the deployment is paused. | ||
// +optional | ||
Paused bool `json:"paused,omitempty" protobuf:"varint,7,opt,name=paused"` | ||
|
||
// The maximum time in seconds for a deployment to make progress before it | ||
// is considered to be failed. The deployment controller will continue to | ||
// process failed deployments and a condition with a ProgressDeadlineExceeded | ||
// reason will be surfaced in the deployment status. Note that progress will | ||
// not be estimated during the time a deployment is paused. Defaults to 600s. | ||
ProgressDeadlineSeconds *int32 `json:"progressDeadlineSeconds,omitempty" protobuf:"varint,9,opt,name=progressDeadlineSeconds"` | ||
} | ||
|
||
// RayClusterFleetStatus defines the observed state of RayClusterFleet | ||
type RayClusterFleetStatus struct { | ||
// The generation observed by the deployment controller. | ||
// +optional | ||
ObservedGeneration int64 `json:"observedGeneration,omitempty" protobuf:"varint,1,opt,name=observedGeneration"` | ||
|
||
// Total number of non-terminated pods targeted by this deployment (their labels match the selector). | ||
// +optional | ||
Replicas int32 `json:"replicas,omitempty" protobuf:"varint,2,opt,name=replicas"` | ||
|
||
// Total number of non-terminated pods targeted by this deployment that have the desired template spec. | ||
// +optional | ||
UpdatedReplicas int32 `json:"updatedReplicas,omitempty" protobuf:"varint,3,opt,name=updatedReplicas"` | ||
|
||
// readyReplicas is the number of pods targeted by this Deployment with a Ready Condition. | ||
// +optional | ||
ReadyReplicas int32 `json:"readyReplicas,omitempty" protobuf:"varint,7,opt,name=readyReplicas"` | ||
|
||
// Total number of available pods (ready for at least minReadySeconds) targeted by this deployment. | ||
// +optional | ||
AvailableReplicas int32 `json:"availableReplicas,omitempty" protobuf:"varint,4,opt,name=availableReplicas"` | ||
|
||
// Total number of unavailable pods targeted by this deployment. This is the total number of | ||
// pods that are still required for the deployment to have 100% available capacity. They may | ||
// either be pods that are running but not yet available or pods that still have not been created. | ||
// +optional | ||
UnavailableReplicas int32 `json:"unavailableReplicas,omitempty" protobuf:"varint,5,opt,name=unavailableReplicas"` | ||
|
||
// Represents the latest available observations of a deployment's current state. | ||
// +patchMergeKey=type | ||
// +patchStrategy=merge | ||
// +listType=map | ||
// +listMapKey=type | ||
Conditions []FleetCondition `json:"conditions,omitempty" patchStrategy:"merge" patchMergeKey:"type" protobuf:"bytes,6,rep,name=conditions"` | ||
|
||
// Count of hash collisions for the Deployment. The Deployment controller uses this | ||
// field as a collision avoidance mechanism when it needs to create the name for the | ||
// newest ReplicaSet. | ||
// +optional | ||
CollisionCount *int32 `json:"collisionCount,omitempty" protobuf:"varint,8,opt,name=collisionCount"` | ||
} | ||
|
||
// DeploymentCondition describes the state of a deployment at a certain point. | ||
type FleetCondition struct { | ||
// Type of deployment condition. | ||
Type FleetConditionType `json:"type" protobuf:"bytes,1,opt,name=type,casttype=DeploymentConditionType"` | ||
// Status of the condition, one of True, False, Unknown. | ||
Status v1.ConditionStatus `json:"status" protobuf:"bytes,2,opt,name=status,casttype=k8s.io/api/core/v1.ConditionStatus"` | ||
// The last time this condition was updated. | ||
LastUpdateTime metav1.Time `json:"lastUpdateTime,omitempty" protobuf:"bytes,6,opt,name=lastUpdateTime"` | ||
// Last time the condition transitioned from one status to another. | ||
LastTransitionTime metav1.Time `json:"lastTransitionTime,omitempty" protobuf:"bytes,7,opt,name=lastTransitionTime"` | ||
// The reason for the condition's last transition. | ||
Reason string `json:"reason,omitempty" protobuf:"bytes,4,opt,name=reason"` | ||
// A human readable message indicating details about the transition. | ||
Message string `json:"message,omitempty" protobuf:"bytes,5,opt,name=message"` | ||
} | ||
|
||
type FleetConditionType string | ||
|
||
// These are valid conditions of a deployment. | ||
const ( | ||
// Available means the deployment is available, ie. at least the minimum available | ||
// replicas required are up and running for at least minReadySeconds. | ||
FleetAvailable FleetConditionType = "Available" | ||
// Progressing means the deployment is progressing. Progress for a deployment is | ||
// considered when a new replica set is created or adopted, and when new pods scale | ||
// up or old pods scale down. Progress is not estimated for paused deployments or | ||
// when progressDeadlineSeconds is not specified. | ||
FleetProgressing FleetConditionType = "Progressing" | ||
// ReplicaFailure is added in a deployment when one of its pods fails to be created | ||
// or deleted. | ||
FleetReplicaFailure FleetConditionType = "ReplicaFailure" | ||
) | ||
|
||
//+kubebuilder:object:root=true | ||
//+kubebuilder:subresource:status | ||
|
||
// RayClusterFleet is the Schema for the rayclusterfleets API | ||
type RayClusterFleet struct { | ||
metav1.TypeMeta `json:",inline"` | ||
metav1.ObjectMeta `json:"metadata,omitempty"` | ||
|
||
Spec RayClusterFleetSpec `json:"spec,omitempty"` | ||
Status RayClusterFleetStatus `json:"status,omitempty"` | ||
} | ||
|
||
//+kubebuilder:object:root=true | ||
|
||
// RayClusterFleetList contains a list of RayClusterFleet | ||
type RayClusterFleetList struct { | ||
metav1.TypeMeta `json:",inline"` | ||
metav1.ListMeta `json:"metadata,omitempty"` | ||
Items []RayClusterFleet `json:"items"` | ||
} | ||
|
||
func init() { | ||
SchemeBuilder.Register(&RayClusterFleet{}, &RayClusterFleetList{}) | ||
} |
109 changes: 109 additions & 0 deletions
109
api/orchestration/v1alpha1/rayclusterreplicaset_types.go
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,109 @@ | ||
/* | ||
Copyright 2024 The Aibrix Team. | ||
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. | ||
*/ | ||
|
||
package v1alpha1 | ||
|
||
import ( | ||
rayclusterv1 "github.com/ray-project/kuberay/ray-operator/apis/ray/v1" | ||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | ||
) | ||
|
||
// EDIT THIS FILE! THIS IS SCAFFOLDING FOR YOU TO OWN! | ||
// NOTE: json tags are required. Any new fields you add must have json tags for the fields to be serialized. | ||
|
||
// RayClusterReplicaSetSpec defines the desired state of RayClusterReplicaSet | ||
type RayClusterReplicaSetSpec struct { | ||
// Replicas is the number of desired replicas. | ||
// This is a pointer to distinguish between explicit zero and unspecified. | ||
// Defaults to 1. | ||
// More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/#what-is-a-replicationcontroller | ||
// +optional | ||
Replicas *int32 `json:"replicas,omitempty" protobuf:"varint,1,opt,name=replicas"` | ||
|
||
// Minimum number of seconds for which a newly created pod should be ready | ||
// without any of its container crashing, for it to be considered available. | ||
// Defaults to 0 (pod will be considered available as soon as it is ready) | ||
// +optional | ||
MinReadySeconds int32 `json:"minReadySeconds,omitempty" protobuf:"varint,4,opt,name=minReadySeconds"` | ||
|
||
// Selector is a label query over RayCluster that should match the replica count. | ||
// Label keys and values that must match in order to be controlled by this replica set. | ||
// It must match the pod template's labels. | ||
// More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors | ||
Selector *metav1.LabelSelector `json:"selector" protobuf:"bytes,2,opt,name=selector"` | ||
|
||
// Template is the object that describes the pod that will be created if | ||
// insufficient replicas are detected. | ||
// More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template | ||
// +optional | ||
Template rayclusterv1.RayClusterSpec `json:"template,omitempty"` | ||
} | ||
|
||
// RayClusterReplicaSetStatus defines the observed state of RayClusterReplicaSet | ||
type RayClusterReplicaSetStatus struct { | ||
// Replicas is the most recently observed number of replicas. | ||
// More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/#what-is-a-replicationcontroller | ||
Replicas int32 `json:"replicas" protobuf:"varint,1,opt,name=replicas"` | ||
|
||
// The number of pods that have labels matching the labels of the pod template of the replicaset. | ||
// +optional | ||
FullyLabeledReplicas int32 `json:"fullyLabeledReplicas,omitempty" protobuf:"varint,2,opt,name=fullyLabeledReplicas"` | ||
|
||
// readyReplicas is the number of pods targeted by this ReplicaSet with a Ready Condition. | ||
// +optional | ||
ReadyReplicas int32 `json:"readyReplicas,omitempty" protobuf:"varint,4,opt,name=readyReplicas"` | ||
|
||
// The number of available replicas (ready for at least minReadySeconds) for this replica set. | ||
// +optional | ||
AvailableReplicas int32 `json:"availableReplicas,omitempty" protobuf:"varint,5,opt,name=availableReplicas"` | ||
|
||
// ObservedGeneration reflects the generation of the most recently observed ReplicaSet. | ||
// +optional | ||
ObservedGeneration int64 `json:"observedGeneration,omitempty" protobuf:"varint,3,opt,name=observedGeneration"` | ||
|
||
// Represents the latest available observations of a replica set's current state. | ||
// +optional | ||
// +patchMergeKey=type | ||
// +patchStrategy=merge | ||
// +listType=map | ||
// +listMapKey=type | ||
Conditions []metav1.Condition `json:"conditions,omitempty" patchStrategy:"merge" patchMergeKey:"type" protobuf:"bytes,6,rep,name=conditions"` | ||
} | ||
|
||
//+kubebuilder:object:root=true | ||
//+kubebuilder:subresource:status | ||
|
||
// RayClusterReplicaSet is the Schema for the rayclusterreplicasets API | ||
type RayClusterReplicaSet struct { | ||
metav1.TypeMeta `json:",inline"` | ||
metav1.ObjectMeta `json:"metadata,omitempty"` | ||
|
||
Spec RayClusterReplicaSetSpec `json:"spec,omitempty"` | ||
Status RayClusterReplicaSetStatus `json:"status,omitempty"` | ||
} | ||
|
||
//+kubebuilder:object:root=true | ||
|
||
// RayClusterReplicaSetList contains a list of RayClusterReplicaSet | ||
type RayClusterReplicaSetList struct { | ||
metav1.TypeMeta `json:",inline"` | ||
metav1.ListMeta `json:"metadata,omitempty"` | ||
Items []RayClusterReplicaSet `json:"items"` | ||
} | ||
|
||
func init() { | ||
SchemeBuilder.Register(&RayClusterReplicaSet{}, &RayClusterReplicaSetList{}) | ||
} |
Oops, something went wrong.