karmada/charts/karmada/_crds/bases/policy/policy.karmada.io_propagati...

780 lines
46 KiB
YAML

---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.13.0
name: propagationpolicies.policy.karmada.io
spec:
group: policy.karmada.io
names:
categories:
- karmada-io
kind: PropagationPolicy
listKind: PropagationPolicyList
plural: propagationpolicies
shortNames:
- pp
singular: propagationpolicy
scope: Namespaced
versions:
- name: v1alpha1
schema:
openAPIV3Schema:
description: PropagationPolicy represents the policy that propagates a group
of resources to one or more clusters.
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 PropagationPolicy.
properties:
activationPreference:
description: "ActivationPreference indicates how the referencing resource
template will be propagated, in case of policy changes. \n 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.
\n 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. \n 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.
\n 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. \n 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".
type: string
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.
\n 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). \n
If none of the groups satisfy the scheduling restrictions, then
scheduling fails, which means no cluster will be selected. \n
Note: 1. ClusterAffinities can not co-exist with ClusterAffinity.
2. If both ClusterAffinity and ClusterAffinities are not set,
any cluster can be scheduling candidates. \n 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). \n 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
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
required:
- key
- operator
type: object
type: array
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
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
required:
- key
- operator
type: object
type: array
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
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
required:
- key
- operator
type: object
type: array
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
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. \n 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'. \n 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. \n 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
required:
- key
- operator
type: object
type: array
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
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
required:
- resourceSelectors
type: object
required:
- spec
type: object
served: true
storage: true