karmada/charts/karmada/_crds/bases/policy/policy.karmada.io_clusterpr...

959 lines
56 KiB
YAML

---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.16.5
name: clusterpropagationpolicies.policy.karmada.io
spec:
group: policy.karmada.io
names:
categories:
- karmada-io
kind: ClusterPropagationPolicy
listKind: ClusterPropagationPolicyList
plural: clusterpropagationpolicies
shortNames:
- cpp
singular: clusterpropagationpolicy
scope: Cluster
versions:
- additionalPrinterColumns:
- jsonPath: .spec.conflictResolution
name: CONFLICT-RESOLUTION
type: string
- jsonPath: .spec.priority
name: PRIORITY
type: string
- jsonPath: .metadata.creationTimestamp
name: AGE
type: date
name: v1alpha1
schema:
openAPIV3Schema:
description: |-
ClusterPropagationPolicy represents the cluster-wide policy that propagates a group of resources to one or more clusters.
Different with PropagationPolicy that could only propagate resources in its own namespace, ClusterPropagationPolicy
is able to propagate cluster level resources and resources in any namespace other than system reserved ones.
System reserved namespaces are: karmada-system, karmada-cluster, karmada-es-*.
properties:
apiVersion:
description: |-
APIVersion defines the versioned schema of this representation of an object.
Servers should convert recognized schemas to the latest internal value, and
may reject unrecognized values.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
type: string
kind:
description: |-
Kind is a string value representing the REST resource this object represents.
Servers may infer this from the endpoint the client submits requests to.
Cannot be updated.
In CamelCase.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
type: string
metadata:
type: object
spec:
description: Spec represents the desired behavior of ClusterPropagationPolicy.
properties:
activationPreference:
description: |-
ActivationPreference indicates how the referencing resource template will
be propagated, in case of policy changes.
If empty, the resource template will respond to policy changes
immediately, in other words, any policy changes will drive the resource
template to be propagated immediately as per the current propagation rules.
If the value is 'Lazy' means the policy changes will not take effect for now
but defer to the resource template changes, in other words, the resource
template will not be propagated as per the current propagation rules until
there is an update on it.
This is an experimental feature that might help in a scenario where a policy
manages huge amount of resource templates, changes to a policy typically
affect numerous applications simultaneously. A minor misconfiguration
could lead to widespread failures. With this feature, the change can be
gradually rolled out through iterative modifications of resource templates.
enum:
- Lazy
type: string
association:
description: |-
Association tells if relevant resources should be selected automatically.
e.g. a ConfigMap referred by a Deployment.
default false.
Deprecated: in favor of PropagateDeps.
type: boolean
conflictResolution:
default: Abort
description: |-
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.
enum:
- Abort
- Overwrite
type: string
dependentOverrides:
description: |-
DependentOverrides represents the list of overrides(OverridePolicy)
which must present before the current PropagationPolicy takes effect.
It used to explicitly specify overrides which current PropagationPolicy rely on.
A typical scenario is the users create OverridePolicy(ies) and resources at the same time,
they want to ensure the new-created policies would be adopted.
Note: For the overrides, OverridePolicy(ies) in current namespace and ClusterOverridePolicy(ies),
which not present in this list will still be applied if they matches the resources.
items:
type: string
type: array
failover:
description: |-
Failover indicates how Karmada migrates applications in case of failures.
If this value is nil, failover is disabled.
properties:
application:
description: |-
Application indicates failover behaviors in case of application failure.
If this value is nil, failover is disabled.
If set, the PropagateDeps should be true so that the dependencies could
be migrated along with the application.
properties:
decisionConditions:
description: |-
DecisionConditions indicates the decision conditions of performing the failover process.
Only when all conditions are met can the failover process be performed.
Currently, DecisionConditions includes several conditions:
- TolerationSeconds (optional)
properties:
tolerationSeconds:
default: 300
description: |-
TolerationSeconds represents the period of time Karmada should wait
after reaching the desired state before performing failover process.
If not specified, Karmada will immediately perform failover process.
Defaults to 300s.
format: int32
type: integer
type: object
gracePeriodSeconds:
description: |-
GracePeriodSeconds is the maximum waiting duration in seconds before
application on the migrated cluster should be deleted.
Required only when PurgeMode is "Graciously" and defaults to 600s.
If the application on the new cluster cannot reach a Healthy state,
Karmada will delete the application after GracePeriodSeconds is reached.
Value must be positive integer.
format: int32
type: integer
purgeMode:
default: Graciously
description: |-
PurgeMode represents how to deal with the legacy applications on the
cluster from which the application is migrated.
Valid options are "Immediately", "Graciously" and "Never".
Defaults to "Graciously".
enum:
- Immediately
- Graciously
- Never
type: string
statePreservation:
description: |-
StatePreservation defines the policy for preserving and restoring state data
during failover events for stateful applications.
When an application fails over from one cluster to another, this policy enables
the extraction of critical data from the original resource configuration.
Upon successful migration, the extracted data is then re-injected into the new
resource, ensuring that the application can resume operation with its previous
state intact.
This is particularly useful for stateful applications where maintaining data
consistency across failover events is crucial.
If not specified, means no state data will be preserved.
Note: This requires the StatefulFailoverInjection feature gate to be enabled,
which is alpha.
properties:
rules:
description: |-
Rules contains a list of StatePreservationRule configurations.
Each rule specifies a JSONPath expression targeting specific pieces of
state data to be preserved during failover events. An AliasLabelName is associated
with each rule, serving as a label key when the preserved data is passed
to the new cluster.
items:
description: |-
StatePreservationRule defines a single rule for state preservation.
It includes a JSONPath expression and an alias name that will be used
as a label key when passing state information to the new cluster.
properties:
aliasLabelName:
description: |-
AliasLabelName is the name that will be used as a label key when the preserved
data is passed to the new cluster. This facilitates the injection of the
preserved state back into the application resources during recovery.
type: string
jsonPath:
description: |-
JSONPath is the JSONPath template used to identify the state data
to be preserved from the original resource configuration.
The JSONPath syntax follows the Kubernetes specification:
https://kubernetes.io/docs/reference/kubectl/jsonpath/
Note: The JSONPath expression will start searching from the "status" field of
the API resource object by default. For example, to extract the "availableReplicas"
from a Deployment, the JSONPath expression should be "{.availableReplicas}", not
"{.status.availableReplicas}".
type: string
required:
- aliasLabelName
- jsonPath
type: object
type: array
required:
- rules
type: object
required:
- decisionConditions
type: object
type: object
placement:
description: Placement represents the rule for select clusters to
propagate resources.
properties:
clusterAffinities:
description: |-
ClusterAffinities represents scheduling restrictions to multiple cluster
groups that indicated by ClusterAffinityTerm.
The scheduler will evaluate these groups one by one in the order they
appear in the spec, the group that does not satisfy scheduling restrictions
will be ignored which means all clusters in this group will not be selected
unless it also belongs to the next group(a cluster could belong to multiple
groups).
If none of the groups satisfy the scheduling restrictions, then scheduling
fails, which means no cluster will be selected.
Note:
1. ClusterAffinities can not co-exist with ClusterAffinity.
2. If both ClusterAffinity and ClusterAffinities are not set, any cluster
can be scheduling candidates.
Potential use case 1:
The private clusters in the local data center could be the main group, and
the managed clusters provided by cluster providers could be the secondary
group. So that the Karmada scheduler would prefer to schedule workloads
to the main group and the second group will only be considered in case of
the main group does not satisfy restrictions(like, lack of resources).
Potential use case 2:
For the disaster recovery scenario, the clusters could be organized to
primary and backup groups, the workloads would be scheduled to primary
clusters firstly, and when primary cluster fails(like data center power off),
Karmada scheduler could migrate workloads to the backup clusters.
items:
description: ClusterAffinityTerm selects a set of cluster.
properties:
affinityName:
description: AffinityName is the name of the cluster group.
maxLength: 32
minLength: 1
type: string
clusterNames:
description: ClusterNames is the list of clusters to be
selected.
items:
type: string
type: array
exclude:
description: ExcludedClusters is the list of clusters to
be ignored.
items:
type: string
type: array
fieldSelector:
description: |-
FieldSelector is a filter to select member clusters by fields.
The key(field) of the match expression should be 'provider', 'region', or 'zone',
and the operator of the match expression should be 'In' or 'NotIn'.
If non-nil and non-empty, only the clusters match this filter will be selected.
properties:
matchExpressions:
description: A list of field selector requirements.
items:
description: |-
A node selector requirement is a selector that contains values, a key, and an operator
that relates the key and values.
properties:
key:
description: The label key that the selector applies
to.
type: string
operator:
description: |-
Represents a key's relationship to a set of values.
Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.
type: string
values:
description: |-
An array of string values. If the operator is In or NotIn,
the values array must be non-empty. If the operator is Exists or DoesNotExist,
the values array must be empty. If the operator is Gt or Lt, the values
array must have a single element, which will be interpreted as an integer.
This array is replaced during a strategic merge patch.
items:
type: string
type: array
x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
type: object
labelSelector:
description: |-
LabelSelector is a filter to select member clusters by labels.
If non-nil and non-empty, only the clusters match this filter will be selected.
properties:
matchExpressions:
description: matchExpressions is a list of label selector
requirements. The requirements are ANDed.
items:
description: |-
A label selector requirement is a selector that contains values, a key, and an operator that
relates the key and values.
properties:
key:
description: key is the label key that the selector
applies to.
type: string
operator:
description: |-
operator represents a key's relationship to a set of values.
Valid operators are In, NotIn, Exists and DoesNotExist.
type: string
values:
description: |-
values is an array of string values. If the operator is In or NotIn,
the values array must be non-empty. If the operator is Exists or DoesNotExist,
the values array must be empty. This array is replaced during a strategic
merge patch.
items:
type: string
type: array
x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
x-kubernetes-list-type: atomic
matchLabels:
additionalProperties:
type: string
description: |-
matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
map is equivalent to an element of matchExpressions, whose key field is "key", the
operator is "In", and the values array contains only "value". The requirements are ANDed.
type: object
type: object
x-kubernetes-map-type: atomic
required:
- affinityName
type: object
type: array
clusterAffinity:
description: |-
ClusterAffinity represents scheduling restrictions to a certain set of clusters.
Note:
1. ClusterAffinity can not co-exist with ClusterAffinities.
2. If both ClusterAffinity and ClusterAffinities are not set, any cluster
can be scheduling candidates.
properties:
clusterNames:
description: ClusterNames is the list of clusters to be selected.
items:
type: string
type: array
exclude:
description: ExcludedClusters is the list of clusters to be
ignored.
items:
type: string
type: array
fieldSelector:
description: |-
FieldSelector is a filter to select member clusters by fields.
The key(field) of the match expression should be 'provider', 'region', or 'zone',
and the operator of the match expression should be 'In' or 'NotIn'.
If non-nil and non-empty, only the clusters match this filter will be selected.
properties:
matchExpressions:
description: A list of field selector requirements.
items:
description: |-
A node selector requirement is a selector that contains values, a key, and an operator
that relates the key and values.
properties:
key:
description: The label key that the selector applies
to.
type: string
operator:
description: |-
Represents a key's relationship to a set of values.
Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.
type: string
values:
description: |-
An array of string values. If the operator is In or NotIn,
the values array must be non-empty. If the operator is Exists or DoesNotExist,
the values array must be empty. If the operator is Gt or Lt, the values
array must have a single element, which will be interpreted as an integer.
This array is replaced during a strategic merge patch.
items:
type: string
type: array
x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
type: object
labelSelector:
description: |-
LabelSelector is a filter to select member clusters by labels.
If non-nil and non-empty, only the clusters match this filter will be selected.
properties:
matchExpressions:
description: matchExpressions is a list of label selector
requirements. The requirements are ANDed.
items:
description: |-
A label selector requirement is a selector that contains values, a key, and an operator that
relates the key and values.
properties:
key:
description: key is the label key that the selector
applies to.
type: string
operator:
description: |-
operator represents a key's relationship to a set of values.
Valid operators are In, NotIn, Exists and DoesNotExist.
type: string
values:
description: |-
values is an array of string values. If the operator is In or NotIn,
the values array must be non-empty. If the operator is Exists or DoesNotExist,
the values array must be empty. This array is replaced during a strategic
merge patch.
items:
type: string
type: array
x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
x-kubernetes-list-type: atomic
matchLabels:
additionalProperties:
type: string
description: |-
matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
map is equivalent to an element of matchExpressions, whose key field is "key", the
operator is "In", and the values array contains only "value". The requirements are ANDed.
type: object
type: object
x-kubernetes-map-type: atomic
type: object
clusterTolerations:
description: ClusterTolerations represents the tolerations.
items:
description: |-
The pod this Toleration is attached to tolerates any taint that matches
the triple <key,value,effect> using the matching operator <operator>.
properties:
effect:
description: |-
Effect indicates the taint effect to match. Empty means match all taint effects.
When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute.
type: string
key:
description: |-
Key is the taint key that the toleration applies to. Empty means match all taint keys.
If the key is empty, operator must be Exists; this combination means to match all values and all keys.
type: string
operator:
description: |-
Operator represents a key's relationship to the value.
Valid operators are Exists and Equal. Defaults to Equal.
Exists is equivalent to wildcard for value, so that a pod can
tolerate all taints of a particular category.
type: string
tolerationSeconds:
description: |-
TolerationSeconds represents the period of time the toleration (which must be
of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default,
it is not set, which means tolerate the taint forever (do not evict). Zero and
negative values will be treated as 0 (evict immediately) by the system.
format: int64
type: integer
value:
description: |-
Value is the taint value the toleration matches to.
If the operator is Exists, the value should be empty, otherwise just a regular string.
type: string
type: object
type: array
replicaScheduling:
description: |-
ReplicaScheduling represents the scheduling policy on dealing with the number of replicas
when propagating resources that have replicas in spec (e.g. deployments, statefulsets) to member clusters.
properties:
replicaDivisionPreference:
description: |-
ReplicaDivisionPreference determines how the replicas is divided
when ReplicaSchedulingType is "Divided". Valid options are Aggregated and Weighted.
"Aggregated" divides replicas into clusters as few as possible,
while respecting clusters' resource availabilities during the division.
"Weighted" divides replicas by weight according to WeightPreference.
enum:
- Aggregated
- Weighted
type: string
replicaSchedulingType:
default: Divided
description: |-
ReplicaSchedulingType determines how the replicas is scheduled when karmada propagating
a resource. Valid options are Duplicated and Divided.
"Duplicated" duplicates the same replicas to each candidate member cluster from resource.
"Divided" divides replicas into parts according to number of valid candidate member
clusters, and exact replicas for each cluster are determined by ReplicaDivisionPreference.
enum:
- Duplicated
- Divided
type: string
weightPreference:
description: |-
WeightPreference describes weight for each cluster or for each group of cluster
If ReplicaDivisionPreference is set to "Weighted", and WeightPreference is not set, scheduler will weight all clusters the same.
properties:
dynamicWeight:
description: |-
DynamicWeight specifies the factor to generates dynamic weight list.
If specified, StaticWeightList will be ignored.
enum:
- AvailableReplicas
type: string
staticWeightList:
description: StaticWeightList defines the static cluster
weight.
items:
description: StaticClusterWeight defines the static
cluster weight.
properties:
targetCluster:
description: TargetCluster describes the filter
to select clusters.
properties:
clusterNames:
description: ClusterNames is the list of clusters
to be selected.
items:
type: string
type: array
exclude:
description: ExcludedClusters is the list of
clusters to be ignored.
items:
type: string
type: array
fieldSelector:
description: |-
FieldSelector is a filter to select member clusters by fields.
The key(field) of the match expression should be 'provider', 'region', or 'zone',
and the operator of the match expression should be 'In' or 'NotIn'.
If non-nil and non-empty, only the clusters match this filter will be selected.
properties:
matchExpressions:
description: A list of field selector requirements.
items:
description: |-
A node selector requirement is a selector that contains values, a key, and an operator
that relates the key and values.
properties:
key:
description: The label key that the
selector applies to.
type: string
operator:
description: |-
Represents a key's relationship to a set of values.
Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.
type: string
values:
description: |-
An array of string values. If the operator is In or NotIn,
the values array must be non-empty. If the operator is Exists or DoesNotExist,
the values array must be empty. If the operator is Gt or Lt, the values
array must have a single element, which will be interpreted as an integer.
This array is replaced during a strategic merge patch.
items:
type: string
type: array
x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
type: object
labelSelector:
description: |-
LabelSelector is a filter to select member clusters by labels.
If non-nil and non-empty, only the clusters match this filter will be selected.
properties:
matchExpressions:
description: matchExpressions is a list
of label selector requirements. The requirements
are ANDed.
items:
description: |-
A label selector requirement is a selector that contains values, a key, and an operator that
relates the key and values.
properties:
key:
description: key is the label key
that the selector applies to.
type: string
operator:
description: |-
operator represents a key's relationship to a set of values.
Valid operators are In, NotIn, Exists and DoesNotExist.
type: string
values:
description: |-
values is an array of string values. If the operator is In or NotIn,
the values array must be non-empty. If the operator is Exists or DoesNotExist,
the values array must be empty. This array is replaced during a strategic
merge patch.
items:
type: string
type: array
x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
x-kubernetes-list-type: atomic
matchLabels:
additionalProperties:
type: string
description: |-
matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
map is equivalent to an element of matchExpressions, whose key field is "key", the
operator is "In", and the values array contains only "value". The requirements are ANDed.
type: object
type: object
x-kubernetes-map-type: atomic
type: object
weight:
description: Weight expressing the preference to
the cluster(s) specified by 'TargetCluster'.
format: int64
minimum: 1
type: integer
required:
- targetCluster
- weight
type: object
type: array
type: object
type: object
spreadConstraints:
description: SpreadConstraints represents a list of the scheduling
constraints.
items:
description: SpreadConstraint represents the spread constraints
on resources.
properties:
maxGroups:
description: MaxGroups restricts the maximum number of cluster
groups to be selected.
type: integer
minGroups:
description: |-
MinGroups restricts the minimum number of cluster groups to be selected.
Defaults to 1.
type: integer
spreadByField:
description: |-
SpreadByField represents the fields on Karmada cluster API used for
dynamically grouping member clusters into different groups.
Resources will be spread among different cluster groups.
Available fields for spreading are: cluster, region, zone, and provider.
SpreadByField should not co-exist with SpreadByLabel.
If both SpreadByField and SpreadByLabel are empty, SpreadByField will be set to "cluster" by system.
enum:
- cluster
- region
- zone
- provider
type: string
spreadByLabel:
description: |-
SpreadByLabel represents the label key used for
grouping member clusters into different groups.
Resources will be spread among different cluster groups.
SpreadByLabel should not co-exist with SpreadByField.
type: string
type: object
type: array
type: object
preemption:
default: Never
description: |-
Preemption declares the behaviors for preempting.
Valid options are "Always" and "Never".
enum:
- Always
- Never
type: string
preserveResourcesOnDeletion:
description: |-
PreserveResourcesOnDeletion controls whether resources should be preserved on the
member clusters when the resource template is deleted.
If set to true, resources will be preserved on the member clusters.
Default is false, which means resources will be deleted along with the resource template.
This setting is particularly useful during workload migration scenarios to ensure
that rollback can occur quickly without affecting the workloads running on the
member clusters.
Additionally, this setting applies uniformly across all member clusters and will not
selectively control preservation on only some clusters.
Note: This setting does not apply to the deletion of the policy itself.
When the policy is deleted, the resource templates and their corresponding
propagated resources in member clusters will remain unchanged unless explicitly deleted.
type: boolean
priority:
default: 0
description: |-
Priority indicates the importance of a policy(PropagationPolicy or ClusterPropagationPolicy).
A policy will be applied for the matched resource templates if there is
no other policies with higher priority at the point of the resource
template be processed.
Once a resource template has been claimed by a policy, by default it will
not be preempted by following policies even with a higher priority.
See Preemption for more details.
In case of two policies have the same priority, the one with a more precise
matching rules in ResourceSelectors wins:
- matching by name(resourceSelector.name) has higher priority than
by selector(resourceSelector.labelSelector)
- matching by selector(resourceSelector.labelSelector) has higher priority
than by APIVersion(resourceSelector.apiVersion) and Kind(resourceSelector.kind).
If there is still no winner at this point, the one with the lower alphabetic
order wins, e.g. policy 'bar' has higher priority than 'foo'.
The higher the value, the higher the priority. Defaults to zero.
format: int32
type: integer
propagateDeps:
description: |-
PropagateDeps tells if relevant resources should be propagated automatically.
Take 'Deployment' which referencing 'ConfigMap' and 'Secret' as an example, when 'propagateDeps' is 'true',
the referencing resources could be omitted(for saving config effort) from 'resourceSelectors' as they will be
propagated along with the Deployment. In addition to the propagating process, the referencing resources will be
migrated along with the Deployment in the fail-over scenario.
Defaults to false.
type: boolean
resourceSelectors:
description: |-
ResourceSelectors used to select resources.
Nil or empty selector is not allowed and doesn't mean match all kinds
of resources for security concerns that sensitive resources(like Secret)
might be accidentally propagated.
items:
description: ResourceSelector the resources will be selected.
properties:
apiVersion:
description: APIVersion represents the API version of the target
resources.
type: string
kind:
description: Kind represents the Kind of the target resources.
type: string
labelSelector:
description: |-
A label query over a set of resources.
If name is not empty, labelSelector will be ignored.
properties:
matchExpressions:
description: matchExpressions is a list of label selector
requirements. The requirements are ANDed.
items:
description: |-
A label selector requirement is a selector that contains values, a key, and an operator that
relates the key and values.
properties:
key:
description: key is the label key that the selector
applies to.
type: string
operator:
description: |-
operator represents a key's relationship to a set of values.
Valid operators are In, NotIn, Exists and DoesNotExist.
type: string
values:
description: |-
values is an array of string values. If the operator is In or NotIn,
the values array must be non-empty. If the operator is Exists or DoesNotExist,
the values array must be empty. This array is replaced during a strategic
merge patch.
items:
type: string
type: array
x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
x-kubernetes-list-type: atomic
matchLabels:
additionalProperties:
type: string
description: |-
matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
map is equivalent to an element of matchExpressions, whose key field is "key", the
operator is "In", and the values array contains only "value". The requirements are ANDed.
type: object
type: object
x-kubernetes-map-type: atomic
name:
description: |-
Name of the target resource.
Default is empty, which means selecting all resources.
type: string
namespace:
description: |-
Namespace of the target resource.
Default is empty, which means inherit from the parent object scope.
type: string
required:
- apiVersion
- kind
type: object
minItems: 1
type: array
schedulePriority:
description: |-
SchedulePriority defines how Karmada should resolve the priority and preemption policy
for workload scheduling.
This setting is useful for controlling the scheduling behavior of offline workloads.
By setting a higher or lower priority, users can control which workloads are scheduled first.
Additionally, it allows specifying a preemption policy where higher-priority workloads can
preempt lower-priority ones in scenarios of resource contention.
Note: This feature is currently in the alpha stage. The priority-based scheduling functionality is
controlled by the PriorityBasedScheduling feature gate, and preemption is controlled by the
PriorityBasedPreemptiveScheduling feature gate. Currently, only priority-based scheduling is
supported. Preemption functionality is not yet available and will be introduced in future
releases as the feature matures.
properties:
priorityClassName:
description: |-
PriorityClassName specifies which PriorityClass to use. Its behavior depends on PriorityClassSource:
Behavior of PriorityClassName:
For KubePriorityClass:
- When specified: Uses the named Kubernetes PriorityClass.
- When empty: Uses the cluster's default PriorityClass (i.e., the PriorityClass marked as the global default in the cluster).
- If neither exists: Sets priority=0 and preemptionPolicy=Never.
For PodPriorityClass:
- Uses PriorityClassName from the PodTemplate.
- If the specified PriorityClass is not found, falls back to the cluster's default PriorityClass
(i.e., the PriorityClass marked as the global default in the cluster).
- If no valid PriorityClass is found: Sets priority=0 and preemptionPolicy=Never.
- Not yet implemented.
For FederatedPriorityClass:
- Not yet implemented.
type: string
priorityClassSource:
default: KubePriorityClass
description: |-
PriorityClassSource specifies where Karmada should look for the PriorityClass definition.
Available options:
- KubePriorityClass (default): Uses Kubernetes PriorityClass (scheduling.k8s.io/v1)
- PodPriorityClass: Uses PriorityClassName from PodTemplate: PodSpec.PriorityClassName (not yet implemented)
- FederatedPriorityClass: Uses Karmada FederatedPriorityClass (not yet implemented)
enum:
- KubePriorityClass
type: string
required:
- priorityClassName
type: object
schedulerName:
default: default-scheduler
description: |-
SchedulerName represents which scheduler to proceed the scheduling.
If specified, the policy will be dispatched by specified scheduler.
If not specified, the policy will be dispatched by default scheduler.
type: string
suspension:
description: |-
Suspension declares the policy for suspending different aspects of propagation.
nil means no suspension. no default values.
properties:
dispatching:
description: |-
Dispatching controls whether dispatching should be suspended.
nil means not suspend, no default value, only accepts 'true'.
Note: true means stop propagating to all clusters. Can not co-exist
with DispatchingOnClusters which is used to suspend particular clusters.
type: boolean
dispatchingOnClusters:
description: |-
DispatchingOnClusters declares a list of clusters to which the dispatching
should be suspended.
Note: Can not co-exist with Dispatching which is used to suspend all.
properties:
clusterNames:
description: ClusterNames is the list of clusters to be selected.
items:
type: string
type: array
type: object
type: object
required:
- resourceSelectors
type: object
required:
- spec
type: object
served: true
storage: true
subresources: {}