-
Notifications
You must be signed in to change notification settings - Fork 56
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
Override vdk version of deployed job #377
Comments
Control Service API has an option by design to set vdk_version which will override default vdk version. Use cases
|
Option 1. (WINNER)Have vdk_version set the version of the distribution. Users can set the version. And we'd take care of them. Pros:
Cons:
Option 2: (DISCARDED)Pros:
Cons:
Option 3 (DISCARDED)(proposed by @gageorgiev ) See details for this option in #377 (comment) Pros:
Cons:
Requirements matrixSee above post for details on use-cases.
If we put more emphasis on ease of use requirement and accept we have other solutions for use case 4 I am inclined to favor option 1 more. |
Maybe I'm missing something, but what's the issue with just including a |
Well it probably would be quickstart-vdk==1.2.3 (which would contain all the plugins and vdk-core) . The way a data job deployment is that it includes vdk and its dependencies as initContainer. While the main container stores the job with its dependencies and shared emptyDir volume between the two containers. In general first we initialize the whole cycle by pulling latest vdk and copying its dependencies in the shared folder and then we use the vdk from that folder to run the job. Data Job Deployment CronJob looks something like this
The job container includes all the dependencies pointed in the job's requirements.txt and does not include vdk. The job container spec looks like this
This enables Zero time upgrade of vdk for all jobs. Which is very beneficial when you have hundreds or thousands of jobs. We start date job run this way /vdk/vdk is used from the vdk init container. This does not mean it may not work entirely though. As it would search for packages in python path . and since the user python path should be preferred over vdk, it may pick the correct packages. (see https://docs.python.org/3/reference/import.html#searching) Major downside is that It's going to be more brittle (it will not always work) though if vdk 1.1 and vdk 1.2 are different and have conflicting dependencies themselves it may cause issues in a But let's considered it as Option 3 |
Updated post #377 (comment) with Option 3 analysis as well. |
I am in favor of option 1. But I think the source of truth should be the docker registry. Users should get vdk versions from their docker registry (e.g. https://hub.docker.com/r/versatiledatakit/quickstart-vdk/tags). In terms of use case 4, I think we just need to point the Control Service to the local docker registry (datajobs.vdk.image=docker-registry:5000/local-vdk-image:latest) during the deployment (vdk server --start). Then the users should build local docker image and push it to the local docker registry (this could be automated). |
Btw, very good explanation of the problem and solutions. |
Setting vdk version is someitmes necessary to enable canary releases and A/B Testing. See #377 Adding command to set vdk version. It is hidden for now as it's experimental Signed-off-by: Antoni Ivanov <aivanov@vmware.com>
Setting vdk version is someitmes necessary to enable canary releases and A/B Testing. See #377 Adding command to set vdk version. It is hidden for now as it's experimental Signed-off-by: Antoni Ivanov <aivanov@vmware.com>
Setting vdk version is someitmes necessary to enable canary releases and A/B Testing. See #377 Adding command to set vdk version. It is hidden for now as it's experimental Signed-off-by: Antoni Ivanov <aivanov@vmware.com>
Setting vdk version is someitmes necessary to enable canary releases and A/B Testing. See #377 Adding command to set vdk version. It is hidden for now as it's experimental Signed-off-by: Antoni Ivanov <aivanov@vmware.com>
* vdk-control-cli: add command to set vdk version Setting vdk version is someitmes necessary to enable canary releases and A/B Testing. See #377 Adding command to set vdk version. It is hidden for now as it's experimental Signed-off-by: Antoni Ivanov <aivanov@vmware.com>
What is the feature request? What problem does it solve?
Currently, all jobs use the same vdk version in which to run. This makes it easier to maintain thousands of jobs as they are uniform.
But if we want to do a canary release of vdk by rolling out the initial version of vdk to a subset of users as an initial test.
Or we want to do A/B testing with different flavors of vdk. We need to be able to override the vdk version for subset of jobs.
Another use-case is when vdk introduces a major release (aka breaking change). We'd need to enable users to use both previous and new major releases concurrently so they can gradually switch to the new release.
Suggested solution
During deploy we can set not only job version (as we do not) but also vdk version (by default it's left empty so it uses latest)
This would all us to override the vdk version per deployment basis
Acceptance Criteria
The text was updated successfully, but these errors were encountered: