Skip to content

Commit

Permalink
add v1.11 blog
Browse files Browse the repository at this point in the history
Signed-off-by: changzhen <[email protected]>
  • Loading branch information
XiShanYongYe-Chang committed Sep 13, 2024
1 parent ef68dbe commit 514211a
Show file tree
Hide file tree
Showing 10 changed files with 310 additions and 0 deletions.
Binary file added blog/2024-09-13-karmada-v1.11/img/rollout-00.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added blog/2024-09-13-karmada-v1.11/img/rollout-01.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added blog/2024-09-13-karmada-v1.11/img/rollout-02.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added blog/2024-09-13-karmada-v1.11/img/rollout-03.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
136 changes: 136 additions & 0 deletions blog/2024-09-13-karmada-v1.11/karmada-v1.11.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,136 @@
# Karmada v1.11 version released! New cross-cluster rolling upgrade capability for workload!

Karmada is an open multi-cloud and multi-cluster container orchestration engine designed to help users deploy and operate business applications in a multi-cloud environment. With its compatibility with the native Kubernetes API, Karmada can smoothly migrate single-cluster workloads while still maintaining coordination with the surrounding Kubernetes ecosystem tools.

This version includes the following new features:
- Supports cross-cluster rolling upgrades of federated workloads, making the user's version release process more flexible and controllable.
- karmadactl has added multiple operational capabilities, providing a unique multi-cluster operational experience.
- It provides standardized generation semantics for federated workloads, enabling CD execution in one step.
Karmada Operator supports custom CRD download strategies, making offline deployment more flexible.
- Overview of New Features

## Cross-Cluster Rolling Upgrade of Federated Workloads

In the latest released v1.11 version, Karmada has added the feature of cross-cluster rolling upgrades for federated workloads. This feature is particularly suitable for workloads deployed across multiple clusters, allowing users to adopt more flexible and controllable rolling upgrade strategies when releasing new versions of their workloads. Users can finely control the upgrade process to ensure a smooth transition for each cluster during the upgrade, minimizing the impact on the production environment. This feature not only enhances the user experience but also provides more flexibility and reliability for complex multi-cluster management.

Below is an example to demonstrate how to perform a rolling upgrade on federated workloads:

Assuming that the user has already propagated the Deployment to three member clusters through PropagationPolicy: `ClusterA`, `ClusterB`, `ClusterC`:

```yaml
apiVersion: policy.karmada.io/v1alpha1
kind: PropagationPolicy
metadata:
name: nginx-propagation
spec:
resourceSelectors:
- apiVersion: apps/v1
kind: Deployment
name: nginx
placement:
clusterAffinity:
clusterNames:
- ClusterA
- ClusterB
- ClusterC
```
![](./img/rollout-00.png)
At this point, the version of the Deployment is v1. To upgrade the Deployment resource version to v2, users can perform the following steps in sequence.
Firstly, the user configures the PropagationPolicy to temporarily halt the propagation of resources to `ClusterA` and `ClusterB`, so that the deployment changes will only occur in `ClusterC`:

```yaml
apiVersion: policy.karmada.io/v1alpha1
kind: PropagationPolicy
metadata:
name: nginx-propagation
spec:
#...
suspension:
dispatchingOnClusters:
clusterNames:
- ClusterA
- ClusterB
```

![](./img/rollout-01.png)

Then, update the PropagationPolicy resource to allow the system to synchronize the new version of the resources to the `ClusterB` cluster:

```yaml
suspension:
dispatchingOnClusters:
clusterNames:
- ClusterA
```

![](./img/rollout-02.png)

Finally, remove the `suspension` field from the PropagationPolicy resource to allow the system to synchronize the new version of the resources to the `ClusterA` cluster:

![](./img/rollout-03.png)

From the example above, we can see that by using the cross-cluster rolling upgrade capability of federated workloads, the new version of the workload can be rolled out cluster by cluster, and precise control can be achieved.

Additionally, this feature can also be applied to other scenarios:

- As developers, situations where resources are frequently updated can arise when the Karmada control plane competes with member clusters for resource control. Suspending the process of synchronizing resources to member clusters will help quickly identify the issue.

## Enhancements to Karmadactl Capabilities and Improved Operations Experience

In this version, the Karmada community has focused on enhancing Karmadactl capabilities to provide a better multi-cluster operations experience, thereby reducing users' reliance on kubectl.

### A More Extensive Command Set

Karmadactl now supports a richer command set including `create`, `patch`, `delete`, `label`, `annotate`, `edit`, `attach`, `top node`, `api-resources`, and `explain`. These commands allow users to perform more operations on resources either on the Karmada control plane or member clusters.

### Enhanced Functionality

Karmadactl introduces the `--operation-scope` parameter to control the scope of command operations. With this new parameter, commands such as `get`, `describe`, `exec`, and `explain` can flexibly switch between cluster perspectives to operate on resources in the Karmada control plane or member clusters.

### More Detailed Command Output Information

The output of the `karmadactl get cluster` command now includes additional details such as the cluster object's `Zones`, `Region`, `Provider`, `API-Endpoint`, and `Proxy-URL`.

Through these capability enhancements, the operational experience with karmadactl has been improved. New features and more detailed information about karmadactl can be accessed using `karmadactl --help`.

## Standardization of Federation Workload Generation Semantics

In this version, Karmada has standardized the generation semantics of workload at the federation level. This update provides a reliable reference for the release system, enhancing the accuracy of cross-cluster deployments. By standardizing generation semantics, Karmada simplifies the release process and ensures consistent tracking of workload status, making it easier to manage and monitor applications across multiple clusters.

The specifics of the standardization are as follows: the observedGeneration value in the status of the federated workload is set to its own `.metadata.generation` value only when the state of resources distributed to all member clusters satisfies `status.observedGeneration` >= `metadata.generation`. This ensures that the corresponding controllers in each member cluster have completed processing of the workload. This move aligns the generation semantics at the federation level with those of Kubernetes clusters, allowing users to more conveniently migrate single-cluster applications to a multi-cluster setup.

The following resources have been adapted in this version:

- GroupVersion: apps/v1 Kind: Deployment, DaemonSet, StatefulSet
- GroupVersion: apps.kruise.io/v1alpha1 Kind: CloneSet, DaemonSet
- GroupVersion: apps.kruise.io/v1beta1 Kind: StatefulSet
- GroupVersion: helm.toolkit.fluxcd.io/v2beta1 Kind: HelmRelease
- GroupVersion: kustomize.toolkit.fluxcd.io/v1 Kind: Kustomization
- GroupVersion: source.toolkit.fluxcd.io/v1 Kind: GitRepository
- GroupVersion: source.toolkit.fluxcd.io/v1beta2 Kind: Bucket, HelmChart, HelmRepository, OCIRepository

If you need to adapt more resources (including CRDs), you can provide feedback to the Karmada community or extend using the Resource Interpreter.

## Karmada Operator Supports Custom CRD Download Strategies

CRD (Custom Resource Definition) resources are key prerequisite resources used by the Karmada Operator to configure new Karmada instances. These CRD resources contain critical API definitions for the Karmada system, such as PropagationPolicy, ResourceBinding, and Work.

In version v1.11, the Karmada Operator supports custom CRD download strategies. With this feature, users can specify the download path for CRD resources and define additional download strategies, providing a more flexible offline deployment method.

For a detailed description of this feature, refer to the proposal: Custom CRD Download Strategy Support for Karmada Operator.

# Acknowledging Our Contributors

The Karmada v1.11 release includes 223 code commits from 36 contributors. We would like to extend our sincere gratitude to all the contributors:

| ^-^ | ^-^ | ^-^ | ^-^ | ^-^ | ^-^ |
|--|--|--|--|--|--|
| <div><img src="https://avatars.githubusercontent.com/u/91091911?v=4" width="120"></div> @08AHAD | <div><img src="https://avatars.githubusercontent.com/u/9448877?v=4" width="120"></div> @a7i | <div><img src="https://avatars.githubusercontent.com/u/110886184?v=4" width="120"></div> @aditya7302 | <div><img src="https://avatars.githubusercontent.com/u/72978371?v=4" width="120"></div> @Affan-7 | <div><img src="https://avatars.githubusercontent.com/u/114267538?v=4" width="120"></div> @Akash-Singh04 | <div><img src="https://avatars.githubusercontent.com/u/121146661?v=4" width="120"></div> @anujagrawal699 |
| <div><img src="https://avatars.githubusercontent.com/u/77265354?v=4" width="120"></div> @B1F030 | <div><img src="https://avatars.githubusercontent.com/u/30589999?v=4" width="120"></div> @chaosi-zju | <div><img src="https://avatars.githubusercontent.com/u/91006252?v=4" width="120"></div> @dzcvxe | <div><img src="https://avatars.githubusercontent.com/u/11367?v=4" width="120"></div> @grosser | <div><img src="https://avatars.githubusercontent.com/u/165548992?v=4" width="120"></div> @guozheng-shen | <div><img src="https://avatars.githubusercontent.com/u/161435702?v=4" width="120"></div> @hulizhe |
| <div><img src="https://avatars.githubusercontent.com/u/9134003?v=4" width="120"></div> @iawia002 | <div><img src="https://avatars.githubusercontent.com/u/69568555?v=4" width="120"></div> @mohamedawnallah | <div><img src="https://avatars.githubusercontent.com/u/10909801?v=4" width="120"></div> @mszacillo | <div><img src="https://avatars.githubusercontent.com/u/103022832?v=4" width="120"></div> @NishantBansal2003 | <div><img src="https://avatars.githubusercontent.com/u/10169239?v=4" width="120"></div> @jabellard | <div><img src="https://avatars.githubusercontent.com/u/32532742?v=4" width="120"></div> @khanhtc1202 |
| <div><img src="https://avatars.githubusercontent.com/u/28711504?v=4" width="120"></div> @liangyuanpeng | <div><img src="https://avatars.githubusercontent.com/u/25760295?v=4" width="120"></div> @qinguoyi | <div><img src="https://avatars.githubusercontent.com/u/8268873?v=4" width="120"></div> @RainbowMango | <div><img src="https://avatars.githubusercontent.com/u/88012965?v=4" width="120"></div> @rxy0210 | <div><img src="https://avatars.githubusercontent.com/u/30234478?v=4" width="120"></div> @seanlaii| <div><img src="https://avatars.githubusercontent.com/u/25897492?v=4" width="120"></div> @spiritNO1 |
| <div><img src="https://avatars.githubusercontent.com/u/103884386?v=4" width="120"></div> @tiansuo114 | <div><img src="https://avatars.githubusercontent.com/u/117595548?v=4" width="120"></div> @varshith257 | <div><img src="https://avatars.githubusercontent.com/u/28217554?v=4" width="120"></div> @veophi | <div><img src="https://avatars.githubusercontent.com/u/12890818?v=4" width="120"></div> @wangxf1987 | <div><img src="https://avatars.githubusercontent.com/u/89241565?v=4" width="120"></div> @whitewindmills | <div><img src="https://avatars.githubusercontent.com/u/37793844?v=4" width="120"></div> @xiaoloongfang |
| <div><img src="https://avatars.githubusercontent.com/u/78244870?v=4" width="120"></div> @XiShanYongYe-Chang | <div><img src="https://avatars.githubusercontent.com/u/28291357?v=4" width="120"></div> @xovoxy | <div><img src="https://avatars.githubusercontent.com/u/32605754?v=4" width="120"></div> @yash | <div><img src="https://avatars.githubusercontent.com/u/48058415?v=4" width="120"></div> @yike21 | <div><img src="https://avatars.githubusercontent.com/u/56665618?v=4" width="120"></div> @zhy76 | <div><img src="https://avatars.githubusercontent.com/u/81208264?v=4" width="120"></div> @zhzhuang-zju |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading

0 comments on commit 514211a

Please sign in to comment.