Skip to content

Commit

Permalink
Merge pull request #13 from RainbowMango/pr_sync_13
Browse files Browse the repository at this point in the history
Sync APIs from karmada repo based on v1.3.0
  • Loading branch information
karmada-bot authored Nov 3, 2022
2 parents 0622649 + d49cd91 commit 1b543e6
Show file tree
Hide file tree
Showing 32 changed files with 1,231 additions and 146 deletions.
161 changes: 161 additions & 0 deletions cluster/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,30 @@ package cluster

import (
corev1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/resource"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

// ResourceName is the name identifying various resources in a ResourceList.
type ResourceName string

// Resource names must be not more than 63 characters, consisting of upper- or lower-case alphanumeric characters,
// with the -, _, and . characters allowed anywhere, except the first or last character.
// The default convention, matching that for annotations, is to use lower-case names, with dashes, rather than
// camel case, separating compound words.
// Fully-qualified resource typenames are constructed from a DNS-style subdomain, followed by a slash `/` and a name.
const (
// ResourceCPU in cores. (e,g. 500m = .5 cores)
ResourceCPU ResourceName = "cpu"
// ResourceMemory in bytes. (e,g. 500Gi = 500GiB = 500 * 1024 * 1024 * 1024)
ResourceMemory ResourceName = "memory"
// ResourceStorage is volume size, in bytes (e,g. 5Gi = 5GiB = 5 * 1024 * 1024 * 1024)
ResourceStorage ResourceName = "storage"
// ResourceEphemeralStorage is local ephemeral storage, in bytes. (e,g. 500Gi = 500GiB = 500 * 1024 * 1024 * 1024)
// The resource name for ResourceEphemeralStorage is alpha and it can change across releases.
ResourceEphemeralStorage ResourceName = "ephemeral-storage"
)

//revive:disable:exported

// +genclient
Expand All @@ -26,6 +47,26 @@ type Cluster struct {

// ClusterSpec defines the desired state of a member cluster.
type ClusterSpec struct {
// ID is the unique identifier for the cluster.
// It is different from the object uid(.metadata.uid) and typically collected automatically
// from member cluster during the progress of registration.
//
// The value is collected in order:
// 1. If the registering cluster enabled ClusterProperty API and defined the cluster ID by
// creating a ClusterProperty object with name 'cluster.clusterset.k8s.io', Karmada would
// take the defined value in the ClusterProperty object.
// See https://github.com/kubernetes-sigs/about-api for more details about ClusterProperty API.
// 2. Take the uid of 'kube-system' namespace on the registering cluster.
//
// Please don't update this value unless you know what you are doing, because
// it will/may be used to :
// - uniquely identify the clusters within the Karmada system.
// - compose the DNS name of multi-cluster services.
//
// +optional
// +kubebuilder:validation:Maxlength=128000
ID string `json:"id,omitempty"`

// SyncMode describes how a cluster sync resources from karmada control plane.
// +required
SyncMode ClusterSyncMode
Expand Down Expand Up @@ -61,6 +102,12 @@ type ClusterSpec struct {
// +optional
ProxyURL string

// ProxyHeader is the HTTP header required by proxy server.
// The key in the key-value pair is HTTP header key and value is the associated header payloads.
// For the header with multiple values, the values should be separated by comma(e.g. 'k1': 'v1,v2,v3').
// +optional
ProxyHeader map[string]string

// Provider represents the cloud provider name of the member cluster.
// +optional
Provider string
Expand All @@ -78,6 +125,104 @@ type ClusterSpec struct {
// any resource that does not tolerate the Taint.
// +optional
Taints []corev1.Taint

// ResourceModels is the list of resource modeling in this cluster. Each modeling quota can be customized by the user.
// Modeling name must be one of the following: cpu, memory, storage, ephemeral-storage.
// If the user does not define the modeling name and modeling quota, it will be the default model.
// The default model grade from 0 to 8.
// When grade = 0 or grade = 1, the default model's cpu quota and memory quota is a fix value.
// When grade greater than or equal to 2, each default model's cpu quota is [2^(grade-1), 2^grade), 2 <= grade <= 7
// Each default model's memory quota is [2^(grade + 2), 2^(grade + 3)), 2 <= grade <= 7
// E.g. grade 0 likes this:
// - grade: 0
// ranges:
// - name: "cpu"
// min: 0 C
// max: 1 C
// - name: "memory"
// min: 0 GB
// max: 4 GB
//
// - grade: 1
// ranges:
// - name: "cpu"
// min: 1 C
// max: 2 C
// - name: "memory"
// min: 4 GB
// max: 16 GB
//
// - grade: 2
// ranges:
// - name: "cpu"
// min: 2 C
// max: 4 C
// - name: "memory"
// min: 16 GB
// max: 32 GB
//
// - grade: 7
// range:
// - name: "cpu"
// min: 64 C
// max: 128 C
// - name: "memory"
// min: 512 GB
// max: 1024 GB
//
// grade 8, the last one likes below. No matter what Max value you pass,
// the meaning of Max value in this grade is infinite. You can pass any number greater than Min value.
// - grade: 8
// range:
// - name: "cpu"
// min: 128 C
// max: MAXINT
// - name: "memory"
// min: 1024 GB
// max: MAXINT
//
// +optional
ResourceModels []ResourceModel
}

// ResourceModel describes the modeling that you want to statistics.
type ResourceModel struct {
// Grade is the index for the resource modeling.
// +required
Grade uint

// Ranges describes the resource quota ranges.
// +required
Ranges []ResourceModelRange
}

// ResourceModelRange describes the detail of each modeling quota that ranges from min to max.
// Please pay attention, by default, the value of min can be inclusive, and the value of max cannot be inclusive.
// E.g. in an interval, min = 2, max =10 is set, which means the interval [2,10).
// This rule ensure that all intervals have the same meaning. If the last interval is +¡Þ,
// it is definitely unreachable. Therefore, we define the right interval as the open interval.
// For a valid interval, the value on the right is greater than the value on the left,
// in other words, max must be greater than min.
// It is strongly recommended that the [Min, Max) of all ResourceModelRanges can make a continuous interval.
type ResourceModelRange struct {
// Name is the name for the resource that you want to categorize.
// +required
Name ResourceName

// Min is the minimum amount of this resource represented by resource name.
// Note: The Min value of first grade(usually 0) always acts as zero.
// E.g. [1,2) equal to [0,2).
// +required
Min resource.Quantity

// Max is the maximum amount of this resource represented by resource name.
// Special Instructions, for the last ResourceModelRange, which no matter what Max value you pass,
// the meaning is infinite. Because for the last item,
// any ResourceModelRange's quota larger than Min will be classified to the last one.
// Of course, the value of the Max field is always greater than the value of the Min field.
// It should be true in any case.
// +required
Max resource.Quantity
}

const (
Expand Down Expand Up @@ -190,6 +335,22 @@ type ResourceSummary struct {
// Total amount of required resources of all Pods that have been scheduled to nodes.
// +optional
Allocated corev1.ResourceList

// AllocatableModelings represents the statistical resource modeling.
// +optional
AllocatableModelings []AllocatableModeling
}

// AllocatableModeling represents the number of nodes in which allocatable resources in a specific resource model grade.
// E.g. AllocatableModeling{Grade: 2, Count: 10} means 10 nodes belong to resource model in grade 2.
type AllocatableModeling struct {
// Grade is the index of ResourceModel.
// +required
Grade uint

// Count is the number of nodes that own the resources delineated by this modeling.
// +required
Count int
}

// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
Expand Down
4 changes: 4 additions & 0 deletions cluster/v1alpha1/events.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,8 @@ const (
EventReasonCreateExecutionSpaceFailed = "CreateExecutionSpaceFailed"
// EventReasonRemoveExecutionSpaceFailed indicates that remove execution space failed.
EventReasonRemoveExecutionSpaceFailed = "RemoveExecutionSpaceFailed"
// EventReasonTaintClusterByConditionFailed indicates that taint cluster by condition
EventReasonTaintClusterByConditionFailed = "TaintClusterByCondition"
// EventReasonRemoveTargetClusterFailed indicates that failed to remove target cluster from binding.
EventReasonRemoveTargetClusterFailed = "RemoveTargetClusterFailed"
)
Loading

0 comments on commit 1b543e6

Please sign in to comment.