streamnative / function-mesh

The serverless framework purpose-built for event streaming applications.
https://functionmesh.io/
Apache License 2.0
213 stars 29 forks source link
apache-pulsar connectors event-streaming pulsar-functions pulsar-io serverless stream-processing

Function-Mesh

A Kubernetes-Native way to run pulsar functions, connectors and composed function meshes.

Install

curl -sSL https://github.com/streamnative/function-mesh/releases/download/v0.22.0/install.sh | bash

The above command installs all the CRDs, required service account configuration, and all function-mesh operator components. Before you start running a function-mesh example, verify if Function Mesh is installed correctly.

Note:

install.sh is suitable for trying Function Mesh out. If you want to use Function Mesh in production or other serious scenarios, Helm is the recommended deployment method.

Prerequisite

Compatibility

Kubernetes compatibility matrix

This table outlines the supported Kubernetes versions. We have tested these versions in their respective branches. But note that other versions might work as well.

Function Mesh operator Kubernetes 1.19 Kubernetes 1.20 Kubernetes 1.21 Kubernetes 1.22 Kubernetes 1.23 Kubernetes 1.24 Kubernetes 1.25
v0.20.0
v0.19.0
v0.18.0
v0.17.0
v0.16.0
v0.15.0
v0.14.0
v0.13.0
v0.12.0
v0.11.2
Master

Development

git clone https://github.com/streamnative/function-mesh.git

Note

The following command will generate the scaffolding files in the api/<version>/ path, in this case api/v1alpha1, and then you need to move the files contained in it to the api/<group>/<version> directory manually, in this case api/compute/v1alpha1.

operator-sdk create api --group compute --version v1alpha1 --kind Function --resource=true --controller=true
operator-sdk create webhook --group compute.functionmesh.io --version v1alpha1 --kind Function --defaulting --programmatic-validation

Deployment

  1. make sure connected to a kubernetes cluster(gke, mini-kube etc.)
    gcloud container clusters get-credentials cluster-1 --region $CLUSTER_REGION --project $PROJECT_ID
  2. compile the repo to generate related resources in the root dir of the repo.
    make generate
  3. install the CRD into your k8s cluster.
    make install
  4. start the controller locally. Only the controller itself is running in your local terminal, all the resources will be running inside the connected kubernetes cluster
    make run
  5. submit a sample CRD to the cluster. You can also submit other CRDs under the ./config/samples directory
    kubectl apply -f config/samples/compute_v1alpha1_function.yaml
  6. verify your submission with kubectl, and you will see the function pod is running
    $ kubectl get all
    NAME                                READY   STATUS      RESTARTS   AGE
    pod/function-sample-0               1/1     Running     0          77s
  7. in order for function actually work, you need to have a pulsar cluster available for visiting. you can use the helm-chart to deploy one