• Stars
    star
    2,095
  • Rank 21,249 (Top 0.5 %)
  • Language
    Go
  • License
    MIT License
  • Created almost 7 years ago
  • Updated 2 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Serverless Functions For Kubernetes

faas-netes - Serverless Functions For Kubernetes with OpenFaaS

Build Status Go Report Card License: MIT OpenFaaS

Introduction

faas-netes is an OpenFaaS provider which enables Kubernetes for OpenFaaS. It's part of a larger stack that brings a cloud-agnostic serverless experience to Kubernetes.

The existing REST API, CLI and UI are fully compatible. With OpenFaaS Pro, you have an optional operator mode so that you can manage functions with kubectl and a CustomResource.

You can deploy OpenFaaS to any Kubernetes service - whether managed or local, including to OpenShift. You will find any specific instructions and additional links in the documentation.

OpenFaaS (Functions as a Service) is a framework for building serverless functions with Docker and Kubernetes which has first class support for metrics. Any process can be packaged as a function enabling you to consume a range of web events without repetitive boiler-plate coding.

OpenFaaS workflow

Pictured: OpenFaaS conceptual architecture

Highlights

  • Platform for deploying serverless-style workloads - microservices and functions
  • Native Kubernetes integrations (API and ecosystem)
  • Built-in UI portal
  • Scale to and from zero
  • Built-in queuing and asynchronous invocations
  • Custom routes and domain support
  • Commercial support available

Additional & ecosystem:

  • A range of event-connectors and cron-support
  • helm chart and CLI installer
  • Operator available to use Custom Resource Definitions (CRDs) (See also: OpenFaaS Pro)
  • IDp integration with OIDC and commercial add-on

Community:

  • Over 30k GitHub stars
  • Independent open-source project with over 300 contributors, with commercial option available

Commercial options:

  • Support from full-time team
  • Commercial add-ons and integrations with events like Kafka, Postgres, AWS SQS and Cron
  • Multiple namespace support
  • gVisor support and runtimeClass for isolation
  • Affinity and advanced scheduling / security constraints

Get started

The PLONK Stack

OpenFaaS can be used as complete stack for Cloud Native application development called PLONK. The PLONK Stack includes: Prometheus, Linux/Linkerd, OpenFaaS, NATS/Nginx and Kubernetes.

Read more: Introducing PLONK.

Technical and operational information

The rest of this document is dedicated to technical and operational information for the controller.

Operating modes - classic or operator

There are two modes available for faas-netes, the classic mode is the default.

  • Classic mode (aka faas-netes) - includes a REST API, multiple-namespace support but no Function CRD - available in Community Edition and OpenFaaS Pro/Enteprise
  • Operator mode (aka "The OpenFaaS Operator") - includes a REST API, with a "Function" CRD and multiple-namespace OpenFaaS Pro/Enterprise

See also: README for "The OpenFaaS Operator"

The single faas-netes image and binary contains both modes, switch between one or the other using the helm chart or the flag -operator=true/false.

Configuration of the controller

faas-netes can be configured with environment variables, but for a full set of options see the helm chart.

Option Usage
httpProbe Boolean - use http probe type for function readiness and liveness. Default: true
write_timeout HTTP timeout for writing a response body from your function (in seconds). Default: 60s
read_timeout HTTP timeout for reading the payload from the client caller (in seconds). Default: 60s
image_pull_policy Image pull policy for deployed functions (Always, IfNotPresent, Never). Default: Always
gateway.resources CPU/Memory resources requests/limits (memory: 120Mi, cpu: 50m)
faasnetes.resources CPU/Memory resources requests/limits (memory: 120Mi, cpu: 50m)
operator.resources CPU/Memory resources requests/limits (memory: 120Mi, cpu: 50m)
queueWorker.resources CPU/Memory resources requests/limits (memory: 120Mi, cpu: 50m)
prometheus.resources CPU/Memory resources requests/limits (memory: 512Mi)
alertmanager.resources CPU/Memory resources requests/limits (memory: 25Mi)
nats.resources CPU/Memory resources requests/limits (memory: 120Mi)
faasIdler.resources CPU/Memory resources requests/limits (memory: 64Mi)
basicAuthPlugin.resources CPU/Memory resources requests/limits (memory: 50Mi, cpu: 20m)

Readiness checking

The readiness checking for functions assumes you are using our function watchdog which writes a .lock file in the default "tempdir" within a container. To see this in action you can delete the .lock file in a running Pod with kubectl exec and the function will be re-scheduled.

Namespaces

By default all OpenFaaS functions and services are deployed to the openfaas and openfaas-fn namespaces. To alter the namespace use the helm chart.

Ingress

To configure ingress see the helm chart. By default NodePorts are used. These are listed in the deployment guide.

By default functions are exposed at http://gateway:8080/function/NAME.

You can also use the IngressOperator to set up custom domains and HTTP paths

Image pull policy

By default, deployed functions will use an imagePullPolicy of Always, which ensures functions using static image tags are refreshed during an update. If this is not desired behavior, set the image_pull_policy environment variable to an alternative. IfNotPresent is particularly useful when developing locally with minikube. In this case, you can set your local environment to use minikube's docker so faas-cli build builds directly into minikube's image store. faas-cli push is unnecessary in this workflow - use faas-cli build then faas-cli deploy.

Note: When set to Never, only local (or pulled) images will work. When set to IfNotPresent, function deployments may not be updated when using static image tags.

Kubernetes Versions

faas-netes maintainers strive to support as many Kubernetes versions as possible and it is currently compatible with Kubernetes 1.11 and higher. Instructions for OpenShift are also available in the documentation.

Contributing

You can quickly create a standard development environment using:

make start-kind

This will use KinD to create a single node cluster and install the latest version of OpenFaaS via the Helm chart.

Check the contributor guide in CONTRIBUTING.md for more details on the workflow, processes, and additional tips.

License

This project is licensed under the MIT License.

More Repositories

1

faas

OpenFaaS - Serverless Functions Made Simple
Go
24,366
star
2

faasd

A lightweight & portable faas engine
Go
2,550
star
3

workshop

Learn Serverless for Kubernetes with OpenFaaS
Python
956
star
4

faas-cli

Official CLI for OpenFaaS
Go
787
star
5

openfaas-cloud

The Multi-user OpenFaaS Platform
Go
767
star
6

templates

OpenFaaS Classic templates
Dockerfile
261
star
7

of-watchdog

Reverse proxy for STDIO and HTTP microservices
Go
244
star
8

ofc-bootstrap

Bootstrap OpenFaaS Cloud for your team
Go
181
star
9

store

Official Function and Template Store for OpenFaaS
Shell
162
star
10

nats-queue-worker

Queue-worker for OpenFaaS with NATS Streaming
Go
122
star
11

faas-provider

A backend provider interface for OpenFaaS
Go
120
star
12

golang-http-template

Golang templates for OpenFaaS using HTTP extensions
Shell
100
star
13

openfaas-linkerd-workshop

Lightweight Serverless on Kubernetes with mTLS and traffic-splitting with Linkerd2
98
star
14

python-flask-template

HTTP and Flask-based OpenFaaS templates for Python 3
Python
82
star
15

faas-swarm

OpenFaaS provider for Docker Swarm
Go
79
star
16

ingress-operator

Custom domains, paths and TLS for your OpenFaaS Functions
Go
68
star
17

docs

Official Docs for OpenFaaS
65
star
18

community-cluster

OpenFaaS Cloud Cluster for Community
60
star
19

connector-sdk

SDK for connecting events to functions
Go
56
star
20

openfaas.github.io

Primary website / landing-page for the project
HTML
53
star
21

store-functions

Common CLIs packaged in containers with a HTTP interface
Dockerfile
51
star
22

media

Press kit / Media pack for OpenFaaS
44
star
23

cron-connector

Invoke functions on a schedule.
Go
39
star
24

nats-connector

An OpenFaaS event-connector to trigger functions from NATS
Go
38
star
25

mqtt-connector

MQTT connector for OpenFaaS
Go
32
star
26

cloud-functions

OpenFaaS social functions
Python
28
star
27

classic-watchdog

Classic Watchdog for OpenFaaS
Go
25
star
28

certifier

OpenFaaS Compliance testing
Go
25
star
29

license-check

Check your code for Copyright header compliance
Go
19
star
30

ruby-http

A Ruby HTTP template for OpenFaaS
Ruby
12
star
31

faas-middleware

HTTP middleware for OpenFaaS
Go
12
star
32

templates-sdk

SDK resources for templates such as models and entrypoints
Java
10
star
33

function-builder-examples

OpenFaaS Pro function builder API examples
Go
10
star
34

social-functions

Enabling social media for OpenFaaS
Go
9
star
35

cli.openfaas.com

The installation script for the OpenFaaS CLI served by Netlify
Shell
9
star
36

python-fan-in-example

Python code example for implementing a fan-out/fan-in pattern with OpenFaaS functions.
Python
8
star
37

config-checker

Check your OpenFaaS Configuration
Go
7
star
38

astradb-openfaas

Connect to Astra DB using Node.js and OpenFaaS
JavaScript
3
star
39

go-sdk

An SDK for use within OpenFaaS functions
Go
3
star
40

openfaas-autoscaler-tests

JavaScript
2
star
41

derek-test-repo

Testing compliance
1
star
42

.github

README for organisation
1
star