Thanks for bringing up Tekton; I was going to suggest taking a look at
it since knative was brought up. I'd definitely recommend that over
knative-build as it's getting a lot more attention from external
contributors from other related projects like Jenkins X, GCP, etc.

On Mon, 20 May 2019 at 10:12, Michele Sciabarra <mich...@sciabarra.com> wrote:
>
> >>> - I second Markus concern to implement the invocation API onto Knative 
> >>> instead of just using Knative service syntax.
> >> Can you elaborate this? I do not understand.
>
> >Knative service syntax:    https://<service(in our case = 
> >action)>.<namespace>.<host>/
> >OW invocation 
> >https://<api-host>/api/v1/namespaces/<namespace>/actions/<action>
> >(I personally so no worth in inventing a distinct API for OW images, but as 
> >said I would see that as a valid optional feature)
>
> Understood,  thx! Well I need to setup a wildcard domain to work with this 
> locally I see...
> Anyway it is a good idea to do this.
>
> >
> >> - I would have concerns to make it dependent on Gloo which is kind of a 
> >> minority choice for Knative load balancing
> > I do not think it will be hard to setup a test also using Istio, I do not 
> > want to be limited to Gloo.
>
> >I just wanted to prevent that Gloo gets a “official” prerequisite for an 
> >“official” OW on Knative flow.
> >It is of course free to you to use what ever you want to do in your 
> >prototype.
>
> No it will not. My concern is to make something easy to setup. Kubernetes is 
> already hard enough.
>
>
> > - In my opinion the goal should be to have some uniform behaviour for 
> > ActionLoop based runtimes
> >> and other ones like the adapted NodeJS runtimes demonstrated by Matt and 
> >> Priti
> > As much as I can tell the current implementation is just the building and 
> > exposing the "/init" and "/run" but I can be wrong.
> > The build can be of course reused, so it continues the effort. For the 
> > frontend, from the documentation I think Matt wants to add a proxy, while I 
> > would like to implemeent the "invocation" straight in the runtime. This is 
> > open to discussion, but of course it is better to reach an agreement.
>
> >Also in the work of Priti and Matt the invocation goes directly to the 
> >runtime. The action code is either passed with the call (not >yet tested by 
> >me) or set via environment variable in the docker build.
> But if we use Tekton... hmmm
>
> >
> >> - As Knative Build seems be on a dead end I would propose to target Tekton 
> >> as the build system (which developed as kind of >successor out of Knative)
> >
> > If Knative build is dead then it would be a bit unfair that they change it 
> > as the scope of the Knative project!
> > It looks like the goal is  to setup some standards! And I would be very 
> > disappointed to know that.
>
> >Tekton evolved out of Knative Build (or more correct out of Knative 
> >Pipelines) but is very similar to the Knative build.
> >Flows can easily be ported from one to the other,
> >If we target Tekton build we would target the platform were the Knative 
> >build team is focusing on.
> >But again feel free to use whatever platform for your prototype work.
>
> From a quick check looks like Tekton is actually the way to go. Sadly it was 
> not clear reading the documentation.
>
> > At this stage the build is the more interesting thing, and it could be even 
> > imported in main openwhisk to speed up deployment.
> > I have already baked it in the ActionLoop runtimes (with precompilation).
> > Also if we use Tekton, where is the Knative standard then? What is the 
> > point? We can build our own system instead of "Knativizing" it...
> >
> >> Maybe it would be a good solution to tackle two things independently.
> >> 1) Design and implement a common protocol of building, running and calling 
> >> OW runtimes on Knative
> >> 2) Implement the OW invocation API on top of Knative as an additional 
> >> option for those who have the need to expose it.
> >
> > On this, for my personal approach at building things, I want something that 
> > works and it is complete and useful. A "MVP”.
>
> Cool. Just go on.
>
> > So I do not plan to split the effort. Version 0.1 must be a minimal working 
> > subset of OpenWhisk on Knative.
> > Because otherwise there will be incomplete useless inusable pieces around 
> > (see for example kwsk).
> >
> > It does not mean that things cannot be modular, nor that everyone must but 
> > to me "openwhisk-knative" must be a single repo with all the pieces to make 
> > something where you can download is and deploy in a kubernetes cluster and 
> > be able to deploy simple actions. When this works, we can improve 
> > incrementally and split it but keeping it working.
> >
> >> I would looking forward to work with you on the first work item.
> > Great  but I see now more details to discuss before we can start. Most 
> > notably I need to understand how I can build on top of Mark and Priti work 
> > and continue their work. ANd I can even probably recover some of the code 
> > of kwsk as they implemented some openwhisk api, that I want now in the 
> > runtime.
> >
>
> >I do not want to stop you in any way. My hope is that the action loop 
> >runtimes and the “other ones” do expose the same >behaviour when being 
> >called. So that the users is not surprised when calling different actions in 
> >different languages.
> >And behaving the same way might also mean to adapt the “other languages” to 
> >the same behaviour as the action loop based >ones.
> >They just should be uniform to be used.
>
> >When your prototype is accessible it would be a good point of time to 
> >discuss this.
>
> >As said I very much like your effort.
>
> >
> >> On 20. May 2019, at 08:55, Michele Sciabarra <mich...@sciabarra.com> wrote:
> >>
> >>
> >>>> I have an idea for implementing a prototype of OpenWhisk on top of 
> >>>> Knative.
> >>>> My basic ideas are: do not use any proxy, forwarding or adapter: extend
> >>>> the runtime to support the REST call and expose them as ingress. And use 
> >>>> a
> >>>> wrapper on top of `kubectl` to generate all the needed components.
> >>
> >>> Does this tie into the work that Matt was doing to the runtimes to make
> >>> them runnable on Knative? Is this lined up with that at all?
> >> Actually yes. He suggested I can investigate how to migrate ActionLoop to 
> >> port many other languages to Knative.
> >> Also he recommended I add my idea and this is what I am doing. Current 
> >> code is, if I am not wrong, a Knative build of the nodejs runtime.
> >>
> >> There has been a number of attempts and proposal to move forward 
> >> OpenWhisk. My idea that to succeed we need something small but that just 
> >> works. This is my idea to be able to implement in the shorter time frame 
> >> possible an actual subset of OpenWhisk that works and it is truly built on 
> >> top of Knative. So I am putting the thing a bit further than Matt work.
> >>
> >>
> >>>> My goal is to have a functional work-alike of OpenWhisk built on top of
> >>>> Knative, using ActionLoop as a foundation. I will extend ActionLoop to
> >>>> support the required REST calls of OpenWhisk.
> >>>
> >>>> I also want to create tool, I will call `wskn`. This tool will initially
> >>>> just a python script, a wrapper on top of `kubectl` as it will generate
> >>>> kubernetes descriptors.
> >>> Why not build this into "wsk" itself? The Azure Functions CLI as an 
> >>> example
> >>> supports multiple deployment types like this in one CLI.
> >>
> >> When it will works, yes, of course. But to start, what I really need is a 
> >> prototype that can generate kubernetes descripttors to feed to kubectl, so 
> >> a  simplee, quick and ditry, separate tool (that I will keep together the 
> >> runtime) is all I need for now.
> >>
> >>>>
> >>>> It will support initially just the the action creation and invocation, 
> >>>> and
> >>>> only synchronous (blocking) behaviour, as all the request will go 
> >>>> straight
> >>>> to the runtimes. Hopefully also a subset of `package` and `activation`.
> >>>> Again triggers, rules, asynchronous for later.
> >>>>
> >>>> The idea is that you will be able to create actions and web actions that
> >>>> can run existing OpenWhisk actions, at least those with blocking 
> >>>> behaviour
> >>>> that run with ActionLoop (Go, Java, Python, PHP, Swift, Rust, Ruby,
> >>>> Crystal...)
> >>>>
> >>>> Implementation.
> >>>> ==============
> >>>>
> >>>> This is how I plan to implement it.
> >>>>
> >>>> At this stage I want to use just Knative Serving and Knative Build, using
> >>>> Gloo for the ingress part. I also plan to install a local Docker registry
> >>>> Kubernetes registry, so we do not have to use DockerHub for everything. 
> >>>> All
> >>>> of this can be done with existing command line tools in a few minutes in
> >>>> any running Kubernetes deployment.
> >>>>
> >>
> >>> Why specifying Gloo here? Do you need anything specific from Gloo itself?
> >>> If not I'd propose to just keep it on a Knative Serving API surface level.
> >> I want to build it on top of Knative serving, full stop. Currently, 
> >> installing Gloo is pretty easy and is more  lightweight than Istio so I 
> >> will use it for my  first implementation.
> >>
> >>>>
> >>>> When I create an action, it will use Knative build that will work roughly
> >>>> in this way:
> >>>>
> >>>> - create a configmap with the action code
> >>>> - build the actin using ActionLoop precompilation feature that will 
> >>>> return
> >>>> a zip file including all the needed to run the action
> >>>> - create a new docker image extending the runtime with the new zip, using
> >>>> Kaanico
> >>>> - push the image in the local registry
> >>> This feels like a fairly heavyweight process, we should be able to come up
> >>> with a way to circumvent zipping entirely. Maybe the runtime can detect
> >>> that the unzipped content is already there and skip the unzip step?
> >>
> >> Actually this is my first idea of how to use Knative build. And is not 
> >> complicated: when I create the action, a run a build that includes Kanico. 
> >> I generate a Dockerfile on the fly. The docker file uses the action 
> >> runtime that already know how to compile a script. And then I save an 
> >> image. I already implemented un "autoinit" so just launching the image 
> >> will give a runtime ready to run that execute an action already compiled.
> >>
> >>
> >>> I'm fairly hesitant on the usage of a ConfigMap for storing the action
> >>> code. It's all stored in the in-cluster etcd instance and it has a limit 
> >>> of
> >>> 1M. This is at most a stop-gap solution to provide a PoC I think. Any 
> >>> ideas
> >>> on how to "productize" this?
> >>
> >> ConfigMap can be mounted as files, so it is an easy way  to feed an action 
> >> to a build. It is just an easy way to feed the action code to the Build.
> >>
> >> My initial constraint is that I want just to generate Kubernetes 
> >> descriptors to feed to kubectl.
> >> Of course in the long run I can add some "file upload" storage.
> >>
> >> If I could to this file upload when invoking a build it could ideal as I 
> >> do not have to store anything anywhere, just process the code and generate 
> >> a single layer to execute actions to be store in the registry.
> >> I will investigate better this area, I understand your concern.
> >>
> >>>
> >>>> At this point you can run the action. ActionLoop will be extended to
> >>>> support invocations in the format
> >>>> "/v1/namespaces/namespace/actions/package/action".
> >>> Why bother reimplementing this exact path? To obtain API compatibility 
> >>> with
> >>> OpenWhisk as it is today?
> >>
> >> I want to implement a subset of the OpenWhisk API on top of Knative 
> >> serving.
> >> Knative serving already does the scaling and routing, so what we need are 
> >> the "endpoints" to invoke actions.
> >>
> >> Since I do not want to add additional components, not at the first stage. 
> >> Just knative serve and build, the runtime and a controller script, the 
> >> runtime is the natural place where to "handle" the API invocations, since 
> >> Knative only generates the URL but not anything else.  If I understood 
> >> well, Matt is adding a proxy. I do not want to add a proxy, just add to 
> >> the runtime the ability to respond to "API like" calls, at least those 
> >> regarding action invocation.
> >>
> >>>> It will do all the decoding required to invoke the action with the
> >>>> expected paramenters (straight invocation thrhoug the actinloop protocol,
> >>>> not proxies).
> >>> Does this mean moving all of the Controller's "smartness" about incoming
> >>> and outgoing HTTP requests (see the whole WebActions for example)?
> >>
> >> At least decoding web actions in the runtime, yes. Knative serving already 
> >> has routing and proxying.
> >> So a true implementation on top of Knative requires IHMO this sacrifice. 
> >> Unless there is a way to keep the controller in a "Knative" compatible 
> >> way. Open to suggestions here.
> >>
> >>> Each action will then be exposed using an ingress with its specific
> >>> invocation path.
> >>>
> >>> If the community agrees with this plan, I would create a repo
> >>> `incubator-openwhisk-knative` to work on it.
> >>>
> >>> Thoughts?



-- 
Matt Sicker <boa...@gmail.com>

Reply via email to