From 425b56bd6930e4b3c3614df87c2a7238620b3460 Mon Sep 17 00:00:00 2001 From: Pasquale Congiusti Date: Thu, 13 Jul 2023 12:58:36 +0200 Subject: [PATCH 01/10] feat: Camel K 2.0 release notes --- content/blog/2023/07/camel-k-2-0/featured.png | Bin 0 -> 60058 bytes content/blog/2023/07/camel-k-2-0/index.md | 192 ++++++++++++++++++ 2 files changed, 192 insertions(+) create mode 100644 content/blog/2023/07/camel-k-2-0/featured.png create mode 100644 content/blog/2023/07/camel-k-2-0/index.md diff --git a/content/blog/2023/07/camel-k-2-0/featured.png b/content/blog/2023/07/camel-k-2-0/featured.png new file mode 100644 index 0000000000000000000000000000000000000000..19980310afc0c0adb909bbc6655e5bef4b12e30c GIT binary patch literal 60058 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 **Warning** make sure not to downgrade to Camel K version 1 once you have upgraded to version 2, because there won't be any conversion from `v1` to `v1alpha1` and it may result in a fatal error. + +The old `v1alpha1.KameletBinding` will still be supported in this release in order to give you the time to make the needed change and move all your KameletBindings to [`v1.Pipe`](/camel-k/next/apis/camel-k.html#_camel_apache_org_v1_Pipe). Try to give priority to this operation because the `v1alpha1` is now deprecated and will be removed within the next versions of Camel K. + +There is no other important concern about the compatibility with the previous Camel K version. You can follow the [documentation provided for Camel K upgrade](/camel-k/next/contributing/upgrade.html) as usual. + +We suggest to take the opportunity of this major upgrade to detect any usage of deprecated parameters in the [Camel K API](/camel-k/next/apis/camel-k.html) and do the switch accordingly. + +# Possibility to run any Camel K Runtime + +The first important feature we have introduced is the **possibility to run any Camel K Runtime**, making Camel K 2.0 backward and forward compatible. With this feature you can use the [Camel trait](/camel-k/next/traits/camel.html#_configuration) and specify which runtime version you want to use. As soon as a new version is available (ie, runtime version 3 which will run Camel 4), then, you can just update that parameter without the need to upgrade the operator any longer. + +By default, Camel K 2.x will use the stable runtime version at the moment of the release (in this case, Camel K runtime `2.16.0`). + +> **Note** You can use any Camel K Runtime version >= `1.17.0`. + +# Enterpise grade build system + +We have redesignid massively the way we conceive our build in order to accomodate the need run any Camel K Runtime. We are in general aware that we need to strenghten the way we build the applications, making sure each customer can introduce their tooling and have enough possibility to choose how to perform such a **build in an "enterprise-grade"**. Altough we're still working in progress (more enhancements to come in next milestone), we already have achieved most of the points we wanted to cover. + +## Free Camel K from Runtime + +The build process is now partially decoupled from the runtime process. We have identified the design and we applied it in Camel K version 2. The most important news was discussed in the chapter above, the enablement of multiple Camel K runtime. + +In order to enable this feature, you will notice that the `CamelCatalog` Custom Resource is now a dynamic resource which is reconciled by the operator. It is the one in charge to dynamically create any new runtime catalog required. This work was a big design change and we're confident it will help use reaching the longer term goal which is to **onboard any Camel runtime** (main, springboot, quarkus). + +TODO - some more official doc + +## Transform the build into a pipeline + +We have realized that the concept of an application build is not something "static". Each user/company has a different approach when building and testing an application. That's the reason why we have reworked the entire concept of the build and replace with something more customizable, a **pipeline**. + +The first immediate result of this change is that you have available a [simple Camel K Pipeline technology](/camel-k/next/pipeline/pipeline.html). This one is thought for those developers and companies which do not require all the major features of a complete pipeline technology. You may want to use this in order to provide some post-build process (ie, running a CVE scanning tool) or in general, execute any tool required by your company deployment process. + +## Camel K Tekton tasks + +We also know that many companies already adopts some richer **CICD technology**. For this reason we have introduced the [Camel K Tekton task](/camel-k/next/pipeline/tekton.html) which we're willing to support in order to simplify the onboarding of Camel K in Tekton pipeline. + +We have chosen to support Tekton because it's one of the most mature and widespread used CICD technology. However, if you're using any other pipeline technology it should not be difficult to transform the action we are supporting in Tekton task with the one required by your pipeline technology. + +## More meaningful error messages + +We know **troubleshooting a failing application** can be a bit annoying. For this reason we've added more error conditions and traces that will make this activity easier. Check it out `Integration`, `IntegrationKit` and `Build` custom resources conditions in order to understand why some application has failed. + +In particular in the `Build `(which is the main reason why an application fails) custom resource you will find conditions like the following one which can give you an immediate pulse of what's going on: + +``` + conditions: + - lastTransitionTime: "2023-05-19T09:56:02Z" + lastUpdateTime: "2023-05-19T09:56:02Z" + message: | + ... + {"level":"info","ts":1684490148.080175,"logger":"camel-k.builder","msg":"base image: eclipse-temurin:11"} + {"level":"info","ts":1684490148.0801787,"logger":"camel-k.builder","msg":"resolved base image: eclipse-temurin:11"} + reason: Completed (0) + status: "True" + type: Container builder succeeded +``` + +## Quarkus Native build as a Pod + +A Quarkus native build is an important feature that helps you save resources and give your Java application all the charateristics of a **first class Cloud Native** citizen. However, AOT compilation is something that requires resources and time. For this reason, from now on, when you run a Quarkus Native build, this will be performed with the `Pod` build strategy, which will basically spin off an external `Pod` to take care of such an heavy operation. + +This is a good news, because it will free the operator from the burden of such an heavy operation. Moreover we introduced some sensible resource configuration which should be enough for the builder Pod to complete its work withouth affecting the stability of the operator. + +However, if those are not enough or you still want to customize the builder Pod resources, we have made available a set of [builder parameters](/camel-k/next/traits/builder.html) (mainly cpu and memory resources). + +## Run build unprivileged + +This is quite an hidden work we've done and it really gave us a lot of trouble in order to let **Spectrum** and **S2I** builds to run in an unprivileged mode. However, we've accomplished it and we feel a little safer against any possible attack from privileged escalation. + +> **Note**: we haven't (yet) deprecated **Kaniko** and **Buildah** strategy and these deployment methods require to run with `root` privileges. Make sure to understand the possible risks involved. + +## Build order strategy + +Another little interesting feature you have available now is the possibility to define which is the order of the building strategy. When in +Camel K 1 you submitted a series of parallel builds, there was no guarantee on the order of execution. Now you can specify it using the [Builder trait order strategy parameter](/camel-k/next/traits/builder.html#_configuration). + +If you run many builds in parallel you may want to use the `dependencies` strategy which will take care to smartly create a queue for those builds which may depend on each other and leverage the incremental build feature. + +Our operator is smarter than any AI out there!! + +# More info on Kube native CLI + +It's no secret that in the long term we're willing to move most of the logic of `kamel` CLI in Camel JBang or any other UI tool. The possibility to include more informations directly in `kubectl` and any other K8S CLI (ie, `oc`) will help you getting most of the required information in one shot: + +``` +$ kubectl get camelcatalog +NAME RUNTIME PROVIDER RUNTIME VERSION RUNTIME CAMEL VERSION PHASE +camel-catalog-2.16.0 quarkus 2.16.0 3.20.1 Ready +$ kubectl get ip +NAME PHASE BUILD STRATEGY PUBLISH STRATEGY REGISTRY ADDRESS DEFAULT RUNTIME +camel-k Ready routine Spectrum 10.110.251.124 2.16.0 +... +``` + +# Camel K Runtime versioning + +The design work we did in Camel K in order to decouple from the runtime made us working on a deep cleaning of Camel K Runtime as well. This dependency is even lighter that before and right now it is mainly dependant from the Camel Quarkus project. You can notice that we **aligned the versioning** of this dependency to the versioning used in **Camel Quarkus**. It will be easier to identify which Camel Quarkus runtime we refer now. + +From now on we expect to release this dependency when Camel Quarkus will be released. + +# Golang API upgrade to V2 and dependencies upgrade + +This change won't affect directly the users of Camel K but it's important to mention for those tools or application that are using **Camel K Golang API**. We have upgraded to V2 accordingly, so, anybody willing to use this API will have to do the update accordingly. + +We have also performed a deep review to verify those old unsupported dependencies which may lead to a possible headache in case of some CVE. We have removed all the unsupported dependencies and we feel a bit more **safer against possible vulnerabilities** in the dependencies we use. + +# Remove deprecated CLI commands + +As we embarked in a major upgrade, we took the opportunity to clean all the **deprecated CLI commands** and configuration we had marked in Camel K version 1. + +* `kamel install --kaniko-build-cache` +* `kamel local` +* `kamel init` +* `kamel run --config|--resource file:` + +In version 2 they won't be any longer available and the operator may fail if those configurations are provided. Above all, the last one will require you to provide a resource file as either a Configmap or Secret if you want to use the related configuration (we don't support any longer the autogenerated confimaps from file). + +# Multiple data types and schemas in Kamelets + +This feature is not immediately available as it depends on the presence of the relative feature which will be available in Camel 4. When a Camel 4 compatible runtime will be available (we're all waiting with impatience), then you will be able to use the new [Kamelet Data Type configuration](https://github.com/apache/camel-k/pull/4100). + +TODO - include some documentation instead of the link to the PR. + +# Default Micrometer for integration monitoring + +About observability we made some work to use Micrometer as a default. This change is quite transparent to the final user as it replaced the dependencies used from one technology (Microprofile) to another (Micrometer). + +You can have a look at the [Prometheus trait configuration](/camel-k/next/traits/prometheus.html) to learn more. + +# Multi architecture support + +This feature should not be considered as generally available but more a kind of "tech preview". In Camel K 2.0 we provide an **ARM64 architecture based container image** for the operator but it is not tested due to the difficulty to find the required infrastructure and have the suite of test running. It's a best effort feature that we hope we can make generally available in the future versions. + +For more information you can have a look at the [Multi architecture official documentation](/camel-k/next/installation/advanced/multi-architecture.html) page. + +# Code coverage report + +If you're a Camel K contributor you have noticed that we introduced a nice action which is taking care to calculate the code coverage of the new code developed. The actions reports the coverage difference, so we know how we increase (or decrease) indirectly the quality of the code. This is not really (yet) a gateway, we want to create awareness among Camel K developers about the level of quality we introduce with each change. Little by little we expect to **increase the quality of the code** we produce and have less bugs affecting our code. + +# Documentation + +The last important point we've introduced is about the additional documentation we've provided. Maintaining the documentation up to date is a very well known hard task. But we know this is important for the final users to get the best from the project. + +In general we have worked to update the documentation with the various changes we have introduced. Additionally we have added the documentation which explain the major features of the new release. + +Beside that we have also worked on a series of documentation or blog post with the goal to help you setting up an **"enterprise ready" configuration**: + +* [Camel K operator fine tuning](/camel-k/next/installation/advanced/advanced.html) +* [Camel K Maven best practices](/camel-k/next/installation/advanced/maven.html) +* [Camel K GitOps unopinionated approach](/blog/2023/07/camel-k-gitops/) +* [Camel K upgrade process](/camel-k/next/contributing/upgrade.html) +* [Camel K tracing](/blog/2023/03/camel-k-telemetry/) + +We've more planned for the next months so, stay tuned. + +# What's left for Camel K > 2.0 + +The main details of the work we did can be directly found among the Github issues and pull requests in the project. You can have a look at the plan we did for the [Camel K 2.0 milestone 1](https://github.com/apache/camel-k/projects/22). + +Some of the original work planned and not completed may be delivered in the next milestone (likely Camel K version 2.1), but we think we can take a little break before starting the next plan. + +# Thanks + +I'd like to spend some words and thanks all the contributors who made this release possible. All the people that have made some development. All the people that have tested all the work done. All the people that have taken the time to write and read documentation. All the people which have provided feedback, ideas and criticisms around the developments we've been doing in the last months. Apache Camel K (and more in general, Camel) is made by all of you: thanks! + + From cecd4324dc7e93cb14a08b4aedba783604394bd3 Mon Sep 17 00:00:00 2001 From: Pasquale Congiusti Date: Fri, 14 Jul 2023 07:41:56 +0200 Subject: [PATCH 02/10] Update content/blog/2023/07/camel-k-2-0/index.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Gaëlle Fournier --- content/blog/2023/07/camel-k-2-0/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/blog/2023/07/camel-k-2-0/index.md b/content/blog/2023/07/camel-k-2-0/index.md index 75fb07ee8aa..0144434ea67 100644 --- a/content/blog/2023/07/camel-k-2-0/index.md +++ b/content/blog/2023/07/camel-k-2-0/index.md @@ -149,7 +149,7 @@ TODO - include some documentation instead of the link to the PR. # Default Micrometer for integration monitoring -About observability we made some work to use Micrometer as a default. This change is quite transparent to the final user as it replaced the dependencies used from one technology (Microprofile) to another (Micrometer). +About observability we made some work to use Micrometer as a default. Some changes are expected in the default metrics as it replaced the dependencies used from one technology (Microprofile) to another (Micrometer). You can have a look at the [Prometheus trait configuration](/camel-k/next/traits/prometheus.html) to learn more. From 4cab997f9061705f18916c50ea466a0f699c0719 Mon Sep 17 00:00:00 2001 From: Pasquale Congiusti Date: Fri, 14 Jul 2023 07:49:58 +0200 Subject: [PATCH 03/10] chore: spell check fixes --- content/blog/2023/07/camel-k-2-0/index.md | 24 +++++++++++------------ 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/content/blog/2023/07/camel-k-2-0/index.md b/content/blog/2023/07/camel-k-2-0/index.md index 0144434ea67..f429440702f 100644 --- a/content/blog/2023/07/camel-k-2-0/index.md +++ b/content/blog/2023/07/camel-k-2-0/index.md @@ -10,7 +10,7 @@ preview: "What's new in Camel K 2.0!" © 2023, RoadTrafficSigns.com -With a great level of excitment, on behalf of Apache Camel community, I'm proud to announce the general availability of **Camel K 2.0**. It's been a long ride since the beginning of 2023 when we announced the desire to work on an heavy refactoring in order to introduce new shining features and be able to run the future **Camel 4** runtimes. +With a great level of excitement, on behalf of Apache Camel community, I'm proud to announce the general availability of **Camel K 2.0**. It's been a long ride since the beginning of 2023 when we announced the desire to work on an heavy refactoring in order to introduce new shining features and be able to run the future **Camel 4** runtimes. This is the first important milestone reached, and we thought that the work done so far is already mature to see **general availability**. We'll keep working on the [roadmap](/blog/2023/02/camel-k-roadmap-2023/) along this year in order to try to complete as much as we can of what we have planned for 2023. @@ -22,7 +22,7 @@ The first concern you may have is about compatibility to Camel K version 1 and h We don't expect you to make any change on the old API though. As for `Kamelet`, the Kubernetes cluster will take care to automatically upgrade this (as it's just a change in the versioning). -> **Warning** make sure not to downgrade to Camel K version 1 once you have upgraded to version 2, because there won't be any conversion from `v1` to `v1alpha1` and it may result in a fatal error. +WARNING: make sure not to downgrade to Camel K version 1 once you have upgraded to version 2, because there won't be any conversion from `v1` to `v1alpha1` and it may result in a fatal error. The old `v1alpha1.KameletBinding` will still be supported in this release in order to give you the time to make the needed change and move all your KameletBindings to [`v1.Pipe`](/camel-k/next/apis/camel-k.html#_camel_apache_org_v1_Pipe). Try to give priority to this operation because the `v1alpha1` is now deprecated and will be removed within the next versions of Camel K. @@ -36,11 +36,11 @@ The first important feature we have introduced is the **possibility to run any C By default, Camel K 2.x will use the stable runtime version at the moment of the release (in this case, Camel K runtime `2.16.0`). -> **Note** You can use any Camel K Runtime version >= `1.17.0`. +NOTE: You can use any Camel K Runtime version >= `1.17.0`. -# Enterpise grade build system +# Enterprise grade build system -We have redesignid massively the way we conceive our build in order to accomodate the need run any Camel K Runtime. We are in general aware that we need to strenghten the way we build the applications, making sure each customer can introduce their tooling and have enough possibility to choose how to perform such a **build in an "enterprise-grade"**. Altough we're still working in progress (more enhancements to come in next milestone), we already have achieved most of the points we wanted to cover. +We have redesigned massively the way we conceive our build in order to accommodate the need run any Camel K Runtime. We are in general aware that we need to strengthen the way we build the applications, making sure each customer can introduce their tooling and have enough possibility to choose how to perform such a **build in an "enterprise-grade"**. Although we're still working in progress (more enhancements to come in next milestone), we already have achieved most of the points we wanted to cover. ## Free Camel K from Runtime @@ -83,9 +83,9 @@ In particular in the `Build `(which is the main reason why an application fails) ## Quarkus Native build as a Pod -A Quarkus native build is an important feature that helps you save resources and give your Java application all the charateristics of a **first class Cloud Native** citizen. However, AOT compilation is something that requires resources and time. For this reason, from now on, when you run a Quarkus Native build, this will be performed with the `Pod` build strategy, which will basically spin off an external `Pod` to take care of such an heavy operation. +A Quarkus native build is an important feature that helps you save resources and give your Java application all the characteristics of a **first class Cloud Native** citizen. However, AOT compilation is something that requires resources and time. For this reason, from now on, when you run a Quarkus Native build, this will be performed with the `Pod` build strategy, which will basically spin off an external `Pod` to take care of such an heavy operation. -This is a good news, because it will free the operator from the burden of such an heavy operation. Moreover we introduced some sensible resource configuration which should be enough for the builder Pod to complete its work withouth affecting the stability of the operator. +This is a good news, because it will free the operator from the burden of such an heavy operation. Moreover we introduced some sensible resource configuration which should be enough for the builder Pod to complete its work without affecting the stability of the operator. However, if those are not enough or you still want to customize the builder Pod resources, we have made available a set of [builder parameters](/camel-k/next/traits/builder.html) (mainly cpu and memory resources). @@ -93,7 +93,7 @@ However, if those are not enough or you still want to customize the builder Pod This is quite an hidden work we've done and it really gave us a lot of trouble in order to let **Spectrum** and **S2I** builds to run in an unprivileged mode. However, we've accomplished it and we feel a little safer against any possible attack from privileged escalation. -> **Note**: we haven't (yet) deprecated **Kaniko** and **Buildah** strategy and these deployment methods require to run with `root` privileges. Make sure to understand the possible risks involved. +NOTE: we haven't (yet) deprecated **Kaniko** and **Buildah** strategy and these deployment methods require to run with `root` privileges. Make sure to understand the possible risks involved. ## Build order strategy @@ -106,7 +106,7 @@ Our operator is smarter than any AI out there!! # More info on Kube native CLI -It's no secret that in the long term we're willing to move most of the logic of `kamel` CLI in Camel JBang or any other UI tool. The possibility to include more informations directly in `kubectl` and any other K8S CLI (ie, `oc`) will help you getting most of the required information in one shot: +It's no secret that in the long term we're willing to move most of the logic of `kamel` CLI in Camel JBang or any other UI tool. The possibility to include more information directly in `kubectl` and any other K8S CLI (ie, `oc`) will help you getting most of the required information in one shot: ``` $ kubectl get camelcatalog @@ -139,7 +139,7 @@ As we embarked in a major upgrade, we took the opportunity to clean all the **de * `kamel init` * `kamel run --config|--resource file:` -In version 2 they won't be any longer available and the operator may fail if those configurations are provided. Above all, the last one will require you to provide a resource file as either a Configmap or Secret if you want to use the related configuration (we don't support any longer the autogenerated confimaps from file). +In version 2 they won't be any longer available and the operator may fail if those configurations are provided. Above all, the last one will require you to provide a resource file as either a Configmap or Secret if you want to use the related configuration (we don't support any longer the auto-generated Confimaps from file). # Multiple data types and schemas in Kamelets @@ -149,7 +149,7 @@ TODO - include some documentation instead of the link to the PR. # Default Micrometer for integration monitoring -About observability we made some work to use Micrometer as a default. Some changes are expected in the default metrics as it replaced the dependencies used from one technology (Microprofile) to another (Micrometer). +About observability we made some work to use **Micrometer as a default**. Some changes are expected in the default metrics as it replaced the dependencies used from one technology (Microprofile) to another (Micrometer). You can have a look at the [Prometheus trait configuration](/camel-k/next/traits/prometheus.html) to learn more. @@ -188,5 +188,3 @@ Some of the original work planned and not completed may be delivered in the next # Thanks I'd like to spend some words and thanks all the contributors who made this release possible. All the people that have made some development. All the people that have tested all the work done. All the people that have taken the time to write and read documentation. All the people which have provided feedback, ideas and criticisms around the developments we've been doing in the last months. Apache Camel K (and more in general, Camel) is made by all of you: thanks! - - From f7178da93e62ecc98ec959a8288b82efa1ac3171 Mon Sep 17 00:00:00 2001 From: Pasquale Congiusti Date: Fri, 14 Jul 2023 15:41:53 +0200 Subject: [PATCH 04/10] Update content/blog/2023/07/camel-k-2-0/index.md Co-authored-by: Christoph Deppisch --- content/blog/2023/07/camel-k-2-0/index.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/content/blog/2023/07/camel-k-2-0/index.md b/content/blog/2023/07/camel-k-2-0/index.md index f429440702f..90e57303c9c 100644 --- a/content/blog/2023/07/camel-k-2-0/index.md +++ b/content/blog/2023/07/camel-k-2-0/index.md @@ -145,7 +145,11 @@ In version 2 they won't be any longer available and the operator may fail if tho This feature is not immediately available as it depends on the presence of the relative feature which will be available in Camel 4. When a Camel 4 compatible runtime will be available (we're all waiting with impatience), then you will be able to use the new [Kamelet Data Type configuration](https://github.com/apache/camel-k/pull/4100). -TODO - include some documentation instead of the link to the PR. +# Multiple data types and schemas in Kamelets + +Kamelets are now able to expose supported input/output data types as part of the [Kamelet data type specification](/camel-k/next/kamelets/kamelets-dev.html#_kamelet_data_types) in order to increase the interoperability with other components. When referencing a Kamelet as a source or sink in a Pipe users may now choose an appropriate input/output data type that fits best for their individual use case. + +This feature leverages the [data types transformer concept](https://camel.apache.org/manual/transformer.html) in Apache Camel 4 and reveals its full power once the new major version of Camel is available (we are all eagerly awaiting it). # Default Micrometer for integration monitoring From 4a6748a269e76fb534ff598004f8a6b100ee4fb5 Mon Sep 17 00:00:00 2001 From: Pasquale Congiusti Date: Fri, 14 Jul 2023 15:43:37 +0200 Subject: [PATCH 05/10] Update index.md --- content/blog/2023/07/camel-k-2-0/index.md | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/content/blog/2023/07/camel-k-2-0/index.md b/content/blog/2023/07/camel-k-2-0/index.md index 90e57303c9c..a52d182c2ca 100644 --- a/content/blog/2023/07/camel-k-2-0/index.md +++ b/content/blog/2023/07/camel-k-2-0/index.md @@ -143,13 +143,9 @@ In version 2 they won't be any longer available and the operator may fail if tho # Multiple data types and schemas in Kamelets -This feature is not immediately available as it depends on the presence of the relative feature which will be available in Camel 4. When a Camel 4 compatible runtime will be available (we're all waiting with impatience), then you will be able to use the new [Kamelet Data Type configuration](https://github.com/apache/camel-k/pull/4100). - -# Multiple data types and schemas in Kamelets - Kamelets are now able to expose supported input/output data types as part of the [Kamelet data type specification](/camel-k/next/kamelets/kamelets-dev.html#_kamelet_data_types) in order to increase the interoperability with other components. When referencing a Kamelet as a source or sink in a Pipe users may now choose an appropriate input/output data type that fits best for their individual use case. -This feature leverages the [data types transformer concept](https://camel.apache.org/manual/transformer.html) in Apache Camel 4 and reveals its full power once the new major version of Camel is available (we are all eagerly awaiting it). +This feature leverages the [data types transformer concept](/manual/transformer.html) in Apache Camel 4 and reveals its full power once the new major version of Camel is available (we are all eagerly awaiting it). # Default Micrometer for integration monitoring From 1b7cc15a11f95ed56d7f6ea6ea1fd6c687a52371 Mon Sep 17 00:00:00 2001 From: Pasquale Congiusti Date: Fri, 14 Jul 2023 15:45:39 +0200 Subject: [PATCH 06/10] chore: builder strategy details Co-authored-by: Christoph Deppisch --- content/blog/2023/07/camel-k-2-0/index.md | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/content/blog/2023/07/camel-k-2-0/index.md b/content/blog/2023/07/camel-k-2-0/index.md index a52d182c2ca..cf6ab019c78 100644 --- a/content/blog/2023/07/camel-k-2-0/index.md +++ b/content/blog/2023/07/camel-k-2-0/index.md @@ -97,12 +97,17 @@ NOTE: we haven't (yet) deprecated **Kaniko** and **Buildah** strategy and these ## Build order strategy -Another little interesting feature you have available now is the possibility to define which is the order of the building strategy. When in -Camel K 1 you submitted a series of parallel builds, there was no guarantee on the order of execution. Now you can specify it using the [Builder trait order strategy parameter](/camel-k/next/traits/builder.html#_configuration). +Another interesting feature that is now available to you is the possibility to define a build order strategy that controls in which order scheduled integration builds get executed. -If you run many builds in parallel you may want to use the `dependencies` strategy which will take care to smartly create a queue for those builds which may depend on each other and leverage the incremental build feature. +In Camel K v1 a series of parallel submitted builds got executed strictly sequential (only one single build at a time) and there was no guarantee on the order of build execution. -Our operator is smarter than any AI out there!! +Now you can specify the order of builds using the [Builder trait order strategy parameter](/camel-k/next/traits/builder.html#_configuration). + +Supported build order strategies are: +- `sequential`: equivalent to the Camel K 1 behavior running only one single build at a time +- `fifo`: First in first out strategy runs builds as they have been created and allows builds to run in parallel to each other as long as `maxRunningBuilds` limit has not been reached. +- `dependencies`: Sophisticated order strategy smartly creating a queue for those builds which may depend on each other in order to effectively run builds leveraging the incremental build feature. Allows independent builds to run in parallel to each other as long as `maxRunningBuilds` limit has not been reached. +You can now choose from these build order strategies to get the best out of Camel K. Our operator is smarter than any AI out there!! # More info on Kube native CLI From cb97bc01a83c5ea582fafcb854749f7e092252ef Mon Sep 17 00:00:00 2001 From: Pasquale Congiusti Date: Mon, 17 Jul 2023 14:35:03 +0200 Subject: [PATCH 07/10] chore: runtime builder link --- content/blog/2023/07/camel-k-2-0/index.md | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/content/blog/2023/07/camel-k-2-0/index.md b/content/blog/2023/07/camel-k-2-0/index.md index cf6ab019c78..9f461fa1cad 100644 --- a/content/blog/2023/07/camel-k-2-0/index.md +++ b/content/blog/2023/07/camel-k-2-0/index.md @@ -6,8 +6,6 @@ authors: [squakez] categories: ["Releases", "Camel K", "Roadmap"] preview: "What's new in Camel K 2.0!" --- - - © 2023, RoadTrafficSigns.com With a great level of excitement, on behalf of Apache Camel community, I'm proud to announce the general availability of **Camel K 2.0**. It's been a long ride since the beginning of 2023 when we announced the desire to work on an heavy refactoring in order to introduce new shining features and be able to run the future **Camel 4** runtimes. @@ -48,7 +46,7 @@ The build process is now partially decoupled from the runtime process. We have i In order to enable this feature, you will notice that the `CamelCatalog` Custom Resource is now a dynamic resource which is reconciled by the operator. It is the one in charge to dynamically create any new runtime catalog required. This work was a big design change and we're confident it will help use reaching the longer term goal which is to **onboard any Camel runtime** (main, springboot, quarkus). -TODO - some more official doc +Have a look at the official documentation and learn more about the new [Camel K Runtime builder design](/camel-k/next/running/runtime-version.html). ## Transform the build into a pipeline @@ -97,7 +95,7 @@ NOTE: we haven't (yet) deprecated **Kaniko** and **Buildah** strategy and these ## Build order strategy -Another interesting feature that is now available to you is the possibility to define a build order strategy that controls in which order scheduled integration builds get executed. +Another interesting feature that is now available to you is the possibility to define a build order strategy that controls in which order scheduled integration builds get executed. In Camel K v1 a series of parallel submitted builds got executed strictly sequential (only one single build at a time) and there was no guarantee on the order of build execution. @@ -148,7 +146,7 @@ In version 2 they won't be any longer available and the operator may fail if tho # Multiple data types and schemas in Kamelets -Kamelets are now able to expose supported input/output data types as part of the [Kamelet data type specification](/camel-k/next/kamelets/kamelets-dev.html#_kamelet_data_types) in order to increase the interoperability with other components. When referencing a Kamelet as a source or sink in a Pipe users may now choose an appropriate input/output data type that fits best for their individual use case. +Kamelets are now able to expose supported input/output data types as part of the [Kamelet data type specification](/camel-k/next/kamelets/kamelets-dev.html#_kamelet_data_types) in order to increase the interoperability with other components. When referencing a Kamelet as a source or sink in a Pipe users may now choose an appropriate input/output data type that fits best for their individual use case. This feature leverages the [data types transformer concept](/manual/transformer.html) in Apache Camel 4 and reveals its full power once the new major version of Camel is available (we are all eagerly awaiting it). From c987d0dc28286a2723e923677a2a732051b7de9d Mon Sep 17 00:00:00 2001 From: Pasquale Congiusti Date: Mon, 24 Jul 2023 08:49:45 +0200 Subject: [PATCH 08/10] chore: camel k 2.0 performances Co-authored-by: Christoph Deppisch --- content/blog/2023/07/camel-k-2-0/index.md | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/content/blog/2023/07/camel-k-2-0/index.md b/content/blog/2023/07/camel-k-2-0/index.md index 9f461fa1cad..4193182ef7a 100644 --- a/content/blog/2023/07/camel-k-2-0/index.md +++ b/content/blog/2023/07/camel-k-2-0/index.md @@ -166,6 +166,29 @@ For more information you can have a look at the [Multi architecture official doc If you're a Camel K contributor you have noticed that we introduced a nice action which is taking care to calculate the code coverage of the new code developed. The actions reports the coverage difference, so we know how we increase (or decrease) indirectly the quality of the code. This is not really (yet) a gateway, we want to create awareness among Camel K developers about the level of quality we introduce with each change. Little by little we expect to **increase the quality of the code** we produce and have less bugs affecting our code. +# Optimize operator performance and resource allocation + +The team has made some effort to reduce the amount of resources (memory and CPU) consumed by the Camel K operator. The results of this can be seen when creating many Integrations on a cluster and when the operator runs multiple integration builds. + +We have run some test scenarios and compared the results of different Camel K versions. + +_Test scenario: Running 600 Camel K integrations_ + +| Camel K | avg. Memory | avg. CPU | Time | +| :------- | :------------: | :--------: | :----: | +| 1.9.0 | 529 MiB | 262 millicores | 29 mins | +| 1.12.1 | 344 MiB | 54 millicores | 21 mins | +| 2.0.0 | 306 MiB | 60 millicores | 20 mins | + +_Test scenario: Running 50 integrations builds in parallel_ + +| Camel K | avg. Memory | avg. CPU | Time | +| :------- | :------------: | :--------: | :----: | +| 1.9.0 | 510 MiB | 352 millicores | 59 mins | +| 1.12.1 | 440 MiB | 185 millicores | 57 mins | +| 2.0.0 | 326 MiB | 45 millicores | 38 mins | + +The Camel K 2.0 results are pleasant especially when running multiple builds at the same time. The team is keen to keep improving the operator performance in future releases. # Documentation The last important point we've introduced is about the additional documentation we've provided. Maintaining the documentation up to date is a very well known hard task. But we know this is important for the final users to get the best from the project. From 88ecf5b5a69230f8d86bda77a17dad70035f7de6 Mon Sep 17 00:00:00 2001 From: Pasquale Congiusti Date: Mon, 24 Jul 2023 10:11:47 +0200 Subject: [PATCH 09/10] chore: set release date and links --- content/blog/2023/07/camel-k-2-0/index.md | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/content/blog/2023/07/camel-k-2-0/index.md b/content/blog/2023/07/camel-k-2-0/index.md index 4193182ef7a..3f16e00a37e 100644 --- a/content/blog/2023/07/camel-k-2-0/index.md +++ b/content/blog/2023/07/camel-k-2-0/index.md @@ -1,6 +1,6 @@ --- title: "Camel K 2.0" -date: 2023-07-13 +date: 2023-07-24 draft: false authors: [squakez] categories: ["Releases", "Camel K", "Roadmap"] @@ -14,6 +14,17 @@ This is the first important milestone reached, and we thought that the work done Let's look at one by one the main new features or updates that Camel K 2.0 is introducing. We plan to work on more blogs and documentation dedicated to each of the new features introduced during next months. +# Release details + +You can find all the CLIs and detailed changelog information in the [Camel K 2.0.0 release page](https://github.com/apache/camel-k/releases/tag/v2.0.0). Download the CLI for your operating system and architecture, `kamel install` and be ready to use the latest features available. + +As usual, we acknowledge the great work done in Apache Camel community. Camel K default runtime is based on the following projects: + +* Apache Camel K Runtime 2.16.0 +* Apache Camel Quarkus 2.16.0 +* Apache Camel 3.20.1 +* Apache Camel Kamelets 3.20.1.1 + # Upgrade from V1 The first concern you may have is about compatibility to Camel K version 1 and how to upgrade: we have worked to make this process as smooth as possible. We introduced some important change in the Kubernetes API and we tried to make this in a backward compatible manner. In particular we have promoted the `v1alpha1.Kamelet/KameletBinding` API to `v1` as we now feel it's mature enough and we have renamed the `v1alpha1.KameletBinding` to `v1.Pipe`. From f64a599164476accb3aa1dab3dcb6250850c5cea Mon Sep 17 00:00:00 2001 From: Pasquale Congiusti Date: Mon, 24 Jul 2023 16:37:48 +0200 Subject: [PATCH 10/10] chore: add graphs --- content/blog/2023/07/camel-k-2-0/50_builds.svg | 1 + content/blog/2023/07/camel-k-2-0/600_integrations.svg | 1 + content/blog/2023/07/camel-k-2-0/index.md | 4 ++++ 3 files changed, 6 insertions(+) create mode 100644 content/blog/2023/07/camel-k-2-0/50_builds.svg create mode 100644 content/blog/2023/07/camel-k-2-0/600_integrations.svg diff --git a/content/blog/2023/07/camel-k-2-0/50_builds.svg b/content/blog/2023/07/camel-k-2-0/50_builds.svg new file mode 100644 index 00000000000..cdce7e7ec0f --- /dev/null +++ b/content/blog/2023/07/camel-k-2-0/50_builds.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/content/blog/2023/07/camel-k-2-0/600_integrations.svg b/content/blog/2023/07/camel-k-2-0/600_integrations.svg new file mode 100644 index 00000000000..b024cf211cc --- /dev/null +++ b/content/blog/2023/07/camel-k-2-0/600_integrations.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/content/blog/2023/07/camel-k-2-0/index.md b/content/blog/2023/07/camel-k-2-0/index.md index 3f16e00a37e..7fe683c6526 100644 --- a/content/blog/2023/07/camel-k-2-0/index.md +++ b/content/blog/2023/07/camel-k-2-0/index.md @@ -185,6 +185,8 @@ We have run some test scenarios and compared the results of different Camel K ve _Test scenario: Running 600 Camel K integrations_ +![Running 600 Camel K integrations](600_integrations.svg) + | Camel K | avg. Memory | avg. CPU | Time | | :------- | :------------: | :--------: | :----: | | 1.9.0 | 529 MiB | 262 millicores | 29 mins | @@ -193,6 +195,8 @@ _Test scenario: Running 600 Camel K integrations_ _Test scenario: Running 50 integrations builds in parallel_ +![Running 50 integrations builds in parallel](50_builds.svg) + | Camel K | avg. Memory | avg. CPU | Time | | :------- | :------------: | :--------: | :----: | | 1.9.0 | 510 MiB | 352 millicores | 59 mins |