{"id":21126465,"url":"https://github.com/lreimer/the-big-faas-lebowski","last_synced_at":"2026-01-02T13:15:25.427Z","repository":{"id":71906718,"uuid":"177838480","full_name":"lreimer/the-big-faas-lebowski","owner":"lreimer","description":"Demo repository for The Big Cloud Native FaaS Lebowski","archived":false,"fork":false,"pushed_at":"2020-03-26T16:39:30.000Z","size":17005,"stargazers_count":13,"open_issues_count":1,"forks_count":2,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-03-05T15:02:18.519Z","etag":null,"topics":["cloud-native","cncf","faas","fission","fnproject","kubeless","openfaas"],"latest_commit_sha":null,"homepage":null,"language":"Makefile","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lreimer.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-03-26T17:34:54.000Z","updated_at":"2023-09-08T17:52:02.000Z","dependencies_parsed_at":null,"dependency_job_id":"2d8328a2-5f08-441f-a42f-cfe81830df2b","html_url":"https://github.com/lreimer/the-big-faas-lebowski","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lreimer%2Fthe-big-faas-lebowski","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lreimer%2Fthe-big-faas-lebowski/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lreimer%2Fthe-big-faas-lebowski/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lreimer%2Fthe-big-faas-lebowski/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lreimer","download_url":"https://codeload.github.com/lreimer/the-big-faas-lebowski/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243573168,"owners_count":20312879,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cloud-native","cncf","faas","fission","fnproject","kubeless","openfaas"],"created_at":"2024-11-20T04:41:58.923Z","updated_at":"2026-01-02T13:15:25.397Z","avatar_url":"https://github.com/lreimer.png","language":"Makefile","funding_links":[],"categories":[],"sub_categories":[],"readme":"# The Big Cloud-native Faas Lebowski\n\nThis is the demo repository for my conference talk *The Big Cloud Native FaaS Lebowski*.\n\nOnly a few years ago the move towards microservice architecture was the first big disruption in software engineering: instead of running monoliths, systems were now build, composed and run as autonomous services. But this came at the price of added development and infrastructure complexity. Serverless and FaaS seem to be the next disruption, they are the logical evolution trying to address some of the inherent technology complexity we are currently faced when building cloud native apps.\n\nFaaS frameworks are currently popping up like mushrooms: Knative, Kubeless, OpenFn, Fission, OpenFaas or OpenWhisk are just a few to name. But which one of these is safe to pick and use in your next project? Let's find out.\n\n## Preparation\n\n### Step 1: Create Kubernetes cluster\n\nIn this first step we are going to create a Kubernetes cluster on GCP. Issue the\nfollowing command fire up the infrastructure:\n```\n$ make prepare cluster\n```\n\n### Step 2: Install and Initialize Helm\n\nIn this step we are going to install the Helm package manager so we can later easily\ninstall the different FaaS frameworks.\n\n```\n$ make helm-install helm-init\n```\n\n### Step 3: Prepare Ingress\n\nDuring clsuter setup an Traefik Ingress has been created. To easily access all the\ndemo endpoints we are creating a few virtual hostnames in `/etc/hosts`.\n\nFirst, you need to find out the external IP address of the load balancer. For this, issue the\nfollowing command and write down the external IP address for the `traefik-ingress-service`.\n\n```\n$ kubectl get svc -n kube-system\n```\n\nNow, open your `/etc/hosts` file and enter the following entries. Replace the IP address with\nthe external IP from the `traefik-ingress-service`.\n\n```\n34.76.182.176  traefik-ui.demo\n34.76.182.176  fnproject.lb.fn.internal fnproject.api.fn.internal\n34.76.182.176  nuclio.demo\n34.76.182.176  nuclio-ui.demo\n34.76.182.176  fission.demo\n34.76.182.176  fission-ui.demo\n34.76.182.176  kubeless.demo\n34.76.182.176  kubeless-ui.demo\n34.76.182.176  openfaas.demo gateway.openfaas.local\n```\n\n## Fission Demo\n\nThis demo deploys a simple Go function. We use a pool manager size of 5 for the go environment.\n\n```\n$ make fission-sources\n$ make fission-install\n$ kubectl get all -n fission\n\n$ cd fission/\n$ fission environment create --name go --image fission/go-env --builder fission/go-builder --poolsize 5\n\n$ kubectl get all -n fission-builder\n$ kubectl get all -n fission-function\n\n$ fission fn create --name hello-fission --env go --src hello-fission.go --entrypoint Handler\n$ fission pkg info --name \u003cpkg-name\u003e\n$ fission function list\n$ fission fn test --name hello-fission\n\n$ fission route create --name hello-http --function hello-fission --url /hello-fission --createingress --method GET --host fission.demo\n\n$ http get http://fission.demo/hello-fission\n$ hey -c 50 -z 30s http://fission.demo/hello-fission\n$ wrk -c 50 -t 4 -d 30s http://fission.demo/hello-fission\n\n$ fission env create --name jvm --image fission/jvm-env --version 2 --keeparchive=true --builder fission/jvm-builder\n$ cd fission/examples/jvm\n$ mvn clean package\n$ fission fn create --name hello-jvm --deploy target/hello-world-1.0-SNAPSHOT-jar-with-dependencies.jar --env jvm --entrypoint io.fission.HelloWorld\n$ fission pkg info --name \u003cpkg-name\u003e\n$ fission function list\n$ fission fn test --name hello-jvm\n\n$ fission route create --name hello-jvm --function hello-jvm --url /hello-jvm --createingress --method GET --host fission.demo\n$ http get http://fission.demo/hello-jvm\n\n$ make fission-delete\n```\n\n## Kubeless Demo\n\nThis demo deploys a simple Go function. We set CPU limits to 100m so that the configured HPA\nis working correctly. The functions scales from 5 to 20 replicas.\n\n```\n$ make kubeless-sources\n$ make kubeless-install\n$ kubectl get all -n kubeless\n$ kubeless get-server-config\n\n$ cd kubeless/hello-kubeless/\n$ kubeless function deploy hello-kubeless --from-file func.go --handler func.Handler --runtime go1.12 --cpu 500m\n$ kubeless function call hello-kubeless\n\n$ kubeless trigger http create hello-kubeless --function-name hello-kubeless --path hello-kubeless --gateway traefik --hostname kubeless.demo\n\nhttp get http://kubeless.demo/hello-kubeless\n\n$ cd kubeless/java-kubeless/\n$ kubeless function deploy hello-java8 --runtime java1.8 --handler HelloJug.hello --from-file HelloJug.java\n$ kubeless function deploy hello-java11 --runtime java11 --handler HelloJug.hello --from-file HelloJug.java\n\n$ kubeless function call hello-java8\n$ kubeless trigger http create hello-java8 --function-name hello-java8 --path hello-java8 --gateway traefik --hostname kubeless.demo\n\n$ kubeless function call hello-java11\n$ kubeless trigger http create hello-java11 --function-name hello-java11 --path hello-java11 --gateway traefik --hostname kubeless.demo\n\n$ kubeless autoscale create hello-kubeless --min 5 --max 20 --metric cpu --value 75\n$ kubectl scale deployment hello-kubeless --replicas 5\n\n$ hey -c 50 -z 30s http://kubeless.demo/hello-kubeless\n$ wrk -c 50 -t 4 -d 30s http://kubeless.demo/hello-kubeless\n\n$ make kubeless-delete\n```\n\n## OpenFaas Demo\n\nThe OpenFaas demo has been tuned with the help of @alexellis. The function itself has been labeled\nto scale from 5 to 20 pods. The gateway component of OpenFaaS has been scaled to 5 replicas. Also\nhave a look at https://docs.openfaas.com/architecture/performance/\n\n```\n$ make openfaas-sources\n$ make openfaas-install-arcade\n\n$ kubectl get svc -o wide gateway-external -n openfaas\n$ export OPENFAAS_URL=\":8080\"\n\n# This command retrieves your password\n$ PASSWORD=$(kubectl get secret -n openfaas basic-auth -o jsonpath=\"{.data.basic-auth-password}\" | base64 --decode; echo)\n\n# This command logs in and saves a file to ~/.openfaas/config.yml\n$ echo -n $PASSWORD | faas-cli login --username admin --password-stdin\n\n$ faas-cli list\n$ open http://$OPENFAAS_URL\n\n$ make openfaas-deploy\n\n$ faas template pull https://github.com/openfaas-incubator/golang-http-template\n\n$ cd openfaas\n$ faas template pull https://github.com/openfaas-incubator/golang-http-template\n\n$ faas build -f hello-openfaas.yml\n$ faas push -f hello-openfaas.yml\n$ faas deploy -f hello-openfaas.yml\n\n$ kubectl scale deployment gateway --replicas=5 -n openfaas\n\n$ kubectl get all -n openfaas\n$ kubectl get all -n openfaas-fn\n\n$ http get http://\u003cgateway-external-ip\u003e:8080/function/hello-openfaas\n$ hey -c 50 -z 30s http://\u003cgateway-external-ip\u003e:8080/function/hello-openfaas\n$ wrk -c 50 -t 4 -d 30s http://\u003cgateway-external-ip\u003e:8080/function/hello-openfaas\n\n$ http get http://openfaas.demo/function/hello-openfaas\n$ hey -c 50 -z 30s http://openfaas.demo/function/hello-openfaas\n$ wrk -c 50 -t 4 -d 30s http://openfaas.demo/function/hello-openfaas\n\n# https://github.com/pmlopes/openfaas-quarkus-native-template\n$ faas template pull https://github.com/pmlopes/openfaas-quarkus-native-template\n\n$ mkdir quarkus-function\n$ cd quarkus-function\n$ faas new --lang quarkus-native quarkus-function\n$ mvn clean package\n\n$ faas build -f quarkus-function.yml\n$ faas push -f quarkus-function.yml\n$ faas deploy -f quarkus-function.yml\n\n$ make openfaas-delete\n```\n\n## Knative Demo\n\n\n## Kyma Demo\n\n\n## Nuclio Demo\n\nThis demo deploys a simple Go function that scales up to 20 replicas. The ingress used here\nis Traefik.\n\n```\n$ make nuclio-sources\n$ make nuclio-install\n$ kubectl get all -n nuclio\n\n$ helm install --name nuclio-rabbitmq -f rabbitmq/values.yaml stable/rabbitmq\n\n$ cd nuclio/\n$ ./nuctl create project hello-nuclio -n nuclio\n$ ./nuctl deploy hello-nuclio --path hello-nuclio/main.go --file hello-nuclio/function.yaml --project-name hello-nuclio -n nuclio --max-replicas 20 --registry lreimer\n\n$ open http://nuclio-ui.demo:8070/\n$ http get http://nuclio.demo/hello-nuclio\n$ hey -c 50 -z 30s http://nuclio.demo/hello-nuclio\n$ wrk -c 50 -t 4 -d 30s http://nuclio.demo/hello-nuclio\n\n$ make nuclio-delete\n```\n\nNote: sometimes the CLI times out during deployment of the function. Use the dashboard instead.\nIn case Nuclio has trouble accessing the Docker registry, make sure you have the correct credentials\nset in the Kubernetes secret.\n\n```\n$ kubectl get secrets registry-credentials -n nuclio -o 'go-template={{index .data \".dockerconfigjson\"}}' | base64 -D\n```\n\n## Fn Project Demo\n\n```\n$ make fnproject-sources\n$ make fnproject-install\n$ kubectl get all\n\n$ fn create context fnproject --api-url http://fnproject.api.fn.internal --provider default --registry lreimer\n$ fn use context fnproject\n\n$ fn init --runtime go hello-fn\n$ fn create app demo\n$ fn deploy --app demo\n$ fn invoke demo hello-fn\n\n$ fn create trigger --source /hello-fn --type http demo hello-fn hello-http\n$ http get http://fnproject.lb.fn.internal/t/demo/hello-fn\n$ hey -c 50 -z 30s http://fnproject.lb.fn.internal/t/demo/hello-fn\n$ wrk -c 50 -t 4 -d 30s http://fnproject.lb.fn.internal/t/demo/hello-fn\n\n$ make fnproject-delete\n```\n\n## Maintainer\n\nM.-Leander Reimer (@lreimer), \u003cmario-leander.reimer@qaware.de\u003e\n\n## License\n\nThis software is provided under the MIT open source license, read the `LICENSE`\nfile for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flreimer%2Fthe-big-faas-lebowski","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flreimer%2Fthe-big-faas-lebowski","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flreimer%2Fthe-big-faas-lebowski/lists"}