Repository Reading Site
types.go
ml-platform/operator/api/v1alpha1/types.go
package v1alpha1
import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime/schema"
)
var (
GroupVersion = schema.GroupVersion{Group: "ml.k8s-lab.io", Version: "v1alpha1"}
SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes)
AddToScheme = SchemeBuilder.AddToScheme
)
func addKnownTypes(scheme *runtime.Scheme) error {
scheme.AddKnownTypes(GroupVersion,
&MLModel{},
&MLModelList{},
)
metav1.AddToGroupVersion(scheme, GroupVersion)
return nil
}
// MLModel 是自定义资源的 Go 类型定义
type MLModel struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`
Spec MLModelSpec `json:"spec,omitempty"`
Status MLModelStatus `json:"status,omitempty"`
}
// MLModelSpec 用户声明的期望状态
type MLModelSpec struct {
ModelPath string `json:"modelPath"`
Version string `json:"version"`
Replicas int32 `json:"replicas"`
ModelType string `json:"modelType,omitempty"`
MinReplicas *int32 `json:"minReplicas,omitempty"`
MaxReplicas *int32 `json:"maxReplicas,omitempty"`
}
// MLModelStatus Operator 观察到的实际状态
type MLModelStatus struct {
Phase string `json:"phase,omitempty"`
Endpoint string `json:"endpoint,omitempty"`
ReadyReplicas int32 `json:"readyReplicas,omitempty"`
Message string `json:"message,omitempty"`
Metrics *ModelMetrics `json:"metrics,omitempty"`
LastUpdated *metav1.Time `json:"lastUpdated,omitempty"`
}
type ModelMetrics struct {
MAE float64 `json:"mae,omitempty"`
RMSE float64 `json:"rmse,omitempty"`
R2Score float64 `json:"r2Score,omitempty"`
}
// MLModelList 资源列表
type MLModelList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []MLModel `json:"items"`
}
// DeepCopy 方法 (controller-runtime 要求)
func (in *MLModel) DeepCopyObject() runtime.Object {
out := new(MLModel)
in.DeepCopyInto(out)
return out
}
func (in *MLModel) DeepCopyInto(out *MLModel) {
*out = *in
out.TypeMeta = in.TypeMeta
in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
in.Spec.DeepCopyInto(&out.Spec)
in.Status.DeepCopyInto(&out.Status)
}
func (in *MLModelSpec) DeepCopyInto(out *MLModelSpec) {
*out = *in
if in.MinReplicas != nil {
out.MinReplicas = new(int32)
*out.MinReplicas = *in.MinReplicas
}
if in.MaxReplicas != nil {
out.MaxReplicas = new(int32)
*out.MaxReplicas = *in.MaxReplicas
}
}
func (in *MLModelStatus) DeepCopyInto(out *MLModelStatus) {
*out = *in
if in.Metrics != nil {
out.Metrics = new(ModelMetrics)
*out.Metrics = *in.Metrics
}
if in.LastUpdated != nil {
out.LastUpdated = in.LastUpdated.DeepCopy()
}
}
func (in *MLModelList) DeepCopyObject() runtime.Object {
out := new(MLModelList)
*out = *in
out.ListMeta = in.ListMeta
if in.Items != nil {
out.Items = make([]MLModel, len(in.Items))
for i := range in.Items {
in.Items[i].DeepCopyInto(&out.Items[i])
}
}
return out
}