add member cluster api
Signed-off-by: Kevin Wang <kevinwzf0126@gmail.com>
This commit is contained in:
parent
edbfad18cb
commit
23c812744a
|
@ -0,0 +1,6 @@
|
|||
package membercluster
|
||||
|
||||
// GroupName is the group name used in this package
|
||||
const (
|
||||
GroupName = "membercluster.karmada.io"
|
||||
)
|
|
@ -0,0 +1,5 @@
|
|||
// +k8s:deepcopy-gen=package
|
||||
// +groupName=membercluster.karmada.io
|
||||
|
||||
// Package v1alpha1 is the v1alpha1 version of the API.
|
||||
package v1alpha1
|
|
@ -0,0 +1,39 @@
|
|||
package v1alpha1
|
||||
|
||||
import (
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
"k8s.io/apimachinery/pkg/runtime"
|
||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||
|
||||
"github.com/huawei-cloudnative/karmada/pkg/apis/membercluster"
|
||||
)
|
||||
|
||||
// SchemeGroupVersion is group version used to register these objects
|
||||
var SchemeGroupVersion = schema.GroupVersion{Group: membercluster.GroupName, Version: "v1alpha1"}
|
||||
|
||||
// Kind takes an unqualified kind and returns back a Group qualified GroupKind
|
||||
func Kind(kind string) schema.GroupKind {
|
||||
return SchemeGroupVersion.WithKind(kind).GroupKind()
|
||||
}
|
||||
|
||||
// Resource takes an unqualified resource and returns a Group qualified GroupResource
|
||||
func Resource(resource string) schema.GroupResource {
|
||||
return SchemeGroupVersion.WithResource(resource).GroupResource()
|
||||
}
|
||||
|
||||
var (
|
||||
// SchemeBuilder initializes a scheme builder
|
||||
SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes)
|
||||
// AddToScheme is a global function that registers this API group & version to a scheme
|
||||
AddToScheme = SchemeBuilder.AddToScheme
|
||||
)
|
||||
|
||||
// Adds the list of known types to Scheme.
|
||||
func addKnownTypes(scheme *runtime.Scheme) error {
|
||||
scheme.AddKnownTypes(SchemeGroupVersion,
|
||||
&MemberCluster{},
|
||||
&MemberClusterList{},
|
||||
)
|
||||
metav1.AddToGroupVersion(scheme, SchemeGroupVersion)
|
||||
return nil
|
||||
}
|
|
@ -0,0 +1,128 @@
|
|||
package v1alpha1
|
||||
|
||||
import (
|
||||
corev1 "k8s.io/api/core/v1"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||
)
|
||||
|
||||
// +genclient
|
||||
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
|
||||
|
||||
// MemberCluster represents the desire state and status of a member cluster.
|
||||
type MemberCluster struct {
|
||||
metav1.TypeMeta `json:",inline"`
|
||||
metav1.ObjectMeta `json:"metadata,omitempty"`
|
||||
|
||||
// Spec represents the specification of the desired behavior of member cluster.
|
||||
Spec MemberClusterSpec `json:"spec"`
|
||||
|
||||
// Status represents the status of member cluster.
|
||||
// +optional
|
||||
Status MemberClusterStatus `json:"status,omitempty"`
|
||||
}
|
||||
|
||||
// MemberClusterSpec defines the desired state of a member cluster.
|
||||
type MemberClusterSpec struct {
|
||||
// ManageMode specifies the relationship between control plane and member cluster,
|
||||
// the mode determines how to reach each other.
|
||||
// +optional
|
||||
ManageMode ClusterManageMode `json:"manageMode,omitempty"`
|
||||
|
||||
// Accepted represents if the member cluster has been accepted by control plane.
|
||||
// Default value is false.
|
||||
// If member cluster working in 'Delegation' mode, this always be true.
|
||||
// If member cluster working in 'SelfManagement' mode, this will turn to true only after administrator
|
||||
// accepted the request from member cluster.
|
||||
// +optional
|
||||
Accepted bool `json:"accepted,omitempty"`
|
||||
|
||||
// The API endpoint of the member cluster. This can be a hostname,
|
||||
// hostname:port, IP or IP:port.
|
||||
// +optional
|
||||
APIEndpoint string `json:"apiEndpoint,omitempty"`
|
||||
|
||||
// SecretRef represents the secret contains mandatory credentials to access the member cluster.
|
||||
// The secret should hold credentials as follows:
|
||||
// - secret.data.token
|
||||
// - secret.data.caBundle
|
||||
// +optional
|
||||
SecretRef *LocalSecretReference `json:"secretRef,omitempty"`
|
||||
|
||||
// Provider represents the cloud provider name of the member cluster.
|
||||
// +optional
|
||||
Provider string `json:"provider,omitempty"`
|
||||
|
||||
// Region represents the region of the member cluster locate in.
|
||||
// +optional
|
||||
Region string `json:"region,omitempty"`
|
||||
|
||||
// Zone represents the zone of the member cluster locate in.
|
||||
// +optional
|
||||
Zone string `json:"zone,omitempty"`
|
||||
|
||||
// Taints attached to the member cluster.
|
||||
// Taints on the cluster have the "effect" on
|
||||
// any resource that does not tolerate the Taint.
|
||||
// +optional
|
||||
Taints []corev1.Taint `json:"taints,omitempty"`
|
||||
}
|
||||
|
||||
// ClusterManageMode presents member clusters working mode.
|
||||
type ClusterManageMode string
|
||||
|
||||
const (
|
||||
// Delegation represents a member cluster will be managed directly by control plane.
|
||||
Delegation ClusterManageMode = "Delegation"
|
||||
// SelfManagement represents a member cluster will be managed by itself.
|
||||
SelfManagement ClusterManageMode = "SelfManagement"
|
||||
)
|
||||
|
||||
// LocalSecretReference is a reference to a secret within the enclosing
|
||||
// namespace.
|
||||
type LocalSecretReference struct {
|
||||
// Namespace is the namespace for the resource being referenced.
|
||||
Namespace string `json:"namespace"`
|
||||
|
||||
// Name is the name of resource being referenced.
|
||||
Name string `json:"name"`
|
||||
}
|
||||
|
||||
// MemberClusterStatus contains information about the current status of a
|
||||
// cluster updated periodically by cluster controller.
|
||||
type MemberClusterStatus struct {
|
||||
// KubernetesVersion represents version of the member cluster.
|
||||
// +optional
|
||||
KubernetesVersion string `json:"kubernetesVersion,omitempty"`
|
||||
|
||||
// APIEnablement represents the list of APIs installed in the member cluster.
|
||||
// +optional
|
||||
APIEnablement []schema.GroupVersionKind `json:"apiEnablement,omitempty"`
|
||||
|
||||
// Conditions is an array of current cluster conditions.
|
||||
Conditions []metav1.Condition `json:"conditions,omitempty"`
|
||||
|
||||
// NodeSummary represents the summary of nodes status in the member cluster.
|
||||
NodeSummary NodeSummary `json:"nodeSummary,omitempty"`
|
||||
}
|
||||
|
||||
// NodeSummary represents the summary of nodes status in a specific cluster.
|
||||
type NodeSummary struct {
|
||||
// TotalNum is the total number of nodes in the cluster.
|
||||
TotalNum int `json:"totalNum,omitempty"`
|
||||
// ReadyNum is the number of ready nodes in the cluster.
|
||||
ReadyNum int `json:"readyNum,omitempty"`
|
||||
// Allocatable represents the allocatable resources across all nodes.
|
||||
Allocatable corev1.ResourceList `json:"allocatable,omitempty"`
|
||||
// Used represents the resources have been used across all nodes.
|
||||
Used corev1.ResourceList `json:"used,omitempty"`
|
||||
}
|
||||
|
||||
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
|
||||
|
||||
// MemberClusterList contains a list of member cluster
|
||||
type MemberClusterList struct {
|
||||
metav1.TypeMeta `json:",inline"`
|
||||
metav1.ListMeta `json:"metadata,omitempty"`
|
||||
Items []MemberCluster `json:"items"`
|
||||
}
|
Loading…
Reference in New Issue