question-mark
Stuck on an issue?

Lightrun Answers was designed to reduce the constant googling that comes with debugging 3rd party libraries. It collects links to all the places you might be looking at while hunting down a tough bug.

And, if you’re still stuck at the end, we’re happy to hop on a call to see how we can help out.

[feature] default to the emissary executor

See original GitHub issue

Update - 2021.9.13

edited by @Bobgy

KFP 1.7.0 is released. documentation is live: https://www.kubeflow.org/docs/components/pipelines/installation/choose-executor/ choosing an executor will be an option starting from KFP 1.7.

Update - 2021.8.6

edited by @Bobgy

Discussed with @kramachandran and decided to delay the default change for at least one KFP minor version, because argo emissary executor is still in Alpha state. There can be other corner cases that we haven’t found, so we should give people some time to test it out.

Therefore, I’d like to propose the following:

  • still default to docker executor in 1.7.0 release
  • provide emissary executor as an option and document how to migrate
  • collect feedback from people who starts to try emissary executor

TODOs:

Issues discovered when testing argo v3.1.0 with KFP:

=== the following are the original proposal ===

What feature would you like to see?

Update argo to 3.11 such that we can use the emissary executor as decided by @bobgy in https://github.com/kubeflow/pipelines/pull/4645#issuecomment-845691359

What is the use case or pain point?

The Docker, Kubelet, PNS and K8sapi executors have severe limitations that will be solved by Argo 3.1 and the emissary executor.

Here is an overview https://argoproj.github.io/argo-workflows/workflow-executors/

In a nutshell docker breaks security completely and is incompatible with kubernetes 1.19 https://github.com/kubeflow/pipelines/issues/5714 Kubernetes is also moving to containerd anyway and a lot of users want proper non-docker support for a long time https://github.com/kubeflow/pipelines/issues/1654

Kubelet needs some configuration and has the same limitation as k8sapi and rootless PNS: “Output artifacts must be saved on volumes (e.g. emptyDir) and not the base image layer (e.g. /tmp)” so it breaks the leightweight python components if there is no volume mounted or the output directory is inside the base layer https://github.com/kubeflow/pipelines/pull/4645

One can use a PNS with root rights (PTRACE and CHROOT) to circumvent this, but this obviously breaks the security again.

So only the emissary executor https://argoproj.github.io/argo-workflows/workflow-executors/#emissary-emissary is feasible which does more ore less what i proposed in https://github.com/kubeflow/pipelines/pull/4645 and what was started by Argos @alexec in https://github.com/argoproj/argo-workflows/pull/4766

The Argo update has been done before in https://github.com/kubeflow/pipelines/pull/5266 and https://github.com/kubeflow/pipelines/pull/4693 by @xinbinhuang @Bobgy

Is there a workaround currently?

# Emmissary executor, needs argo 3.1+
# Sadly visualizations are broken(26.04.2021) for k8sapi and emissary

kubectl -n kubeflow patch configmap/workflow-controller-configmap --type='json' -p='[{"op": "replace", "path": "/data/containerRuntimeExecutor", "value": "emissary"}]'

kubectl edit deployment/workflow-controller -n kubeflow
...
    spec:
      containers:
      - env:
        - name: "LEADER_ELECTION_DISABLE"
       	  value: true
      - args:
	- --configmap
        - workflow-controller-configmap
        - --executor-image
        - docker.io/argoproj/argoexec:latest
        command:
        - workflow-controller
        image: docker.io/argoproj/workflow-controller:latest    
        env:
	- name: "LEADER_ELECTION_DISABLE"
          value: "true"
...
kubectl -n kubeflow patch configmap/workflow-controller-configmap --type='json' -p='[{"op": "replace", "path": "/data/containerRuntimeExecutor", "value": "emissary"}]'
kubectl rollout restart deployment workflow-controller -n kubeflow

or manually patching the sdk and using k8sapi as done in https://github.com/kubeflow/pipelines/pull/4645

Or use kfp-tekton

Love this idea? Give it a 👍. We prioritize fulfilling features with the most 👍.

Issue Analytics

  • State:closed
  • Created 2 years ago
  • Reactions:24
  • Comments:25 (21 by maintainers)

github_iconTop GitHub Comments

3reactions
NikeNanocommented, May 25, 2021

Have started the work to upgrade should be easy to go to the next version when it is out.

1reaction
juliusvonkohoutcommented, Oct 25, 2021

Is there any estimation of when the emissary is going to be the default executed?

I think there are some small runasbonnroot bugs for V2 pipelines, but V1 and V2-Compatible should be fine. Feel free to help there… So I hope that they change the default to emissary in 1.9. (kubeflow 1.5 most likely) . I bet that @Bobgy wants to update argo argo to >= 3.2.2 to get the most mature emissary executor. There is also an emissary feedback issue somewhere here where you can ask.

Read more comments on GitHub >

github_iconTop Results From Across the Web

Workflow Executors - The workflow engine for Kubernetes
Emissary (emissary)​​ Default in >= v3. 3. This is the most fully featured executor. Reliability:
Read more >
Choosing an Argo Workflows Executor - Kubeflow
Docker executor is the default workflow executor. But Kubeflow Pipelines v1.8 will switch to Emissary Executor as default executor.
Read more >
[feature] default to the emissary executor · Issue #5718
Therefore, I'd like to propose the following: still default to docker executor in 1.7.0 release; provide emissary executor as an option and document...
Read more >
Sunsetting Docker Executor Support in Argo Workflows
One of the executors, the default executor, is the Docker executor. But you may have heard, Docker is going away.
Read more >
Unable to run Argo workflow with containerized .Net Console ...
... emissary executor you must either explicitly specify the command, ... .github.io/argo-workflows/workflow-executors/#emissary-emissary.
Read more >

github_iconTop Related Medium Post

No results found

github_iconTop Related StackOverflow Question

No results found

github_iconTroubleshoot Live Code

Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free

github_iconTop Related Reddit Thread

No results found

github_iconTop Related Hackernoon Post

No results found

github_iconTop Related Tweet

No results found

github_iconTop Related Dev.to Post

No results found

github_iconTop Related Hashnode Post

No results found