Documentation ¶
Overview ¶
Package v1alpha2 is the v1alpha2 version of the API. +k8s:deepcopy-gen=package,register +k8s:openapi-gen=true +groupName=work.karmada.io
Index ¶
- Constants
- Variables
- func Resource(resource string) schema.GroupResource
- type AggregatedStatusItem
- type BindingSnapshot
- type ClusterResourceBinding
- type ClusterResourceBindingList
- type GracefulEvictionTask
- type NodeClaim
- type ObjectReference
- type Option
- type ReplicaRequirements
- type ResourceBinding
- type ResourceBindingList
- type ResourceBindingSpec
- func (s *ResourceBindingSpec) AssignedReplicasForCluster(targetCluster string) int32
- func (s *ResourceBindingSpec) ClusterInGracefulEvictionTasks(name string) bool
- func (in *ResourceBindingSpec) DeepCopy() *ResourceBindingSpec
- func (in *ResourceBindingSpec) DeepCopyInto(out *ResourceBindingSpec)
- func (s *ResourceBindingSpec) GracefulEvictCluster(name string, options *TaskOptions)
- func (s *ResourceBindingSpec) RemoveCluster(name string)
- func (s *ResourceBindingSpec) TargetContains(name string) bool
- type ResourceBindingStatus
- type ResourceHealth
- type TargetCluster
- type TaskOptions
Constants ¶
const ( // ResourceKindResourceBinding is kind name of ResourceBinding. ResourceKindResourceBinding = "ResourceBinding" // ResourceSingularResourceBinding is singular name of ResourceBinding. ResourceSingularResourceBinding = "resourcebinding" // ResourcePluralResourceBinding is plural name of ResourceBinding. ResourcePluralResourceBinding = "resourcebindings" // ResourceNamespaceScopedResourceBinding indicates if ResourceBinding is NamespaceScoped. ResourceNamespaceScopedResourceBinding = true // ResourceKindClusterResourceBinding is kind name of ClusterResourceBinding. ResourceKindClusterResourceBinding = "ClusterResourceBinding" // ResourceSingularClusterResourceBinding is singular name of ClusterResourceBinding. ResourceSingularClusterResourceBinding = "clusterresourcebinding" // ResourcePluralClusterResourceBinding is kind plural of ClusterResourceBinding. ResourcePluralClusterResourceBinding = "clusterresourcebindings" // ResourceNamespaceScopedClusterResourceBinding indicates if ClusterResourceBinding is NamespaceScoped. ResourceNamespaceScopedClusterResourceBinding = false )
const ( // Scheduled represents the condition that the ResourceBinding or ClusterResourceBinding has been scheduled. Scheduled string = "Scheduled" // FullyApplied represents the condition that the resource referencing by ResourceBinding or ClusterResourceBinding // has been applied to all scheduled clusters. FullyApplied string = "FullyApplied" )
Conditions definition
const ( // BindingReasonSuccess reason in Scheduled condition means that binding has been scheduled successfully. BindingReasonSuccess = "Success" // BindingReasonSchedulerError reason in Scheduled condition means that some internal error happens // during scheduling, for example due to api-server connection error. BindingReasonSchedulerError = "SchedulerError" // BindingReasonNoClusterFit reason in Scheduled condition means that scheduling has finished // due to no fit cluster. BindingReasonNoClusterFit = "NoClusterFit" // BindingReasonUnschedulable reason in Scheduled condition means that the scheduler can't schedule // the binding right now, for example due to insufficient resources in the clusters. BindingReasonUnschedulable = "Unschedulable" )
These are reasons for a binding's transition to a Scheduled condition.
const ( // ResourceBindingUIDLabel is the UID of ResourceBinding object. ResourceBindingUIDLabel = "resourcebinding.karmada.io/uid" // ClusterResourceBindingUIDLabel is the uid of ClusterResourceBinding object. ClusterResourceBindingUIDLabel = "clusterresourcebinding.karmada.io/uid" // WorkNamespaceAnnotation is added to objects to specify associated Work's namespace. WorkNamespaceAnnotation = "work.karmada.io/namespace" // WorkNameAnnotation is added to objects to specify associated Work's name. WorkNameAnnotation = "work.karmada.io/name" // WorkUIDLabel is the uid of Work object. WorkUIDLabel = "work.karmada.io/uid" // ResourceBindingReferenceKey is the key of ResourceBinding object. // It is usually a unique hash value of ResourceBinding object's namespace and name, intended to be added to the Work object. // It will be used to retrieve all Works objects that derived from a specific ResourceBinding object. ResourceBindingReferenceKey = "resourcebinding.karmada.io/key" // ClusterResourceBindingReferenceKey is the key of ClusterResourceBinding object. // It is usually a unique hash value of ClusterResourceBinding object's namespace and name, intended to be added to the Work object. // It will be used to retrieve all Works objects that derived by a specific ClusterResourceBinding object. ClusterResourceBindingReferenceKey = "clusterresourcebinding.karmada.io/key" // ResourceBindingNamespaceAnnotationKey is added to object to describe the associated ResourceBinding's namespace. // It is added to: // - Work object: describes the namespace of ResourceBinding which the Work derived from. // - Manifest in Work object: describes the namespace of ResourceBinding which the manifest derived from. ResourceBindingNamespaceAnnotationKey = "resourcebinding.karmada.io/namespace" // ResourceBindingNameAnnotationKey is added to object to describe the associated ResourceBinding's name. // It is added to: // - Work object: describes the name of ResourceBinding which the Work derived from. // - Manifest in Work object: describes the name of ResourceBinding which the manifest derived from. ResourceBindingNameAnnotationKey = "resourcebinding.karmada.io/name" // ClusterResourceBindingAnnotationKey is added to object to describe associated ClusterResourceBinding's name. // It is added to: // - Work object: describes the name of ClusterResourceBinding which the Work derived from. // - Manifest in Work object: describes the name of ClusterResourceBinding which the manifest derived from. ClusterResourceBindingAnnotationKey = "clusterresourcebinding.karmada.io/name" // WorkNamespaceLabel is added to objects to specify associated Work's namespace. WorkNamespaceLabel = "work.karmada.io/namespace" // WorkNameLabel is added to objects to specify associated Work's name. WorkNameLabel = "work.karmada.io/name" )
const ( // ResourceConflictResolutionAnnotation is added to the resource template to specify how to resolve the conflict // in case of resource already existing in member clusters. // The valid value is: // - overwrite: always overwrite the resource if already exist. The resource will be overwritten with the // configuration from control plane. // - abort: do not resolve the conflict and stop propagating to avoid unexpected overwrites (default value) // Note: Propagation of the resource template without this annotation will fail in case of already exists. ResourceConflictResolutionAnnotation = "work.karmada.io/conflict-resolution" // ResourceConflictResolutionOverwrite is a value of ResourceConflictResolutionAnnotation, indicating the overwrite strategy. ResourceConflictResolutionOverwrite = "overwrite" // ResourceConflictResolutionAbort is a value of ResourceConflictResolutionAnnotation, indicating stop propagating. ResourceConflictResolutionAbort = "abort" )
Define resource conflict resolution
const ( // ResourceTemplateUIDAnnotation is the annotation that is added to the manifest in the Work object. // The annotation is used to identify the resource template which the manifest is derived from. // The annotation can also be used to fire events when syncing Work to member clusters. // For more details about UID, please refer to: // https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids ResourceTemplateUIDAnnotation = "resourcetemplate.karmada.io/uid" // ManagedLabels is the annotation that is added to the manifest in the Work object. // It is used to identify the label keys that are present in the resource template. // With this annotation, Karmada is able to accurately synchronize label changes // against resource template and avoid the problem of accidentally retaining // the deleted labels. // E.g. "resourcetemplate.karmada.io/managed-labels: bar,foo". // Note: the keys will be sorted in alphabetical order. ManagedLabels = "resourcetemplate.karmada.io/managed-labels" // ManagedAnnotation is the annotation that is added to the manifest in the Work object. // It is used to identify the annotation keys that are present in the resource template. // With this annotation, Karmada is able to accurately synchronize annotation changes // against resource template and avoid the problem of accidentally retaining // the deleted annotations. // E.g. "resourcetemplate.karmada.io/managed-annotations: bar,foo". // Note: the keys will be sorted in alphabetical order. ManagedAnnotation = "resourcetemplate.karmada.io/managed-annotations" // DeletionProtectionLabelKey If a user assigns the DeletionProtectionLabelKey label to a specific resource, // and the value of this label is DeletionProtectionAlways, then deletion requests // for this resource will be denied. // In the current design, only the Value set to 'Always' will be protected, // Additional options will be added here in the future. DeletionProtectionLabelKey = "resourcetemplate.karmada.io/deletion-protected" DeletionProtectionAlways = "Always" )
Define annotations that are added to the resource template.
const ( // EvictionReasonTaintUntolerated describes the eviction is triggered // because can not tolerate taint or exceed toleration period of time. EvictionReasonTaintUntolerated = "TaintUntolerated" // EvictionReasonApplicationFailure describes the eviction is triggered // because the application fails and reaches the condition of ApplicationFailoverBehavior. EvictionReasonApplicationFailure = "ApplicationFailure" )
Define eviction reasons.
const (
// EvictionProducerTaintManager represents the name of taint manager.
EvictionProducerTaintManager = "TaintManager"
)
Define eviction producers.
const GroupName = "work.karmada.io"
GroupName specifies the group name used to register the objects.
Variables ¶
var ( // localSchemeBuilder and AddToScheme will stay in k8s.io/kubernetes. SchemeBuilder runtime.SchemeBuilder // Depreciated: use Install instead AddToScheme = localSchemeBuilder.AddToScheme Install = localSchemeBuilder.AddToScheme )
var GroupVersion = v1.GroupVersion{Group: GroupName, Version: "v1alpha2"}
GroupVersion specifies the group and the version used to register the objects.
var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1alpha2"}
SchemeGroupVersion is group version used to register these objects Deprecated: use GroupVersion instead.
Functions ¶
func Resource ¶
func Resource(resource string) schema.GroupResource
Resource takes an unqualified resource and returns a Group qualified GroupResource
Types ¶
type AggregatedStatusItem ¶
type AggregatedStatusItem struct { // ClusterName represents the member cluster name which the resource deployed on. // +required ClusterName string `json:"clusterName"` // Status reflects running status of current manifest. // +kubebuilder:pruning:PreserveUnknownFields // +optional Status *runtime.RawExtension `json:"status,omitempty"` // Applied represents if the resource referencing by ResourceBinding or ClusterResourceBinding // is successfully applied on the cluster. // +optional Applied bool `json:"applied,omitempty"` // AppliedMessage is a human readable message indicating details about the applied status. // This is usually holds the error message in case of apply failed. // +optional AppliedMessage string `json:"appliedMessage,omitempty"` // Health represents the healthy state of the current resource. // There maybe different rules for different resources to achieve health status. // +kubebuilder:validation:Enum=Healthy;Unhealthy;Unknown // +optional Health ResourceHealth `json:"health,omitempty"` }
AggregatedStatusItem represents status of the resource running in a member cluster.
func (*AggregatedStatusItem) DeepCopy ¶
func (in *AggregatedStatusItem) DeepCopy() *AggregatedStatusItem
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AggregatedStatusItem.
func (*AggregatedStatusItem) DeepCopyInto ¶
func (in *AggregatedStatusItem) DeepCopyInto(out *AggregatedStatusItem)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type BindingSnapshot ¶ added in v1.0.0
type BindingSnapshot struct { // Namespace represents the namespace of the Binding. // It is required for ResourceBinding. // If Namespace is not specified, means the referencing is ClusterResourceBinding. // +optional Namespace string `json:"namespace,omitempty"` // Name represents the name of the Binding. // +required Name string `json:"name"` // Clusters represents the scheduled result. // +optional Clusters []TargetCluster `json:"clusters,omitempty"` }
BindingSnapshot is a snapshot of a ResourceBinding or ClusterResourceBinding.
func (*BindingSnapshot) DeepCopy ¶ added in v1.1.0
func (in *BindingSnapshot) DeepCopy() *BindingSnapshot
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BindingSnapshot.
func (*BindingSnapshot) DeepCopyInto ¶ added in v1.1.0
func (in *BindingSnapshot) DeepCopyInto(out *BindingSnapshot)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ClusterResourceBinding ¶
type ClusterResourceBinding struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` // Spec represents the desired behavior. Spec ResourceBindingSpec `json:"spec"` // Status represents the most recently observed status of the ResourceBinding. // +optional Status ResourceBindingStatus `json:"status,omitempty"` }
ClusterResourceBinding represents a binding of a kubernetes resource with a ClusterPropagationPolicy.
func (*ClusterResourceBinding) DeepCopy ¶
func (in *ClusterResourceBinding) DeepCopy() *ClusterResourceBinding
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterResourceBinding.
func (*ClusterResourceBinding) DeepCopyInto ¶
func (in *ClusterResourceBinding) DeepCopyInto(out *ClusterResourceBinding)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*ClusterResourceBinding) DeepCopyObject ¶
func (in *ClusterResourceBinding) DeepCopyObject() runtime.Object
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
func (*ClusterResourceBinding) Hub ¶
func (*ClusterResourceBinding) Hub()
Hub marks this type as a conversion hub.
type ClusterResourceBindingList ¶
type ClusterResourceBindingList struct { metav1.TypeMeta `json:",inline"` metav1.ListMeta `json:"metadata,omitempty"` // Items is the list of ClusterResourceBinding. Items []ClusterResourceBinding `json:"items"` }
ClusterResourceBindingList contains a list of ClusterResourceBinding.
func (*ClusterResourceBindingList) DeepCopy ¶
func (in *ClusterResourceBindingList) DeepCopy() *ClusterResourceBindingList
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterResourceBindingList.
func (*ClusterResourceBindingList) DeepCopyInto ¶
func (in *ClusterResourceBindingList) DeepCopyInto(out *ClusterResourceBindingList)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*ClusterResourceBindingList) DeepCopyObject ¶
func (in *ClusterResourceBindingList) DeepCopyObject() runtime.Object
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
type GracefulEvictionTask ¶ added in v1.3.0
type GracefulEvictionTask struct { // FromCluster which cluster the eviction perform from. // +required FromCluster string `json:"fromCluster"` // Replicas indicates the number of replicas should be evicted. // Should be ignored for resource type that doesn't have replica. // +optional Replicas *int32 `json:"replicas,omitempty"` // Reason contains a programmatic identifier indicating the reason for the eviction. // Producers may define expected values and meanings for this field, // and whether the values are considered a guaranteed API. // The value should be a CamelCase string. // This field may not be empty. // +required // +kubebuilder:validation:MaxLength=32 // +kubebuilder:validation:MinLength=1 // +kubebuilder:validation:Pattern=`^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$` Reason string `json:"reason"` // Message is a human-readable message indicating details about the eviction. // This may be an empty string. // +optional // +kubebuilder:validation:MaxLength=1024 Message string `json:"message,omitempty"` // Producer indicates the controller who triggered the eviction. // +required Producer string `json:"producer"` // GracePeriodSeconds is the maximum waiting duration in seconds before the item // should be deleted. If the application on the new cluster cannot reach a Healthy state, // Karmada will delete the item after GracePeriodSeconds is reached. // Value must be positive integer. // It can not co-exist with SuppressDeletion. // +optional GracePeriodSeconds *int32 `json:"gracePeriodSeconds,omitempty"` // SuppressDeletion represents the grace period will be persistent until // the tools or human intervention stops it. // It can not co-exist with GracePeriodSeconds. // +optional SuppressDeletion *bool `json:"suppressDeletion,omitempty"` // CreationTimestamp is a timestamp representing the server time when this object was // created. // Clients should not set this value to avoid the time inconsistency issue. // It is represented in RFC3339 form(like '2021-04-25T10:02:10Z') and is in UTC. // // Populated by the system. Read-only. // +optional CreationTimestamp metav1.Time `json:"creationTimestamp,omitempty"` }
GracefulEvictionTask represents a graceful eviction task.
func (*GracefulEvictionTask) DeepCopy ¶ added in v1.3.0
func (in *GracefulEvictionTask) DeepCopy() *GracefulEvictionTask
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GracefulEvictionTask.
func (*GracefulEvictionTask) DeepCopyInto ¶ added in v1.3.0
func (in *GracefulEvictionTask) DeepCopyInto(out *GracefulEvictionTask)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type NodeClaim ¶
type NodeClaim struct { // A node selector represents the union of the results of one or more label queries over a set of // nodes; that is, it represents the OR of the selectors represented by the node selector terms. // Note that only PodSpec.Affinity.NodeAffinity.RequiredDuringSchedulingIgnoredDuringExecution // is included here because it has a hard limit on pod scheduling. // +optional HardNodeAffinity *corev1.NodeSelector `json:"hardNodeAffinity,omitempty"` // NodeSelector is a selector which must be true for the pod to fit on a node. // Selector which must match a node's labels for the pod to be scheduled on that node. // +optional NodeSelector map[string]string `json:"nodeSelector,omitempty"` // If specified, the pod's tolerations. // +optional Tolerations []corev1.Toleration `json:"tolerations,omitempty"` }
NodeClaim represents the node claim HardNodeAffinity, NodeSelector and Tolerations required by each replica.
func (*NodeClaim) DeepCopy ¶
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NodeClaim.
func (*NodeClaim) DeepCopyInto ¶
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ObjectReference ¶
type ObjectReference struct { // APIVersion represents the API version of the referent. APIVersion string `json:"apiVersion"` // Kind represents the Kind of the referent. Kind string `json:"kind"` // Namespace represents the namespace for the referent. // For non-namespace scoped resources(e.g. 'ClusterRole'),do not need specify Namespace, // and for namespace scoped resources, Namespace is required. // If Namespace is not specified, means the resource is non-namespace scoped. // +optional Namespace string `json:"namespace,omitempty"` // Name represents the name of the referent. Name string `json:"name"` // UID of the referent. // +optional UID types.UID `json:"uid,omitempty"` // ResourceVersion represents the internal version of the referenced object, that can be used by clients to // determine when object has changed. // +optional ResourceVersion string `json:"resourceVersion,omitempty"` }
ObjectReference contains enough information to locate the referenced object inside current cluster.
func (*ObjectReference) DeepCopy ¶
func (in *ObjectReference) DeepCopy() *ObjectReference
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ObjectReference.
func (*ObjectReference) DeepCopyInto ¶
func (in *ObjectReference) DeepCopyInto(out *ObjectReference)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type Option ¶ added in v1.6.0
type Option func(*TaskOptions)
Option configures a TaskOptions
func WithGracePeriodSeconds ¶ added in v1.6.0
WithGracePeriodSeconds sets the gracePeriodSeconds for TaskOptions
func WithMessage ¶ added in v1.6.0
WithMessage sets the message for TaskOptions
func WithProducer ¶ added in v1.6.0
WithProducer sets the producer for TaskOptions
func WithReason ¶ added in v1.6.0
WithReason sets the reason for TaskOptions
func WithSuppressDeletion ¶ added in v1.6.0
WithSuppressDeletion sets the suppressDeletion for TaskOptions
type ReplicaRequirements ¶
type ReplicaRequirements struct { // NodeClaim represents the node claim HardNodeAffinity, NodeSelector and Tolerations required by each replica. // +optional NodeClaim *NodeClaim `json:"nodeClaim,omitempty"` // ResourceRequest represents the resources required by each replica. // +optional ResourceRequest corev1.ResourceList `json:"resourceRequest,omitempty"` }
ReplicaRequirements represents the requirements required by each replica.
func (*ReplicaRequirements) DeepCopy ¶
func (in *ReplicaRequirements) DeepCopy() *ReplicaRequirements
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ReplicaRequirements.
func (*ReplicaRequirements) DeepCopyInto ¶
func (in *ReplicaRequirements) DeepCopyInto(out *ReplicaRequirements)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ResourceBinding ¶
type ResourceBinding struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` // Spec represents the desired behavior. Spec ResourceBindingSpec `json:"spec"` // Status represents the most recently observed status of the ResourceBinding. // +optional Status ResourceBindingStatus `json:"status,omitempty"` }
ResourceBinding represents a binding of a kubernetes resource with a propagation policy.
func (*ResourceBinding) DeepCopy ¶
func (in *ResourceBinding) DeepCopy() *ResourceBinding
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ResourceBinding.
func (*ResourceBinding) DeepCopyInto ¶
func (in *ResourceBinding) DeepCopyInto(out *ResourceBinding)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*ResourceBinding) DeepCopyObject ¶
func (in *ResourceBinding) DeepCopyObject() runtime.Object
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
func (*ResourceBinding) Hub ¶
func (*ResourceBinding) Hub()
Hub marks this type as a conversion hub.
type ResourceBindingList ¶
type ResourceBindingList struct { metav1.TypeMeta `json:",inline"` metav1.ListMeta `json:"metadata,omitempty"` // Items is the list of ResourceBinding. Items []ResourceBinding `json:"items"` }
ResourceBindingList contains a list of ResourceBinding.
func (*ResourceBindingList) DeepCopy ¶
func (in *ResourceBindingList) DeepCopy() *ResourceBindingList
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ResourceBindingList.
func (*ResourceBindingList) DeepCopyInto ¶
func (in *ResourceBindingList) DeepCopyInto(out *ResourceBindingList)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*ResourceBindingList) DeepCopyObject ¶
func (in *ResourceBindingList) DeepCopyObject() runtime.Object
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
type ResourceBindingSpec ¶
type ResourceBindingSpec struct { // Resource represents the Kubernetes resource to be propagated. Resource ObjectReference `json:"resource"` // PropagateDeps tells if relevant resources should be propagated automatically. // It is inherited from PropagationPolicy or ClusterPropagationPolicy. // default false. // +optional PropagateDeps bool `json:"propagateDeps,omitempty"` // ReplicaRequirements represents the requirements required by each replica. // +optional ReplicaRequirements *ReplicaRequirements `json:"replicaRequirements,omitempty"` // Replicas represents the replica number of the referencing resource. // +optional Replicas int32 `json:"replicas,omitempty"` // Clusters represents target member clusters where the resource to be deployed. // +optional Clusters []TargetCluster `json:"clusters,omitempty"` // Placement represents the rule for select clusters to propagate resources. // +optional Placement *policyv1alpha1.Placement `json:"placement,omitempty"` // GracefulEvictionTasks holds the eviction tasks that are expected to perform // the eviction in a graceful way. // The intended workflow is: // 1. Once the controller(such as 'taint-manager') decided to evict the resource that // is referenced by current ResourceBinding or ClusterResourceBinding from a target // cluster, it removes(or scale down the replicas) the target from Clusters(.spec.Clusters) // and builds a graceful eviction task. // 2. The scheduler may perform a re-scheduler and probably select a substitute cluster // to take over the evicting workload(resource). // 3. The graceful eviction controller takes care of the graceful eviction tasks and // performs the final removal after the workload(resource) is available on the substitute // cluster or exceed the grace termination period(defaults to 10 minutes). // // +optional GracefulEvictionTasks []GracefulEvictionTask `json:"gracefulEvictionTasks,omitempty"` // RequiredBy represents the list of Bindings that depend on the referencing resource. // +optional RequiredBy []BindingSnapshot `json:"requiredBy,omitempty"` // SchedulerName represents which scheduler to proceed the scheduling. // It inherits directly from the associated PropagationPolicy(or ClusterPropagationPolicy). // +optional SchedulerName string `json:"schedulerName,omitempty"` // Failover indicates how Karmada migrates applications in case of failures. // It inherits directly from the associated PropagationPolicy(or ClusterPropagationPolicy). // +optional Failover *policyv1alpha1.FailoverBehavior `json:"failover,omitempty"` // ConflictResolution declares how potential conflict should be handled when // a resource that is being propagated already exists in the target cluster. // // It defaults to "Abort" which means stop propagating to avoid unexpected // overwrites. The "Overwrite" might be useful when migrating legacy cluster // resources to Karmada, in which case conflict is predictable and can be // instructed to Karmada take over the resource by overwriting. // // +kubebuilder:default="Abort" // +kubebuilder:validation:Enum=Abort;Overwrite // +optional ConflictResolution policyv1alpha1.ConflictResolution `json:"conflictResolution,omitempty"` }
ResourceBindingSpec represents the expectation of ResourceBinding.
func (*ResourceBindingSpec) AssignedReplicasForCluster ¶ added in v1.2.0
func (s *ResourceBindingSpec) AssignedReplicasForCluster(targetCluster string) int32
AssignedReplicasForCluster returns assigned replicas for specific cluster.
func (*ResourceBindingSpec) ClusterInGracefulEvictionTasks ¶ added in v1.6.0
func (s *ResourceBindingSpec) ClusterInGracefulEvictionTasks(name string) bool
ClusterInGracefulEvictionTasks checks if the target cluster is in the GracefulEvictionTasks which means it is in the process of eviction.
func (*ResourceBindingSpec) DeepCopy ¶
func (in *ResourceBindingSpec) DeepCopy() *ResourceBindingSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ResourceBindingSpec.
func (*ResourceBindingSpec) DeepCopyInto ¶
func (in *ResourceBindingSpec) DeepCopyInto(out *ResourceBindingSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*ResourceBindingSpec) GracefulEvictCluster ¶ added in v1.3.0
func (s *ResourceBindingSpec) GracefulEvictCluster(name string, options *TaskOptions)
GracefulEvictCluster removes specific cluster from the target list in a graceful way by building a graceful eviction task. This function no-opts if the cluster does not exist.
func (*ResourceBindingSpec) RemoveCluster ¶ added in v1.3.0
func (s *ResourceBindingSpec) RemoveCluster(name string)
RemoveCluster removes specific cluster from the target list. This function no-opts if cluster not exist.
func (*ResourceBindingSpec) TargetContains ¶ added in v1.2.0
func (s *ResourceBindingSpec) TargetContains(name string) bool
TargetContains checks if specific cluster present on the target list.
type ResourceBindingStatus ¶
type ResourceBindingStatus struct { // SchedulerObservedGeneration is the generation(.metadata.generation) observed by the scheduler. // If SchedulerObservedGeneration is less than the generation in metadata means the scheduler hasn't confirmed // the scheduling result or hasn't done the schedule yet. // +optional SchedulerObservedGeneration int64 `json:"schedulerObservedGeneration,omitempty"` // SchedulerObservedAffinityName is the name of affinity term that is // the basis of current scheduling. // +optional SchedulerObservedAffinityName string `json:"schedulerObservingAffinityName,omitempty"` // Conditions contain the different condition statuses. // +optional Conditions []metav1.Condition `json:"conditions,omitempty"` // AggregatedStatus represents status list of the resource running in each member cluster. // +optional AggregatedStatus []AggregatedStatusItem `json:"aggregatedStatus,omitempty"` }
ResourceBindingStatus represents the overall status of the strategy as well as the referenced resources.
func (*ResourceBindingStatus) DeepCopy ¶
func (in *ResourceBindingStatus) DeepCopy() *ResourceBindingStatus
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ResourceBindingStatus.
func (*ResourceBindingStatus) DeepCopyInto ¶
func (in *ResourceBindingStatus) DeepCopyInto(out *ResourceBindingStatus)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ResourceHealth ¶ added in v1.3.0
type ResourceHealth string
ResourceHealth represents that the health status of the reference resource.
const ( // ResourceHealthy represents that the health status of the current resource // that applied on the managed cluster is healthy. ResourceHealthy ResourceHealth = "Healthy" // ResourceUnhealthy represents that the health status of the current resource // that applied on the managed cluster is unhealthy. ResourceUnhealthy ResourceHealth = "Unhealthy" // ResourceUnknown represents that the health status of the current resource // that applied on the managed cluster is unknown. ResourceUnknown ResourceHealth = "Unknown" )
type TargetCluster ¶
type TargetCluster struct { // Name of target cluster. Name string `json:"name"` // Replicas in target cluster // +optional Replicas int32 `json:"replicas,omitempty"` }
TargetCluster represents the identifier of a member cluster.
func (*TargetCluster) DeepCopy ¶
func (in *TargetCluster) DeepCopy() *TargetCluster
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TargetCluster.
func (*TargetCluster) DeepCopyInto ¶
func (in *TargetCluster) DeepCopyInto(out *TargetCluster)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type TaskOptions ¶ added in v1.6.0
type TaskOptions struct {
// contains filtered or unexported fields
}
TaskOptions represents options for GracefulEvictionTasks.
func NewTaskOptions ¶ added in v1.6.0
func NewTaskOptions(opts ...Option) *TaskOptions
NewTaskOptions builds a TaskOptions
func (*TaskOptions) DeepCopy ¶ added in v1.6.0
func (in *TaskOptions) DeepCopy() *TaskOptions
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TaskOptions.
func (*TaskOptions) DeepCopyInto ¶ added in v1.6.0
func (in *TaskOptions) DeepCopyInto(out *TaskOptions)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.