959 lines
56 KiB
YAML
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: {}
|