Hello everyone,

This is a call for the vote to make an internal change to move the code of
K8S, Celery and related (LocalKubernetes., CeleryKubernetes etc. ) to
respective providers.

Consider it +1 (binding) from my side.

This has been discussed in
https://lists.apache.org/thread/kwwhz62lddygodpgr3fk4b9tthtld9do and let me
summarize it below:

# Why?

Multiple reasons:

* It will make it easier to manage consistency between K8S Pod Manager and
K8S executor. In the past there were non-trivial dependencies between those
that resulted in k8s provider being limited to latest airflow versions
* It's non-obvious that the code used in K8S executor uses two different
artifacts (airflow and cncnf.k8s provider) and it limits our abilities to
refactor/modify/improve this code as it has to work with various
combinations of airflow + cncf.kubernete versions
* provider's releases (major/minor versions) have much faster release cycle
and we can both - fix and provide new features to those executors
* users who have good reasons to not to upgrade to latest airflow releases
will be able to use latest k8s/celery executors by updating providers only
* if there are regressions with executors in newer airflow versions, users
will be able to downgrade providers - without downgrading the whole airflow
(downgrading the DB etc.)
* this follows the philosophy of Airflow-as-a-platform, where anyone can
extend Airflow by adding new plugins/providers and moving the executor to
providers proves the point that anyone can do their own executor and that
they will have the same capabilities as the ones that are built-in

# Why now?

We are in the process of finishing AIP-51 with executor decoupling and
where we got rid of the hard-coded behaviour of Airflow depending on what
executor was used. It was simply impossible before to move the executors to
providers, because the hard-coded behaviours had to maintain the knowledge
about which executor is used. Executor's API was incomplete and some
behaviours of the executors were hard-coded. With AIP-51 completed executor
implementation can simply rely on the complete executor's API - including
exposing properties of the executor that can change airflow core behaviour
appropriately by inspecting the properties.

# Backwards compatibility

I believe we will be able to make it fully backwards compatible with the
usage of PEP 562 and deprecation notices (same as we did with contrib
packages). Also we seem to be converging on the
backwards-compatibility approach, specifically excluding the implementation
of executors from our "Public API list"
https://lists.apache.org/thread/d90b1yvsbwzy5flnd3vslfjs38x76kyj

We will turn  "cncf.kubernetes" and "celery" providers into "pre-installed"
providers, which means that one will be able to use all the built-in
executors with just "pip install airflow" (interestingly enough before that
one had to install the k8s provider to make the K8s executor work even if
they were part of the core which was sub-optimal).

Also, resulting from the discussion we will keep documentation for
available executors in Airflow (so they will still be considered as THE
executors available and will be discoverable in the same way as today).

# Potential problems

Seems there are no known problems it can cause. There is the question
"where to put CeleryKubernetesExecutor?" and the proposal is to put it in
"cncf.k8s" and treat celery as an optional dependency ("celery" extra) of
"cncf.k8s" provider. Since both providers will be pre-installed, this is
not a problem or concern for any use case.

J.

Reply via email to