* [v1.3.0](#v130)
  * [Downloads for v1.3.0](#downloads-for-v130)
  * [Karmada v1.3 Release Notes](#karmada-v13-release-notes)
    * [1.3 What's New](#whats-new)
    * [Other Notable Changes](#other-notable-changes)

# v1.3.0

## Downloads for v1.3.0
Download v1.3.0 in the [v1.3.0 release page](https://github.com/karmada-io/karmada/releases/tag/v1.3.0).

## Karmada v1.3 Release Notes

### What's New
#### Taint-based eviction in graceful way

We introduced a new controller named `taint manager` which aims to evict workloads from faulty clusters after a grace period. 
Then the scheduler would select new best-fit clusters for the workloads. In addition, if the feature `GracefulEviction` is enabled, 
the eviction will be very smooth, that is, the removal of evicted workloads will be delayed until the workloads are available on 
new clusters or reach the maximum grace period. For more details please refer to [Failover Overview](https://karmada.io/docs/userguide/failover/). 

(Feature contributor: @Garrybest, @XiShanYongYe-Chang)

#### Global proxy for resources across multi-clusters

We introduced a new proxy feature to `karmada-search` that allows users to access resources in multiple clusters in a way just like accessing resources in a single cluster. No matter whether the resources are managed by Karmada, by leveraging the proxy, users 
can manipulate the resources from the Karmada control plane.
For more details please refer to [Global Resource Proxy](https://karmada.io/docs/userguide/globalview/proxy-global-resource).

(Feature contributor: @ikaven1024, @XiShanYongYe-Chang)

#### Cluster resource modeling

To provide a more accurate scheduling basis for the scheduler, we introduced a way to model the cluster's available resources.
The cluster status controller will model the resources as per the customized resource models, which is more accurate than the general resource summary. For more details please refer to [Cluster Resource Modeling](https://karmada.io/docs/userguide/scheduling/cluster-resources).

(Feature contributor: @halfrost, @Poor12)

#### Bootstrap token-based cluster registration

Now for clusters in `Pull` mode, we provide a way for them to register with the Karmada control plane. By leveraging the commands `token` and `register` in `kubectl`, the registration process including deploying the `karmada-agent` can be completed very easily. For more details please refer to [Register cluster with Pull mode](https://karmada.io/docs/userguide/clustermanager/cluster-registration#register-cluster-with-push-mode).

(Feature contributor: @lonelyCZ )

#### Significant improvement in system scalability 

We improved the system scalability, such as:
- Enable pprof([#2008](https://github.com/karmada-io/karmada/pull/2008))
- Introduce `cachedRESTMapper`([#2187](https://github.com/karmada-io/karmada/pull/2187))
- Adopt the transform function to reduce memory usage([#2383](https://github.com/karmada-io/karmada/pull/2383))

With these improvements, Karmada can easily manage hundreds of huge clusters. The detailed test report will be released soon.

### Other Notable Changes

#### API changes
- The `Cluster` API is added optional field `ID` to uniquely identify the cluster. (@RainbowMango, [#2180](https://github.com/karmada-io/karmada/pull/2180))
- The `Cluster` API is added optional field `ProxyHeader` to specify the HTTP header required by the proxy server. (@mrlihanbo, [#1874](https://github.com/karmada-io/karmada/pull/1874))
- The `Cluster` API is added optional field named `ResourceModels` to specify resource modeling. (@halfrost, [#2386](https://github.com/karmada-io/karmada/pull/2386))
- The `Work` and `ResourceBinding`/`ClusterResourceBinding` APIs are added field `health` to represent the state of workload. (@XiShanYongYe-Chang, [#2351](https://github.com/karmada-io/karmada/pull/2351))

#### Bug Fixes
- `karmadactl`: Fixed issue that Kubernetes v1.24 cannot be joined. (@zgfh, [#1972](https://github.com/karmada-io/karmada/pull/1972))
- `karmadactl`: Fixed a panic issue when retrieving resources from an unknown cluster(`karmadactl get xxx --cluster=not-exist`). (@my-git9, [#2171](https://github.com/karmada-io/karmada/pull/2171))
- `karmadactl`: Fixed failed promoting if a resource with another kind using the same name has been promoted before. (@wuyingjun-lucky, [#1824](https://github.com/karmada-io/karmada/pull/1824))
- `karmada-search`: Fixed panic when the resource annotation is nil. (@XiShanYongYe-Chang, [#1921](https://github.com/karmada-io/karmada/pull/1921))
- `karmada-search`: Fixed panic `comparing uncomparable type cache.ResourceEventHandlerFuncs`. (@liys87x, [#1951](https://github.com/karmada-io/karmada/pull/1951))
- `karmada-search`: Fixed failed query on a single namespace (@luoMonkeyKing, [#2227](https://github.com/karmada-io/karmada/pull/2227))
- `karmada-controller-manager`: Fixed that `Job` status might be incorrectly marked as `Completed`. (@Garrybest, [#1987](https://github.com/karmada-io/karmada/pull/1987))
- `karmada-controller-manager`: Fixed returning err when the interpreter webhook returns nil patch and nil patchType. (@CharlesQQ, [#2161](https://github.com/karmada-io/karmada/pull/2161))
- `karmada-controller-manager`: Fixed that Argo CD cannot assess Deployment health status. (@xuqianjins, [#2241](https://github.com/karmada-io/karmada/pull/2241))
- `karmada-controller-manager`: Fixed that Argo CD cannot assess StatefulSet/DaemonSet health status. (@RainbowMango, [#2252](https://github.com/karmada-io/karmada/pull/2252))
- `karmada-controller-manager`/`karmada-agent`: Fixed an resource status can not be collected issue in case of Resource Interpreter returns an error. (@XiShanYongYe-Chang, [#2428](https://github.com/karmada-io/karmada/pull/2428))
- `karmada-sechduler`: Fixed a panic issue when `replicaDivisionPreference` is `Weighted` and `WeightPreference` is nil. (@XiShanYongYe-Chang, [#2451](https://github.com/karmada-io/karmada/pull/2451))

#### Features & Enhancements
- `karmadactl`: Added `--force` flag to `deinit` to skip confirmation. (@zgfh, [#2016](https://github.com/karmada-io/karmada/pull/2016))
- `karmadactl`: The flag `-c` of sub-command `promote` now has been changed to uppercase `-C`. (@Fish-pro, [#2140](https://github.com/karmada-io/karmada/pull/2140))
- ``karmadactl`: Introduced `--cluster-zone` and `--cluster-region` flags to `join` command to specify the zone and region of joining cluster. (@chaunceyjiang, [#2048](https://github.com/karmada-io/karmada/pull/2048))
- `karmadactl`: Introduced `--namespace` flag to `exec` command to specify the workload namespace. (@carlory, [#2092](https://github.com/karmada-io/karmada/pull/2092))
- `karmadactl`:  Allowed reading namespaces from the context field of karmada config for `get` command. (@carlory, [#2148](https://github.com/karmada-io/karmada/pull/2148))
- `karmadactl`: Introduced `apply` subcommand to apply a configuration to a resource by file name or stdin. (@carlory, [#2000](https://github.com/karmada-io/karmada/pull/2000))
- `karmadactl`: Introduced `--namespace` flag to `describe` command to specify the namespace the workload belongs to. (@TheStylite, [#2153](https://github.com/karmada-io/karmada/pull/2153))
- `karmadactl`: Introduced `--cluster` flag for `apply` command to allow users to select one or many member clusters to propagate resources. (@carlory, [#2192](https://github.com/karmada-io/karmada/pull/2192))
- `karmadactl`: Introduced options subcmd to list global command-line options. (@lonelyCZ, [#2283](https://github.com/karmada-io/karmada/pull/2283))
- `karmadactl`: Introduced the` token` command to manage bootstrap tokens. (@lonelyCZ, [#2399](https://github.com/karmada-io/karmada/pull/2399))
- `karmadactl`: Introduced the` register` command for joining PULL mode cluster. (@lonelyCZ, [#2388](https://github.com/karmada-io/karmada/pull/2388))
- `karmada-scheduler`: Introduced `--enable-empty-workload-propagation` flag to enable propagating empty workloads. (@CharlesQQ, [#1720](https://github.com/karmada-io/karmada/pull/1720))
- `karmada-scheduler`: Allowed extended plugins in an out-of-tree mode. (@kerthcet, [#1663](https://github.com/karmada-io/karmada/pull/1663))
- `karmada-scheduler`: Introduced  `--disable-scheduler-estimator-in-pull-mode` flag to disable scheduler-estimator for clusters in pull mode. (@prodanlabs, [#2064](https://github.com/karmada-io/karmada/pull/2064))
- `karmada-scheduler`: Introduced `--plugins` flag to enable or disable scheduler plugins. (@chaunceyjiang, [#2135](https://github.com/karmada-io/karmada/pull/2135))
- `karmada-scheduler`: Now the scheduler starts to re-schedule in case of cluster state changes. (@chaunceyjiang, [#2301](https://github.com/karmada-io/karmada/pull/2301))
- `karmada-search`: The search API supports searching for resources according to labels. (@XiShanYongYe-Chang, [#1917](https://github.com/karmada-io/karmada/pull/1917))
- `karmada-search`: The annotation `cluster.karmada.io/name` which is used to represent the source of cache now has been changed to `resource.karmada.io/cached-from-cluster`. (@calvin0327, [#1960](https://github.com/karmada-io/karmada/pull/1960))
- `karmada-search`: Fixed panic issue when dumping error info. (@AllenZMC, [#2231](https://github.com/karmada-io/karmada/pull/2331))
- `karmada-controller-manager/karmada-agent`: Cluster state controller now able to collect partial API list in the case of discovery failure. (@duanmengkk, [#1968](https://github.com/karmada-io/karmada/pull/1968))
- `karmada-controller-manager/karmada-agent`: Introduced `--cluster-success-threshold` flag to specify cluster success threshold. Default to 30s. (@dddddai, [#1884](https://github.com/karmada-io/karmada/pull/1884))
- `karmada-controller-manager/karmada-agent`: Added CronJob support to the default resource interpreter framework. (@chaunceyjiang, [#2060](https://github.com/karmada-io/karmada/pull/2060))
- `karmada-controller-manager`/`karmada-agent`: Introduced `--leader-elect-lease-duration`, `--leader-elect-renew-deadline` and `--leader-elect-retry-period` flags to specify leader election behaviors. (@CharlesQQ, [#2056](https://github.com/karmada-io/karmada/pull/2056))
- `karmada-controller-manager`/`karmada-agent` : Fixed panic issue when dumping error infos. (@AllenZMC, [#2117](https://github.com/karmada-io/karmada/pull/2117))
- `karmada-controller-manager`/`karmada-agent`: Supported interpreting health state by levering `Resource Interpreter Framework`. (@zhuwint, [#2329](https://github.com/karmada-io/karmada/pull/2329))
- `karmada-controller-manager`/`karmada-agent`: Introduced `--enable-cluster-resource-modeling` flag to enable or disable cluster modeling feature. (@RainbowMango, [#2387](https://github.com/karmada-io/karmada/pull/2387))
- `karmada-controller-manager`/`karmada-agent`: Now able to retain `.spec.claimRef` field of `PersistentVolume`. (@Garrybest, [#2415](https://github.com/karmada-io/karmada/pull/2415))
- `karmada-controller-manager`:  `interpreter framework` starts to support Pod state aggregation.  (@xyz2277, [#1913](https://github.com/karmada-io/karmada/pull/1913))
- `karmada-controller-manager`:  `interpreter framework` starts to support PVC state aggregation. (@chaunceyjiang, [#2070](https://github.com/karmada-io/karmada/pull/2070))
- `karmada-controller-manager`: Stopped reporting and refreshing `lease` for clusters in `Push` mode. (@dddddai, [#2033](https://github.com/karmada-io/karmada/pull/2033))
- `karmada-controller-manager`:  `interpreter framework` starts to support Pod  `Failded` and `Succeeded`  aggregation.  (@chaunceyjiang, [#2146](https://github.com/karmada-io/karmada/pull/2146))
- `karmada-controller-manager`: `namespace` controller starts to apply `ClusterOverridePolicy` during propagation namespaces. (@zirain, [#2263](https://github.com/karmada-io/karmada/pull/2263))
- `karmada-controller-manager`: Propagation dependencies support propagating ServiceAccounts. (@chaunceyjiang, [#2035](https://github.com/karmada-io/karmada/pull/2035))
- `karmada-agent`: Introduced `--metrics-bind-address` flag to specify the address for serving Prometheus metrics. (@1953, [#1953](https://github.com/karmada-io/karmada/pull/1953))
- `karmada-agent`: Introduced `--report-secrets` flag to allow secrets to be reported to the Karmada control plane during registering. (@CharlesQQ, [#1990](https://github.com/karmada-io/karmada/pull/1990))
- `karmada-agent`: Introduced `--cluster-provider` and `--cluster-region` flags to specify cluster-provider and cluster-region during registering. (@CharlesQQ, [#2152](https://github.com/karmada-io/karmada/pull/2152))
- `karmada-webhook`: Added default tolerations, defaultNotReadyTolerationSeconds, and defaultUnreachableTolerationSeconds, for (Cluster)PropagationPolicy. (@Garrybest, [#2284](https://github.com/karmada-io/karmada/pull/2284))
- `karmada-webhook`: The '.spec.ttlSecondsAfterFinished' field of the Job resource will be removed before propagating to member clusters. (@chaunceyjiang, [#2294](https://github.com/karmada-io/karmada/pull/2294))
- `karmada-agent`/`karmadactl`: Now an error will be reported when registering the same cluster to Karmada. (@yy158775, [#2369](https://github.com/karmada-io/karmada/pull/2369))

### Other

#### Helm Chart
- `Helm chart`: Updated default `kube-apiserver` from v1.21 to v1.22. (@AllenZMC, [#1941](https://github.com/karmada-io/karmada/pull/1941))
- `Helm Chart`: Added missing `APIService` configuration for `karmada-aggregated-apiserver`. (@zhixian82, [#2258](https://github.com/karmada-io/karmada/pull/2258))
- `Helm Chart`: Fixed the webhook service mismatch issue in the case of customized release name. (@calvin0327, [#2275](https://github.com/karmada-io/karmada/pull/2275))
- `Helm Chart`: Introduced `--cluster-api-endpoint` for `karmada-agent`. (@my-git9, [#2299](https://github.com/karmada-io/karmada/pull/2299))
- `Helm Chart`: Fixed misconfigured `MutatingWebhookConfiguration`. (@zhixian82, [#2401](https://github.com/karmada-io/karmada/pull/2401))

#### Dependencies
- Karmada is now built with Golang 1.18.3. (@RainbowMango, [#2032](https://github.com/karmada-io/karmada/pull/2032))
- All Kubernetes dependencies are now updated to v1.24.2. (@RainbowMango, [#2050](https://github.com/karmada-io/karmada/pull/2050))

#### Deprecation
- `karmadactl`: Removed `--dry-run` flag from `describe`, `exec` and `log` commands. (@carlory, [#2023](https://github.com/karmada-io/karmada/pull/2023))
- `karmadactl`: Removed the `--cluster-namespace` flag for `get` command. (@carlory, [#2190](https://github.com/karmada-io/karmada/pull/2190))
- `karmadactl`: Removed the `--cluster-namespace` flag for `promote` command. (@carlory, [#2193](https://github.com/karmada-io/karmada/pull/2193))