-
Notifications
You must be signed in to change notification settings - Fork 350
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Build refactoring (to address runtime decoupling) #3831
Comments
This seems a good idea, and would decouple the camel-k-operator from the integration build, which is good for the operator scalability and availability. |
It seems to be a good starting point but please mind that accessing the local maven repo concurrently was an issue in the past with maven (https://issues.apache.org/jira/browse/MNG-2802) |
I guess some sort of monitoring should be provided anyhow. We'll dig into details for sure. For now, I am interested in collecting feedback about possible downside I am not able to see in this draft analysis. |
Wasn't aware of that. Definitely I'll keep that in mind. It seems it was fixed starting from Maven 3.8.2, but it is not very clear from the comments I can read on that issue. If we follow this design, we can always find a way to have builds sequentially, although we loose the ability to scale (or let the user choose a parallel building without shared volume for Maven cache). |
Note that scaling is also potentially limited by the image reuse strategy we have in camel-k, i.e. see #592 |
This may also relate to: |
Thanks @squakez for the detailed proposition. If I may rephrase the proposal, to better scan the solution space, it proposes to find a solution to both:
Before jumping into the possible implementations, here are my first feedback:
The later point really makes me think that what we try to achieve here is the ability to "inject" build tools dynamically. (Persistant) volumes are one way to achieve this, and are somehow already used to decouple the publish strategy like Buildah and Kaniko, but there may be other ways to be doing it. Currently we do it by "image inheritance", for the JDK, Maven, and Quarkus bits. Are we sure the only way is via persistant volumes? Just to make sure we've scanned the solution space entirely :) |
Mind that we should review what concurrency safety guarantees MNG-2802 provide, here we are talking about accessing the same local Maven repository via different Maven instances, executed on different machines. |
Yeah, I had this in my radar. I guess what we use for the Builder will be an implementation detail (ideally we can reuse what we have in a first poc and move iteratively to something new at a later stage). |
Another related issue: |
@astefanutti the main driver for this proposal is the fact we need to decouple the operator from the runtime.
This draft design is a first idea on how to possibly decouple. We can brainstorm any further idea and see if it's valid for sure. More than a persistent volume we should talk generically as "Maven repo" to avoid to reason on implementation details. |
@squakez yes, it occurred to me that particular issue was about what you've stated in the description:
|
About this one, do you think it would be wise to rely on an additional operator for a core part of the project? If we go that path, aren't we creating a strong dependency on some other stuff? I mean, we go in the direction to remove a dependency (camel k runtime) and we marry another one. |
I don't think we should require to have tekton installed hence we should have a strategy that work on a vanilla kube, but it can be an optional strategy we can use as it is not uncommon to have build be be required to go through a pipeline i.e. for security checks. |
I made some experiment around the possibility to run parallel |
The only missing bit is to understand how to provide the PVC automatically for OLM installation mode: operator-framework/operator-lifecycle-manager#2828 |
One of the hot topic we're discussing recently is about the possibility to decouple Camel K Runtime and have it bundled as a Camel Quarkus provider in order to remove dependency problem in the release cadence. One important thing we should address is how we're removing such dependency from the Build as right now the Camel K Operator container image is inheriting from the Mandrel image expected by the latest runtime in order to be able to perform the build.
I thought we could review the way we're building the Integrations in the following way:
This idea is the merge the two actual building strategy we have in place,
pod
androutine
. In this new scenario we always schedule a kubernetesjob
in order to perform the build (which is nothing else than amvn package
) but we share avolume
in order to keep cached the maven dependencies downloaded. Each different builder is the one which knows which container image to use in order to do the build, based on the runtime version provided in the Integration.Advantages on adopting this model:
This is a draft idea, but I'd like to have some opinion before going deep into details, I may not see some pitfall at this stage yet.
cc @lburgazzoli @astefanutti @oscerd @claudio4j @christophd @zbendhiba @tadayosi
The text was updated successfully, but these errors were encountered: