/
cluster_types.go
123 lines (96 loc) · 4.55 KB
/
cluster_types.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
/*
Copyright 2023.
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 (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
const (
// KubeClusterKind is the kind name.
KubeClusterKind = "KubeCluster"
// KubeClusterPlural is the TensorflowPlural for KubeCluster.
KubeClusterPlural = "KubeClusters"
// KubeClusterSingular is the singular for KubeCluster.
KubeClusterSingular = "KubeCluster"
// ControllerNameLabel represents the label key for the operator name, e.g. tf-operator, mpi-operator, etc.
ControllerNameLabel = "kubeclusetr.org/controller-name"
// ClusterNameLabel represents the label key for the cluster name, the value is the cluster name.
ClusterNameLabel = "kubeclusetr.org/clusetr-name"
ClusterDefaultContainerName = "kubenode"
)
type ClusterType string
// ClusterSpec defines the desired state of KubeCluster
type ClusterSpec struct {
// INSERT ADDITIONAL SPEC FIELDS - desired state of cluster
// Important: Run "make" to regenerate code after modifying this file
// Foo is an example field of KubeCluster. Edit cluster_types.go to remove/update
//Foo string `json:"foo,omitempty"`
//ClusterType define the type of the cluster to be created
ClusterType ClusterType `json:"clusterType"`
//ClusterType define the template of the cluster to be created
ClusterReplicaSpec map[ReplicaType]*ReplicaSpec `json:"clusterReplicaSpec"`
// MainContainer specifies name of the main container which
// run as kubenode.
MainContainer string `json:"mainContainer,omitempty"`
// `RunPolicy` encapsulates various runtime policies of the distributed training
// cluster, for example how to clean up resources and how long the cluster can stay
// active.
RunPolicy RunPolicy `json:"runPolicy,omitempty"`
}
// ClusterStatus defines the observed state of KubeCluster
type ClusterStatus struct {
// Conditions is an array of current observed KubeCluster conditions.
Conditions []ClusterCondition `json:"conditions,omitempty"`
// ReplicaStatuses is map of ReplicaType and ReplicaStatus,
// specifies the status of each replica.
ReplicaStatuses map[ReplicaType]*ReplicaStatus `json:"replicaStatuses,omitempty"`
// Represents time when the KubeCluster was acknowledged by the KubeCluster controller.
// It is not guaranteed to be set in happens-before order across separate operations.
// It is represented in RFC3339 form and is in UTC.
StartTime *metav1.Time `json:"startTime,omitempty"`
// Represents last time when the KubeCluster was reconciled. It is not guaranteed to
// be set in happens-before order across separate operations.
// It is represented in RFC3339 form and is in UTC.
LastReconcileTime *metav1.Time `json:"lastReconcileTime,omitempty"`
// Represents time when the cluster was completed. It is not guaranteed to
// be set in happens-before order across separate operations.
// It is represented in RFC3339 form and is in UTC.
CompletionTime *metav1.Time `json:"completionTime,omitempty"`
}
// +genclient
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
// +resource:path=kubeclusters
//+kubebuilder:resource:scope=Namespaced,path=kubeclusters,shortName={"kc","kcluster"}
//+kubebuilder:object:root=true
//+kubebuilder:printcolumn:JSONPath=`.metadata.creationTimestamp`,name="Age",type=date
//+kubebuilder:printcolumn:JSONPath=`.status.conditions[-1:].type`,name="State",type=string
//+kubebuilder:subresource:status
// KubeCluster is the Schema for the clusters API
type KubeCluster struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`
Spec ClusterSpec `json:"spec,omitempty"`
Status ClusterStatus `json:"status,omitempty"`
}
// +k8s:deepcopy-gen:interfaces=k8s.io/apimzxachinery/pkg/runtime.Object
// +resource:path=kubeclusters
//+kubebuilder:object:root=true
// KubeClusterList contains a list of KubeCluster
type KubeClusterList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []KubeCluster `json:"items"`
}
func init() {
SchemeBuilder.Register(&KubeCluster{}, &KubeClusterList{})
SchemeBuilder.SchemeBuilder.Register(addKubeClusterDefaultingFuncs)
}