K8s Lab 把当前仓库文档整理成一个可阅读的网页站点

Repository Reading Site

types.go

ml-platform/operator/api/v1alpha1/types.go

Text Assetml-platform/operator/api/v1alpha1/types.go3.0 KB2026年4月9日 14:01查看原始内容
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
}